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)
-   -   Recorrido de dos bases de datos. (https://www.clubdelphi.com/foros/showthread.php?t=27051)

majosf 10-11-2005 16:31:02

Recorrido de dos bases de datos.
 
Hola, necesito ayuda urgentemente. Tengo dos bases de datos bda1 ybda2. Las dos con un tabla Socios. Pues bien, la bda1 no la quiero tocar, quiero recorrer la bda2 una vez al día, si la recorro y veo que tiene filas que no tiene la bda1, borrar las de la bda 2, si veo que la bda 2 tiene filas de menos, añadirle las que tiene de más la bda1 y si las dos bases de datos tiene las mismas filas dejarlo como esta.
¿Cómo lo hago?

Gracias.

marcoszorrilla 10-11-2005 16:38:01

Tienes que decirnos que tipo de tablas estás utilizando, porque la solución puede variar de unas a otras.

Un Saludo.

jachguate 10-11-2005 16:57:02

en general, suponiendo que qc1 está asociado a bd1 y qc2 a bd2, y ambos tienen algo como
Código SQL [-]
select * from Socio order by codigo
, simplemente podría hacerse un recorrido de ambas tablas:

Código Delphi [-]
Procedure IgualaSocios;

  function siguientecodigo(cod : integer) : integer;
  begin
    //qsiguiente esta asociado a db2 y tiene algo como:
    //select min(codigo) from socio where codigo > :codigo
    qsiguiente.parambyname('codigo').AsInteger := cod;
    qsiguiente.open;
    try
      result := qsiguienteSIGUIENTE.AsInteger;
    finally
      qsiguiente.close;
    end;
  end;

begin
  //inserta en qc2 los que no estén de qc1
  qc1.first;
  while not qc1.eof do
  begin
    if not qc2.locate('codigo', qc1codigo.asinteger, []) then
    begin
      qc2.insert;
      qc2codigo.value := qc1codigo.value;
      //el resto de campos se copia igual
      qc2.post;
    end
    qc1.next;
  end;
  //borra de qc2 los que no esten en qc1
  qc2.first;
  while not qc2.eof do
  begin
    if not qc1.locate('codigo', qc2codigo.AsInteger, []) then
    begin
      CodigoBorrado := qc2Codigo.AsInteger;
      qc2.Delete;
      if not qc2.locate('codigo', siguientecodigo(CodigoBorrado), []) then
        qc2.Last; {no hay mas códigos}
    end;
  end;
end;

No es muy eficiente, pero si las tablas de socios no son grandes, funcionará aceptablemente bien.

Hasta luego.

;)

majosf 10-11-2005 17:58:25

Recorrido Bases de Datos.
 
las Bases de Datos están en Acces y estoy acciendo a ellas mediante odbc. Muchas gracias. por cierto que es qc1.

jachguate 10-11-2005 19:03:08

Cita:

Empezado por majosf
por cierto que es qc1.

interpretalo a tu conveniencia, podría ser un: TQuery, TADOQuery, TADODataSet, TIBQuery, TDBQuery, TSQLQuery, TDOAQuery, y una larga lista de etceteras :D

Cita:

Empezado por majosf
estoy acciendo a ellas mediante odbc.

Con lo que nos quedamos casi en las mismas. Podría ser ado+odbc, bde+odbc, dbexpress+odbc... :confused:

Hasta luego.

;)


La franja horaria es GMT +2. Ahora son las 19:02:05.

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