Ir al contenido


Foto

[RESUELTO] ABM en Delphi 7 usando MySQL


  • Por favor identifícate para responder
10 respuestas en este tema

#1 GUN10

GUN10

    Advanced Member

  • Miembros
  • PipPipPip
  • 79 mensajes
  • LocationArgentina

Escrito 27 agosto 2010 - 09:35

Hola como estan!

Les quiero hacer una consulta. Resulta que estoy trabajando con una sencilla base de datos en MySQL, por ahora estoy haciendo altas bajas y modificaciones. El tema de Altas, ya lo tengo completo, pero a la hora de hacer las Modificaciones, me surgio un problemita, quizas sea solo de lógica, les paso a comentar.

En el caso de las altas, en una tabla llamada clientes, verifico que el numero de DNI que se ingresa no exista en algun otro registro. Si existe, avisa al usuario para que modifique ese valor y recien permitir el ingreso de ese nuevo registro.
Pero en la parte de modificaciones, permito que la busqueda se realice por numero de DNI. Si existe un registro asociado a ese numero, me trae los campos de la tabla con sus respectivos valores para modificarlos y los muestro a cada uno en un TEdit.
El tema es que cuando el usuario modifica el nombre, apellido o telefono por ejemplo. Me muestra una advertencia como la que puse en la insercion. Se busca el numero de DNI y si existe avisa que ya hay un registro con ese numero y que ingrese otro.
Esa busqueda o revision que hago tambien en la modificacion, la hago porque el usuario puede tambien modificar su numero de DNI y este no tiene que ser uno de los ya existentes.
Claramente esto no pasa si cambio el numero de DNI por otro distinto y despues los demas campos que quiera.

Espero que me hayan entendido, se me hizo un poco dificil de explicar.

Saludos y gracias por su tiempo!
  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 27 agosto 2010 - 09:52

Primero. Me imagino que la llave de tu tabla es el DNI, por lo que no deberías permitir cambio de DNI, solo sus datos correspondientes (Nombre, APellido, Telefono, etc.

Segundo. En la MODIFICACION no veo necesidad de verificar si existe el DNI ya que el cursor está en ese registro.

Me parece que tienes un problema de concepto.

Salud OS




  • 0

#3 GUN10

GUN10

    Advanced Member

  • Miembros
  • PipPipPip
  • 79 mensajes
  • LocationArgentina

Escrito 27 agosto 2010 - 10:34

Gracias por la respuesta egostar.
En la tabla clientes, la clave primaria es id_cliente.
Haga la verificacion, porque vi que es necesario en el caso de que se haya tipeado mal y se lo quiera corregir pero que no coincida con otro que ya esta en la tabla. El problema es que cuando se modifica alguno de los demas campos, antes de guardar se vuelve a verificar y el numero si existe porque es el que tiene el registro que actualmente se esta modificando, es por eso que sale la advertencia. Lo que debo hacer, creo si no me equivoco es verificar si existe el DNI en alguno de los registros restantes, sin tener el cuenta el que actualmente estoy modificando.

Quizas sea un problema de concepto como mencionas. Agradezco tu tiempo!
  • 0

#4 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 27 agosto 2010 - 10:46

Deberás mostrarnos tu código donde modifica tus datos, porque eso no debe de ser, estás utilizando un código similar al de insertar??
  • 0

#5 GUN10

GUN10

    Advanced Member

  • Miembros
  • PipPipPip
  • 79 mensajes
  • LocationArgentina

Escrito 27 agosto 2010 - 10:59

Hola enecumene este es el codigo que uso para la insercion de registros



delphi
  1. if ((EClienteDNI.text='') or (EClienteNombre.text='') or (EClienteApellido.text='') or (EClienteTelefono.text='')) then
  2.     begin
  3.       messagedlg('Debe completar todos los campos', mtinformation, [mbok],0);
  4.     end
  5.   else
  6.     begin
  7.       if (TClientes.Locate('dni', strtoint(EClienteDNI.Text),[])) then
  8.         begin
  9.           messagedlg('El número de DNI ingresado ya existe', mtinformation, [mbok], 0);
  10.           EClienteDNI.SetFocus;
  11.         end
  12.       else
  13.         begin
  14.           TClientes.Insert;
  15.           TClientes.FieldByName('dni').asinteger:=strtoint(EClienteDNI.Text);
  16.           TClientes.FieldByName('nombre').AsString:=EClienteNombre.Text;
  17.           TClientes.FieldByName('apellido').asstring:=EClienteApellido.Text;
  18.           TClientes.FieldByName('telefono').AsInteger:=strtoint(EClienteTelefono.Text);
  19.           TClientes.Post;
  20.           EClienteDNI.Clear;
  21.           EClienteNombre.Clear;
  22.           EClienteApellido.Clear;
  23.           EClienteTelefono.Clear;
  24.           if (messagedlg('El registro se ingreso correctamente'+chr(13)+'¿Desea ingresar uno nuevo?', mtconfirmation, [mbyes, mbno], 0)=mryes) then
  25.             begin
  26.               EClienteDNI.SetFocus;
  27.             end
  28.           else
  29.             begin
  30.               BClienteCancelar.Click;
  31.             end;
  32.         end;
  33.     end;



Y este el que uso para la modificacion



delphi
  1. if ((EClienteDNI.text='') or (EClienteNombre.text='') or (EClienteApellido.text='') or (EClienteTelefono.text='')) then
  2.     begin
  3.       messagedlg('Debe completar todos los campos', mtinformation, [mbok],0);
  4.     end
  5.   else
  6.     begin
  7.       if (TClientes.Locate('dni', strtoint(EClienteDNI.Text),[])) then
  8.         begin
  9.           messagedlg('El número de DNI ingresado ya existe', mtinformation, [mbok], 0);
  10.           EClienteDNI.SetFocus;
  11.         end
  12.       else
  13.         begin
  14.           TClientes.Edit;
  15.           TClientes.FieldByName('dni').asinteger:=strtoint(EClienteDNI.Text);
  16.           TClientes.FieldByName('nombre').AsString:=EClienteNombre.Text;
  17.           TClientes.FieldByName('apellido').asstring:=EClienteApellido.Text;
  18.           TClientes.FieldByName('telefono').AsInteger:=strtoint(EClienteTelefono.Text);
  19.           TClientes.Post;
  20.           EClienteDNI.Clear;
  21.           EClienteNombre.Clear;
  22.           EClienteApellido.Clear;
  23.           EClienteTelefono.Clear;
  24.           if (messagedlg('El registro se modifico correctamente'+chr(13)+'¿Desea buscar otro registro?', mtconfirmation, [mbyes, mbno], 0)=mryes) then
  25.             begin
  26.               EClienteDNI.SetFocus;
  27.             end
  28.           else
  29.             begin
  30.               BClienteCancelar.Click;
  31.             end;
  32.         end;
  33.     end;



Es bastante similar al de insertar, ya que lo que no quiero es que se inserte un nuevo DNI (en el caso de que se modifique) que ya exista en la tabla. Pero por hacerlo asi, en el caso de que no modifique DNI, me dice que ya existe uno, por la misma "restriccion" que le pongo encuentra el DNI del registro que estoy modificando.
Probe agregando el codigo que verifica el DNI existente despues de poner la tabla en modo de Edicion pero es igual.

Si tienen algun ejemplo de un ABM o solo de modificacion para ver, se lo agradeceria.

Saludos!
  • 0

#6 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 27 agosto 2010 - 11:16

Loq ue tienes que hacer es eliminar este pedazo de código en el de Modificar ya que no lo necesitas y es la causante del problema:



delphi
  1. if (TClientes.Locate('dni', strtoint(EClienteDNI.Text),[])) then
  2.         begin
  3.           messagedlg('El número de DNI ingresado ya existe', mtinformation, [mbok], 0);
  4.           EClienteDNI.SetFocus;
  5.         end



Saludos.
  • 0

#7 GUN10

GUN10

    Advanced Member

  • Miembros
  • PipPipPip
  • 79 mensajes
  • LocationArgentina

Escrito 27 agosto 2010 - 11:20

enecumene, si elimino esa parte del codigo, de que manera puedo lograr que no se ingrese un DNI de los ya existentes en la tabla? sin tener en cuenta en el que estoy modificando
  • 0

#8 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 27 agosto 2010 - 11:49

Buenas

Lo más sencillo es crear un índice único (si lo permite el motor) por el campo DNI y así se encarga la propia base de datos de controlar el echo de que no exista el mismo. Y desde Delphi simplemente controlar en un try..except..end el Post del registro o algo por el estilo.

Todo lo demás (todo el código que se ha puesto) creo que está de más ;)

Nos leemos

  • 0

#9 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 27 agosto 2010 - 12:12

enecumene, si elimino esa parte del codigo, de que manera puedo lograr que no se ingrese un DNI de los ya existentes en la tabla? sin tener en cuenta en el que estoy modificando


Amigo GUN10, se supone que estas modificando un registro y no insertando otro, en el código de modificación está ese pedazo que te aaseguro está de más. (y).
  • 0

#10 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 27 agosto 2010 - 06:02

Buenas

Lo más sencillo es crear un índice único (si lo permite el motor) por el campo DNI y así se encarga la propia base de datos de controlar el echo de que no exista el mismo. Y desde Delphi simplemente controlar en un try..except..end el Post del registro o algo por el estilo.

Todo lo demás (todo el código que se ha puesto) creo que está de más ;)

Nos leemos


Completamente de acuerdo con Cadetill.
  • 0

#11 GUN10

GUN10

    Advanced Member

  • Miembros
  • PipPipPip
  • 79 mensajes
  • LocationArgentina

Escrito 30 agosto 2010 - 10:48

Gracias pro als respuestas que me dieron. Por el momento lo solucione asi como dicen, quite el codigo que habia agregado para validar el numero de documento y bueno me voy a poner a leer algo al respecto de las excepeciones.

Saludos!
  • 0




IP.Board spam blocked by CleanTalk.