Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Validar la existencia de un registro (https://www.clubdelphi.com/foros/showthread.php?t=61670)

lucho1981 17-11-2008 21:52:53

Validar la existencia de un registro
 
Buenas gente. Como hago para insertar un registro y no duplicarlo?
Si trabajo con la el campo Id en auto increment como clave (con mysql y delphi 7), como hago para no ingresar dos veces a la misma persona? como tendria q validar los datos antes de cargarlos?

eduarcol 17-11-2008 22:07:06

que campos diferencia una persona de otra?, algun numero de identificacion
?

felipe88 17-11-2008 22:16:13

Tal vez se refiera a no registrar a la misma persona dos veces... como usa un id automático...

eduarcol 17-11-2008 22:35:57

Cita:

Empezado por felipe88 (Mensaje 326514)
Tal vez se refiera a no registrar a la misma persona dos veces... como usa un id automático...

Entendi la parte de no repetir la persona, pero te explico:

Aqui hay algo que se llama cédula de identidad, lo cual es obligatorio para toda persona mayor de 9 años de edad, es un numero unico, que sirve para identificar la persona, no se si en el pais del amigo existiria tal documento, o como se puede diferenciar, obviamente no puede ser por nombre, si lo hace por nombre el sistema solo deberia dar una advertencia que existe alguien con ese nombre...

felipe88 17-11-2008 23:00:32

Cita:

Empezado por eduarcol (Mensaje 326517)
Entendi la parte de no repetir la persona, pero te explico:

Aqui hay algo que se llama cédula de identidad, lo cual es obligatorio para toda persona mayor de 9 años de edad, es un numero unico, que sirve para identificar la persona, no se si en el pais del amigo existiria tal documento, o como se puede diferenciar, obviamente no puede ser por nombre, si lo hace por nombre el sistema solo deberia dar una advertencia que existe alguien con ese nombre...

:D claro... aca tambien lo hay... solo que el compañero lucho1981 no lo esta usando, entonces es muy dificil que pueda diferenciar a los usuarios por el simple nombre... como validar que se registre dos veces alguien llamado Juan si no se sabe si es el mismo... lo mejor lucho1981 es que uses el documento de identificacion....

Caral 17-11-2008 23:15:24

Hola
Tambien se podria usar el reconocimiento por huella digital, con un sencillo programa de escaneo que bueno con delphi es simplisimo.
O bien usar el reconocimiento por voz, eso si es mas complicado ya que se necesita instalar un microfono en el ordenador.:D
Saludos

felipe88 17-11-2008 23:18:23

Cita:

Empezado por Caral (Mensaje 326529)
Hola
Tambien se podria usar el reconocimiento por huella digital, con un sencillo programa de escaneo que bueno con delphi es simplisimo.
O bien usar el reconocimiento por voz, eso si es mas complicado ya que se necesita instalar un microfono en el ordenador.:D
Saludos

Te falto el del iris :rolleyes::D:D

Caral 17-11-2008 23:20:53

Hola
Cita:

Empezado por felipe88 (Mensaje 326530)
Te falto el del iris :rolleyes::D:D

Vamos hombre, ya sabemos que el del iris es para avanzados y no es código abierto.:D:D
Saludos

felipe88 17-11-2008 23:24:37

Cita:

Empezado por Caral (Mensaje 326531)
Hola

Vamos hombre, ya sabemos que el del iris es para avanzados y no es código abierto.:D:D
Saludos

Pues mira que no parece estar ni tan lejos
http://www.freedownloadmanager.org/e...dows)_54666_p/ dice que funciona con Delphi7 :eek:... quien sabe :D:D:D:D

Caral 17-11-2008 23:26:30

Hola
Ya me quitaron el invento.:eek::eek:
Saludos

lucho1981 18-11-2008 02:02:57

Gracias
 
Cita:

Empezado por eduarcol (Mensaje 326510)
que campos diferencia una persona de otra?, algun numero de identificacion
?

Si, el dni diferenciaria a una persona de otra. Pero q pasaria si intento cargar por error a la misma persona? ya sea con el mismo dni. Hay algun forma de preguntar si existe ese dni? o poner 2 campos clave?

Lepe 18-11-2008 09:28:44

Si ya tienes una clave primaria, pon un índice único al dni, así no permitirá duplicados y lanzará un error desde la base de datos. Después ya puedes capturar el error en delphi, bien con el ApplicationEvents o con un try.. except al guardar.

Saludos

Neftali [Germán.Estévez] 18-11-2008 10:11:20

Cita:

Empezado por lucho1981 (Mensaje 326507)
Como hago para insertar un registro y no duplicarlo?
Si trabajo con la el campo Id en auto increment como clave (con mysql y delphi 7), como hago para no ingresar dos veces a la misma persona?

A parte de la clave primaria, existen índices únicos que puedes asignar a otros campos o grupos de ellos. Por ejemplo, aunque el ID sea clave primaria, el DNI (por poner un ejemplo) puede tener índice único.

Lepe 18-11-2008 16:06:01

parece que en este foro hay eeeeecoooo... eeecoooo... eeecoooooo :D

felipe88 18-11-2008 16:28:20

Cita:

Empezado por Lepe (Mensaje 326621)
parece que en este foro hay eeeeecoooo... eeecoooo... eeecoooooo :D

:D... pero quien deberia escucharlo no lo hace :rolleyes:...

lucho1981 18-11-2008 16:37:58

Gracias lepe
 
Cita:

Empezado por Lepe (Mensaje 326573)
Si ya tienes una clave primaria, pon un índice único al dni, así no permitirá duplicados y lanzará un error desde la base de datos. Después ya puedes capturar el error en delphi, bien con el ApplicationEvents o con un try.. except al guardar.

Saludos

Tengo el dni como indice unico en mysql, y cuando intento duplicarlo me salta un error y se cierra el programa. Lo q no se, es como lanzar el error desde la base de datos y capturar el error. Me podrias explicar como? Desde ya muchas gracias.

Neftali [Germán.Estévez] 18-11-2008 16:59:28

Activa el Check para que "salten" las excepciones desde el IDE y a ver en qué línea está fallando. Y qué se hace luego. No es normal que por un error de este tipo se cierre el programa.

Tools/Debugger options/Language exceptions/Stop on Delphi exceptions
(Actícvalo)

lucho1981 18-11-2008 17:13:47

Cita:

Empezado por Neftali (Mensaje 326634)
Activa el Check para que "salten" las excepciones desde el IDE y a ver en qué línea está fallando. Y qué se hace luego. No es normal que por un error de este tipo se cierre el programa.

Tools/Debugger options/Language exceptions/Stop on Delphi exceptions
(Actícvalo)

Tengo activado el Stop on Delphi, me explique mal anteriormente. Lo unico q puedo hacer una vez q quedo en STOP es apretar ctrl+F2 (seguro q solo puedo hacer eso por mi ignorancia), y asi salir de la ejecución.
Este el el error q me devuelve delphi.


Este es el codigo q utilizo para cargar el registro. En que deberia modificarlo?
Código Delphi [-]
if ((ap.text='')or(nom.text='')or(dni.text='')or
            (dir.text='')or(Maskedit1.text='')or(acceso.text='')) then
            begin
            application.messagebox('debe ingresar todos los datos','ERROR',0);
            end
  else
      begin
              with DM.QsinUSER do
                begin
                    ParamByName('pap').Value := ap.Text;
                    ParamByName('pnom').Value := nom.Text;
                    ParamByName('pdni').Value := dni.Text;
                    ParamByName ('ptel').Value := Maskedit1.Text;
                    ParamByName ('pdir').Value := dir.Text;
                    ParamByName ('pacceso').Value := acceso.Text;
                    ExecSQL;
                    Application.MessageBox('Los datos fueron cargados correctamente','Mensaje',0) 
                end;

  DM.tusuarios.Close;
  DM.tusuarios.Open;

  dni.Text :='';
  ap.Text := '';
  nom.Text := '';
  Maskedit1.Text := '';
  dir.Text := '';
  acceso.Text := '';

  ap.SetFocus;
  end;
Gracias

felipe88 18-11-2008 17:43:25

Añade esto...

Código Delphi [-]
if ((ap.text='')or(nom.text='')or(dni.text='')or
            (dir.text='')or(Maskedit1.text='')or(acceso.text='')) then
            begin
            application.messagebox('debe ingresar todos los datos','ERROR',0);
            end
  else
      begin
          try //----
              with DM.QsinUSER do
                begin
                    ParamByName('pap').Value := ap.Text;
                    ParamByName('pnom').Value := nom.Text;
                    ParamByName('pdni').Value := dni.Text;
                    ParamByName ('ptel').Value := Maskedit1.Text;
                    ParamByName ('pdir').Value := dir.Text;
                    ParamByName ('pacceso').Value := acceso.Text;
                    ExecSQL;
                    Application.MessageBox('Los datos fueron cargados correctamente','Mensaje',0) 
                end;
         except raise exception.create('No se pudo guardar el registro'); //----
         end; //----

  DM.tusuarios.Close;
  DM.tusuarios.Open;

  dni.Text :='';
  ap.Text := '';
  nom.Text := '';
  Maskedit1.Text := '';
  dir.Text := '';
  acceso.Text := '';

  ap.SetFocus;
  end;

Lepe 18-11-2008 17:45:06

Con esa ventana de excepción, puedes pulsar OK y después F9 para que salte de verdad la excepción, después aceptas la ventana y sigues ejecutando tu programa normalmente.

Obviamente al mostrarse una excepción no ha grabado el registro, de eso se trata. O ejecutas el programa fuera del IDE o desactiva la captura de excepciones: tool -> debugger -> language exception -> stop on delphi exception.

Ahora modifica tu codigo y ejecuta esto:
Código Delphi [-]
try 
   ExecSQL;
except
  ShowMessage('uuuuyyssss');
end;

En realidad deberías capturar qué error está dando.

Saludos


La franja horaria es GMT +2. Ahora son las 14:48:49.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi