Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki
Proyecto AjpdSoft: Foros

AjpdSoft :: Ver tema - ¿Se pueden incluir varios campos en un índice único MySQL?
Foros de discusión Buscar Perfil FAQ Iniciar sesión
Information ¿Se pueden incluir varios campos en un índice único MySQL?

Publicar nuevo tema Responder al tema
Foros de discusión » MySQL Server, MySQL Client, motor de bd gratuito   
Ver tema anterior :: Ver tema siguiente
AutorMensaje
varios
Magnífico usuario


Registrado: Oct 10, 2006
Mensajes: 2092

Asunto: ¿Se pueden incluir varios campos en un índice único MySQL? Responder citando

Estoy utilizando MySQL Server 5.0 por primera vez y no tengo muchos conocimientos de SQL ni de bases de datos. Tengo una pequeña duda: tengo una tabla llamada "factura" con varios campos (codigo, numero, fecha, anio, codigocliente, importetotal...). Lo que quiero es que la aplicación de Facturación que estoy desarrollando dé un error si el usuario introduce una factura con el mismo año y con el mismo número. Digamos que no puede haber dos facturas con el mismo año y con el mismo número.

Necesito hacerlo con una consulta SQL pues no tengo posibilidad de instalar MySQL Administrator u otro software para acceso en modo gráfico a modificar las propiedades de las tablas, sólo puedo ejecutar consultas SQL.
MensajePublicado:
Mar Mar 09, 2010 6:54 am
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: ¿Se pueden incluir varios campos en un índice único MySQ Responder citando



Anuncios



varios escribió:
Estoy utilizando MySQL Server 5.0 por primera vez y no tengo muchos conocimientos de SQL ni de bases de datos. Tengo una pequeña duda: tengo una tabla llamada "factura" con varios campos (codigo, numero, fecha, anio, codigocliente, importetotal...). Lo que quiero es que la aplicación de Facturación que estoy desarrollando dé un error si el usuario introduce una factura con el mismo año y con el mismo número. Digamos que no puede haber dos facturas con el mismo año y con el mismo número.

Necesito hacerlo con una consulta SQL pues no tengo posibilidad de instalar MySQL Administrator u otro software para acceso en modo gráfico a modificar las propiedades de las tablas, sólo puedo ejecutar consultas SQL.


Sí, por supuesto, si quieres que sea el motor de base de datos quien compruebe la unicidad de la tabla "factura" por el campo "anio" y "numero" puedes utilizar la siguiente consulta SQL de MySQL Server:

Código:

ALTER TABLE factura ADD UNIQUE INDEX factura_numero_anio (numero, anio);


Donde:
* factura_numero_anio: será el nombre del índice, le puedes poner el que quieras.
MensajePublicado:
Mar Mar 09, 2010 6:57 am
Top of PageVer perfil de usuario
varios
Magnífico usuario


Registrado: Oct 10, 2006
Mensajes: 2092

Asunto: Re: ¿Se pueden incluir varios campos en un índice único MySQ Responder citando



Anuncios



alonsojpd escribió:
Sí, por supuesto, si quieres que sea el motor de base de datos quien compruebe la unicidad de la tabla "factura" por el campo "anio" y "numero" puedes utilizar la siguiente consulta SQL de MySQL Server:

Código:

ALTER TABLE factura ADD UNIQUE INDEX factura_numero_anio (numero, anio);


Donde:
* factura_numero_anio: será el nombre del índice, le puedes poner el que quieras.


Ok, me ha funcionado perfectamente, ya no deja meter dos facturas con el mismo numero y anio. Sólo tengo otro pequeño problema, puesto que no sé capturar el error (si es que se puede), el programa que estoy realizando en Delphi me muestra un error un poco "desagradable" ¿puedo capturar sólo ese error (cuando se incumple el índice) y mostrar lo que quiera? utilizo Delphi 6 y ZeosDBO para la conexión con MySQL.
MensajePublicado:
Mar Mar 09, 2010 7:00 am
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: ¿Se pueden incluir varios campos en un índice único MySQ Responder citando



Anuncios



varios escribió:
Ok, me ha funcionado perfectamente, ya no deja meter dos facturas con el mismo numero y anio. Sólo tengo otro pequeño problema, puesto que no sé capturar el error (si es que se puede), el programa que estoy realizando en Delphi me muestra un error un poco "desagradable" ¿puedo capturar sólo ese error (cuando se incumple el índice) y mostrar lo que quiera? utilizo Delphi 6 y ZeosDBO para la conexión con MySQL.


Para capturar el error sigue estos pasos:

1. En el evento "OnPostError" del TZTable del ZeosDBO añade el siguiente código:

Código:

  if e is EZDatabaseError then
  begin
    case EZDatabaseError(E).ErrorCode of
      1062 : begin
        MessageDlg ('Ya existe una factura con este número y año.',
            mtWarning,[mbok],0);
      end;
     else
        MessageDlg ('Se ha producido un error al intentar guardar el registro:' +
            chr(13) + chr(13) + inttostr(EZDatabaseError(E).ErrorCode) +
            ' -> ' + E.Message, mtInformation,[mbok],0);
    end;
    Action := daAbort;
  end;


Con esto podrás mostrar un aviso personalizado para cada excepción o error que se produzca y quieras capturar.
MensajePublicado:
Mar Mar 09, 2010 7:08 am
Top of PageVer perfil de usuario
Mostrar mensajes de anteriores:   
Todas las horas son GMT - 1 Horas
Publicar nuevo tema Responder al tema
Foros de discusión » MySQL Server, MySQL Client, motor de bd gratuito  

Cambiar a:  
Key
  Puede publicar nuevos temas en este foro
No puede responder a temas en este foro
No puede editar sus mensajes en este foro
No puede borrar sus mensajes en este foro
No puede votar en encuestas en este foro
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A