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)
-   -   Actualizar registros de dos tablas (https://www.clubdelphi.com/foros/showthread.php?t=54769)

lKinGl 30-03-2008 01:32:28

Actualizar registros de dos tablas
 
porfavor necesito ayuda espero me ayuden :o

tengo 2 tablas en paradox

tengo un formulario que me debe permitir modificar un registro de las 2 tablas al mismo tiempo....

tenia esto
Código Delphi [-]
 
table1.edit;
table1.fieldvalues['campo1']:=edit1.text;
table1.post;
 
table2.edit;
table2.fieldvalues['campo2']:=edit1.text;
table2.post;


pero esto funciona mal por que cuando muestro los datos en un formulario la tabla1 tiene un registro seleccionado pero table2 no, por lo tanto en table1 actualiza bien pero en table2 actualiza el último registro hecho

¿y si no quiero modificar el ultimo registro? sino el registro número 50 de las 2 tablas ¿¿como lo hago??

gracias adelantadas!!

Caral 30-03-2008 01:41:48

Hola
Aqui lo que indicas con lo que estas haciendo es:
Editas las dos tablas (tabla1 y tabla2) y haces un post indicado que el campo 1 y 2 sean iguales al edit1.
Bueno, las tablas no van a saber cual es el campo que quieres modificar, simplemente modificaran el primer campo o en su defecto el campo en el que se haya editado.
O nos das poca informacion o esta mal estructurado.
Yo usaría un query.
Saludos

lKinGl 30-03-2008 03:26:00

Tengo 1 tabla cliente y una póliza

un cliente puede tener mas de una póliza

tengo un formulario que registra clientes
y otro que registra pólizas

los dos bien

en el formulario de póliza uso una búsqueda sql (tabla clientes) para localizar el cliente que se le asignará a la nueva póliza

cuando el formulario póliza guarda crea un registro completo en la tabla póliza del nombre del cliente y sus datos

pero cuando voy al formulario de moficar datos de un cliente necesito que el nombre nuevo que yo asigne en el edit se modifique en la tabla poliza y en la tabla cliente

lo intente asi pero es ilogico por que 1 de las tablas no va a saber que registro quiero modificar y tomará por defecto el último

Código Delphi [-]
table1.edit;
table1.fieldvalues['campo1']:=edit1.text;
table1.post;
table2.edit;
table2.fieldvalues['campo1']:=edit1.text;
table2.post;
con este codigo delphi creo que se entiende lo que quiero lograr saludos!!:o

eduarcol 30-03-2008 03:32:35

a vr creo que tienes que darle una leidita a esto, guia de estilo


Solucion a tu problema:
Código Delphi [-]
table1.edit;
table1.fieldvalues['campo1']:=edit1.text;
table1.post;
if table2.locate('CodigoCliente', table1.fieldvalues['codigocliente'], []) then
begin
   table2.edit;
   table2.fieldvalues['campo1']:=edit1.text;
   table2.post;
end
else
   ShowMessage('Error grave de referencialidad, ayudaaaaaaaaaa');

Y tambien creo que con ese codigo delphi puedes entender lo que te quiero decir

lKinGl 30-03-2008 03:33:58

perfecto voy a intentar

por lo que pude ojear tu codigo es exactamente lo que necesito gracias lo pruebo y aviso como me fue!!

lKinGl 30-03-2008 03:58:06

sigue igual no actualiza como quiero por que solo actualiza el ultimo registro de las 2 tablas

lKinGl 30-03-2008 04:00:18

el codigo que me pasaste tenia un pequeño error no midifcaba los datos por que primero mandas a que edite el contenido de table1 y cuando entra a hacer el condicional if compara el table1 con table2 y como table1 ya fue modificado no va a coincidir nunca con el 2 lo que hice fue que despues que hace el condicional actualiza los dos tables de esta forma

Código Delphi [-]
if table2.locate('CodigoCliente', table1.fieldvalues['codigocliente'], []) then
begin table1.edit;
table1.fieldvalues['campo1']:=edit1.text; 
table1.post; 
table2.edit; 
table2.fieldvalues['campo1']:=edit1.text; 
table2.post;
end

asi si me funcionó como queria pero de todas maneras se agradece el codigo:

if table2.locate('CodigoCliente', table1.fieldvalues['codigocliente'], []) then

no lo sabia y me ayudo a la perfección gracias!!!

eduarcol 30-03-2008 04:00:57

que escribistes ahi?, eso es una broma?, has leido la guia de estilo??

lKinGl 30-03-2008 04:05:24

disculpen tanta molestia pero acabo de probar bien el programa y no funciona bien el código que me diste por que como compara 1 campo1 de table1 con campo2 de table2 edita siempre los ultimos registros y necesito es que modifique el que tengo cargado en mi formulario :(

lKinGl 30-03-2008 04:09:46

ups disculpen de verdad no quise infringir las reglas del foro puesto que no habia leido la guia de estilo...


ya la lei y no volverá a pasar gracias!! y disculpen

lKinGl 30-03-2008 05:42:09

lo intente asi pero edita son los 2 últimos registros de las tablas :(


Código Delphi [-]
if table2.locate('ced_cli', table1.fieldvalues['ced_cli'],[]) then
begin
table1.edit;
table1.fieldvalues['campo1']:=edit1.text;
table1.post;
table2.edit;
table2.fieldvalues['campo1']:=edit1.text;
table2.post;
end


gracias adelantadas!!!

Caral 30-03-2008 15:00:56

Hola
Insisto, la programacion es como el Derecho, No se puede leer entre lineas.
O se da la version completa o no se entiende.
No he logrado, por mas que intento, entender el concepto.
Por favor usa las etiquetas [delphi], ve a avanzado y coloca el segundo boton de la derecha, arriba.
Saludos

mario2000 30-03-2008 15:23:49

¿quin dijo que en foro las cuestiones se titulan ayuda?, las preguntas deben ser consisas para que las respuestas sirvan a todos!!!

lKinGl 30-03-2008 19:20:18

listo ya envolvi todo en code delphi porfa ayudenme de verdad necesito éste código :(

eduarcol 30-03-2008 19:49:46

ayudanos a entenderte. Al principio decias que table1 si se editaba bien, esto quiere decir que estaba posicionado sobre el registro correcto, pero ahora dices que ninguno de los dos se modificia como deberia?

lKinGl 30-03-2008 23:49:24

es que antes tenia

Código Delphi [-]
 table1.edit;
 table1.fieldvalues['campo1']:=edit1.text;
 table1.post;

luego uds mismos me ayudaron con un código y me funcionó mejor que el que yo tenia el cual es

Código Delphi [-]
 if form1.table2.locate('campo1', form1.table1.fieldvalues['campo1'],[]) then
begin
   table1.edit;
   table1.fieldvalues['campo1']:=edit1.text;
   table1.post
   table1.edit;
   table1.fieldvalues['campo1']:=edit1.text;
   table1.post
end;


tengan en cuenta que en table1 y en table2, campo1 es un campo común
y cuando uso el código que primero tenia table1 edita y se posiciona sobre el registro correcto pero table2 se posiciona y edita siempre el último y no el que necesito

con el segundo código (Que es el que tengo actualmente) se ubican y editan siempre en el último registro de los dos table


mi programa es que tiene una búsqueda sql que monta los datos que yo selecciono en un dbgrid en un formulario que tiene (edit1.text) luego yo necesito editar el contenido que hay en el edit y luego al momento de guardar que se actualice el registro que necesito de los dos tables

eduarcol 31-03-2008 00:34:17

si te fijas, hay un pequeño error de concepto entre el codigo que tu propones y el que se te facilito, tu estas buscando partiendo de la tabla1 antes de editarla, en el codigo que se te proporciono se realiza la busqueda luego de grabar.

lKinGl 31-03-2008 01:06:20

ok pero como logro porfin lo que deseo?

gracias adelantadas!

eduarcol 31-03-2008 14:58:34

Cita:

Empezado por lKinGl (Mensaje 276313)
ok pero como logro porfin lo que deseo?

gracias adelantadas!

Que tal como te dije la primera vez?

lKinGl 01-04-2008 04:48:49

Hola, eduardocol y amigos foristas

el código que me facilitaste funciona sin errores pero edita solo el último registro de las 2 tablas y necesito que edite el que yo seleccione mediante un dbgrid que carga los datos en un formulario que contiene el edit1.text(Campo1) y cuando yo lo edite campo 1 sea cual sea el número de posición en la que se encuentre se edite en las 2 tablas:o:o:o

gracias adelantadas!

Caral 01-04-2008 04:56:57

Hola
Bueno, que decir, este tema ya deberia de estar terminado.
Se sigue sin dar los datos completos.
Veamos el asunto en esencia.
1- dbgrid con el cual se ve la tabla???? 1 o 2 ?????
2- 2 tablas que se quieren actualizar con un campo en comun y en base a un edit.
3- tenemos 1, 2 o 3 enlaces a las tablas????.
Para mi, lo de siempre, Codigo, si ver que se esta haciendo es muy dificil, aqui estaremos bateando.
Saludos

Delphius 01-04-2008 04:59:13

lKinGl, ¿podrías ya dejar de decir las mismas palabras?

¿Quieres recibir ayuda? Entonces ayudanos a ayudarte. La guia de estilo llama a las personas que se expresen detalladamente sobre sus problemas.

Es posible que con esas simples líneas no veamos donde tienes el problema.. ¿No será que el problema viene de otro lado?
¿Tanto te cuesta tomarte unos minutos, explicar de forma detallada y precisa sobre lo que estás haciendo? ¡Ni que decir si pudieramos ver parte de tu código!

Ya te lo han dicho: Explica bien tu caso y podremos saber que es, donde falla, y su solución (y talvez posibles alternativas).

No tengo más que decir por el momento.

Saludos,

lKinGl 01-04-2008 05:06:20

ok me explico mejor:

cuando abro el módulo modificar

se abre un formulario el cual tiene:

- Edit1 (Campo1);
- boton Editar
- Boton Guardar
- Boton Buscar

luego para cargar los datos del registro pulso el boton buscar y me sale una consulta sql

el cual tiene

un radio button
un edit
un dbgrid

selecciono el radiobutton por el cual quiero ordenar los registros con el table2 que se llama db_c.db

luego pulso el registro que yo desee y este se carga en el formulario principal de modificar

luego pulso el boton editar y el enabled del edit1(Campo1 ya cargado) se habilita para poder modificarlo

- luego lo modifico a mi gusto y presiono el boton guardar

y este boton guardar deberia editar en las 2 tablas el mismo registro ya que en el table1 y el table2 el campo es común... sino me entienden diganme y vuelvo a explicar de otra forma no se preocupen


uso tablas paradox 7 y delphi 7


gracias adelantadas !!!

Caral 01-04-2008 05:10:48

Hola
:D:D:rolleyes:
Saludos

lKinGl 01-04-2008 05:13:18

Código Delphi [-]
if length(edit1.Text)<1 then
  begin
    application.MessageBox('Porfavor ingrese la Cédula del Cliente','Información',MB_ICONINFORMATION);
    end
  else
  begin
      if length(edit2.Text)<1 then
        begin
           application.MessageBox('Porfavor ingrese la Nombre o Razón Social del Cliente','Información',MB_ICONINFORMATION);
           end
        else
        begin
            if length(edit3.Text)<1 then
              begin
                application.MessageBox('Porfavor ingrese el Domicilio Fiscal del Cliente','Información',MB_ICONINFORMATION);
                end
              else
              begin
                  if length(edit4.Text)<1 then
                    begin
                      if application.MessageBox('¿Este Cliente tiene número de teléfono?','Información',MB_YESNO)=6 then
                        begin
                        application.MessageBox('Porfavor Ingreselo','Información',MB_ICONINFORMATION);
                        end
                        else
                        begin
                        edit4.Text:='No Tiene';
                        if application.MessageBox('Cliente Guardado con Éxito','Guardar',MB_YESNO)=6 then
                        begin
                          BitBtn1.Click;
                        end
                        else
                        begin
                          BitBtn4.Click;
                        end
                        end
                    end
                    else
                    begin
                    //Base de Datos Para Guardar
                        begin
                         if form1.table2.locate('ced_cli', form1.table1.fieldvalues['ced_cli'],[]) then
                          begin
                            form1.Table1.Edit;
                            form1.Table1.FieldValues['cod_pol']:=trim(edit5.Text);
                            form1.Table1.FieldValues['Ced_cli']:=trim(Edit1.Text);
                            form1.Table1.FieldValues['Nom_cli']:=trim(edit2.Text);
                            form1.Table1.FieldValues['Dir_cli']:=trim(edit3.Text);
                            form1.Table1.FieldValues['Tel_cli']:=trim(edit3.Text);
                            form1.Table1.Post;
                            form1.Table2.Edit;
                            form1.Table2.FieldValues['cod_pol']:=trim(edit5.Text);
                            form1.Table2.FieldValues['Ced_cli']:=trim(Edit1.Text);
                            form1.Table2.FieldValues['Nom_cli']:=trim(edit2.Text);
                            form1.Table2.FieldValues['Dir_cli']:=trim(edit3.Text);
                            form1.Table2.FieldValues['Tel_cli']:=trim(edit3.Text);
                            form1.Table2.Post;
                          end
                          else
                          begin
                          ShowMessage('error grave');
                          end
                        end
                        end
              end
        end
  end

este es el código que tengo hasta los momentos:(

eduarcol 01-04-2008 15:31:57

de nuevo a lo mismo??, vistes la diferencia entre el codigo que te postee al principio y lo que tu escribistes, te lo coloco de nuevo para que sepas y veas el error:

En este codigo se graban los valores en la tabla1 y luego se busca por ese valor:

Código Delphi [-]
table1.edit;
table1.fieldvalues['campo1']:=edit1.text;
table1.post;
if table2.locate('CodigoCliente', table1.fieldvalues['codigocliente'], []) then
begin
   table2.edit;
   table2.fieldvalues['campo1']:=edit1.text;
   table2.post;
end
else
   ShowMessage('Error grave de referencialidad, ayudaaaaaaaaaa');

Tu lo tienes de esta manera, haces la busqueda antes de grabar los codigos en la tabla

Código Delphi [-]
if table2.locate('CodigoCliente', table1.fieldvalues['codigocliente'], []) then
begin

   table1.edit;
   table1.fieldvalues['campo1']:=edit1.text;
   table1.post;

   table2.edit;
   table2.fieldvalues['campo1']:=edit1.text;
   table2.post;
end
else
   ShowMessage('Error grave de referencialidad, ayudaaaaaaaaaa');

Si lo quieres como lo tienes, lo que debes es cambiar el origen de la busqueda.

Código Delphi [-]
if table2.locate('CodigoCliente', edit1.Text, []) then
begin

   table1.edit;
   table1.fieldvalues['campo1']:=edit1.text;
   table1.post;

   table2.edit;
   table2.fieldvalues['campo1']:=edit1.text;
   table2.post;
end
else
   ShowMessage('Error grave de referencialidad, ayudaaaaaaaaaa');

lKinGl 01-04-2008 18:27:14

Al finnnnnnn pude lograr lo que queria

Gracias eduarcol por tu tiempo y amigos foristas que me quisieron ayudar

lo que tenía era un error lógico por que siempre comparaba una sola tabla
y como yo queria que se guardara en las 2 tablas habia que comparar las 2 tablas haciendo asi:

Código Delphi [-]
                         begin
                            if form1.table2.locate('cod_pol', edit5.Text, []) then
                               begin
                                   if form1.Table1.Locate('cod_pol',edit5.Text,[]) then

de verdad estoy muy agradecido por la paciencia que tuvieron al ayudarme con mi problema

Facilito el código completo que estoy usando para que le sirva a alguien más:

este es el código del botón guardar y actualiza los datos en las 2 tablas correctamente :D

Código Delphi [-]
if length(edit1.Text)<1 then
  begin
    application.MessageBox('Porfavor ingrese la Cédula del Cliente','Información',MB_ICONINFORMATION);
    end
  else
  begin
      if length(edit2.Text)<1 then
        begin
           application.MessageBox('Porfavor ingrese la Nombre o Razón Social del Cliente','Información',MB_ICONINFORMATION);
           end
        else
        begin
            if length(edit3.Text)<1 then
              begin
                application.MessageBox('Porfavor ingrese el Domicilio Fiscal del Cliente','Información',MB_ICONINFORMATION);
                end
              else
              begin
                  if length(edit4.Text)<1 then
                    begin
                      if application.MessageBox('¿Este Cliente tiene número de teléfono?','Información',MB_YESNO)=6 then
                        begin
                        application.MessageBox('Porfavor Ingreselo','Información',MB_ICONINFORMATION);
                        end
                        else
                        begin
                        edit4.Text:='No Tiene';
                        if application.MessageBox('Cliente Guardado con Éxito','Guardar',MB_YESNO)=6 then
                        begin
                          BitBtn1.Click;
                        end
                        else
                        begin
                          BitBtn4.Click;
                        end
                        end
                    end
                    else
                    begin
                    //Base de Datos Para Guardar
                        begin
                         if form1.table2.locate('cod_pol', edit5.Text, []) then
                         begin
                            if form1.Table1.Locate('cod_pol',edit5.Text,[]) then
                          begin
                            form1.Table1.Edit;
                            form1.Table1.FieldValues['cod_pol']:=trim(edit5.Text);
                            form1.Table1.FieldValues['Ced_cli']:=trim(Edit1.Text);
                            form1.Table1.FieldValues['Nom_cli']:=trim(edit2.Text);
                            form1.Table1.FieldValues['Dir_cli']:=trim(edit3.Text);
                            form1.Table1.FieldValues['Tel_cli']:=trim(edit3.Text);
                            form1.Table1.Post;
                            form1.Table2.Edit;
                            form1.Table2.FieldValues['cod_pol']:=trim(edit5.Text);
                            form1.Table2.FieldValues['Ced_cli']:=trim(Edit1.Text);
                            form1.Table2.FieldValues['Nom_cli']:=trim(edit2.Text);
                            form1.Table2.FieldValues['Dir_cli']:=trim(edit3.Text);
                            form1.Table2.FieldValues['Tel_cli']:=trim(edit3.Text);
                            form1.Table2.Post;
                            ShowMessage('Datos Modificados con Éxito');
                            BitBtn4.Click;
                          end
                          else
                          begin
                          ShowMessage('Error al Modificar Datos');
                          end
                         end
                        end
                        end
              end
        end
  end

Caral 01-04-2008 18:51:30

Hola
Código Delphi [-]
 if (form1.table2.locate('cod_pol', edit5.Text, [])) and (form1.Table1.Locate('cod_pol',edit5.Text,[])) then
 begin
Saludos

Delphius 01-04-2008 18:57:41

Muy cierto amigo Carlos, el código puede mejorarse...
No es por querer ser malo, pero ese ¡código lástimó mis ojos! Considero que ahora que se ha solucionado el problema, lKinGl debe resumirlo; achicar esos anidamientos, que muy posiblemente la mayoría son innecesarios.

Primero, por las dudas, que haga una copia de la Unit;) y luego la reduzca, que limpie ese código... quien sabe, quizás luego debe modificar el sistema y al volver a revisar esa unidad se lleve un susto. Tener un código limpio ayuda mucho.

Saludos,

lKinGl 01-04-2008 19:10:35

Cierto lo que acabo de aportar es una copia fiel y exacta del código del Botón Guardar de mi Módulo Modificar

y necesito que funcione con esos anidamientos porsupuesto que nadie va a usar mis validaciones solo doy un código 100% Funcionando como yo necesitaba se los aseguro que a mas de uno le servirá

en fin el código que se necesita es solo este lo demás es pura zapateria

Código Delphi [-]
begin
         if Table2.locate('campo1', edit#.Text, []) then
              begin
                 if Table1.Locate('campo1',edit#.Text,[]) then
                     begin
                            Table1.Edit;
                            Table1.FieldValues['campo1']:=trim(edit#.Text);
                            Table1.post;
                            Table2.Edit;
                            Table2.FieldValues['campo1']:=trim(edit#.Text);
                            Table2.Post;
                            ShowMessage('Datos Modificados con Éxito');
                        end
                        else
                        begin
                          ShowMessage('Error al Modificar Datos');
                        end
                     end
              end
end

Caral 01-04-2008 19:46:19

Hola
Código Delphi [-]
begin
   if (Table2.locate('campo1', edit#.Text, [])) and (Table1.Locate('campo1',edit#.Text,[])) then
   begin
        Table1.Edit;
        Table2.Edit;
        Table1.FieldValues['campo1']:=trim(edit#.Text);
        Table2.FieldValues['campo1']:=trim(edit#.Text);
        Table1.post;
        Table2.Post;
    ShowMessage('Datos Modificados con Éxito');
    end
    else
    ShowMessage('Error al Modificar Datos');
    end
    end
end
Solo me entretengo un rato.:D
Saludos

egostar 01-04-2008 20:09:58

Cita:

Empezado por Caral (Mensaje 276762)
Hola
Solo me entretengo un rato.:D

Código Delphi [-]
begin
   if (Table2.locate('campo1',edit#.Text,[])) and
      (Table1.Locate('campo1',edit#.Text,[])) then begin
       Table1.Edit;
       Table2.Edit;
       Table1.FieldValues['campo1'] := trim(edit#.Text);
       Table2.FieldValues['campo1'] := trim(edit#.Text);
       Table1.post;
       Table2.Post;
       ShowMessage('Datos Modificados con Éxito');
   end
   else ShowMessage('Error al Modificar Datos');
end;

Yo también :D:D:D

Salud OS


La franja horaria es GMT +2. Ahora son las 16:34:12.

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