![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
|
Buenas gente del foro, quería consultar si hay alguna alternativa a la función locate de los TClientDataSet, reulta que tengo dos bases de datos con dos tablas iguales, una en Firebird y otra en Paradox, y tengo que comprar los datos de las tablas si hay alguna modificación en alguno de los registros debo actualizarlo, y en el caso de que no lo encuentre lo ingreso, para ello recorro todos los registros de una tabla y hago un Locate en la otra en donde si lo encuentra lo modifica y si no lo ingresa.
Esta solución es viable cuando son pocos registros pero cuando son aproximadamente 90.000 registros, esta operación puede tardar varias horas, necesitaría si conocen alguna solución alternativa. Saludos ![]()
__________________
¡Oh nooo! no compartas, compartir es pirateria, compartir te llevara a la carcel - Revolution OS |
|
#2
|
||||
|
||||
|
Yo buscaría alguna solución del lado del motor, por ejemplo crear un DBLink entre ambas bases (No se si es posible en FB), y ejecutar todo desde un SQL.
Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
|
|
#3
|
||||
|
||||
|
creo que no se puede hacer, igual hay otros datos que necesito obtener mientras voy recorriendo el TClientDataSet
__________________
¡Oh nooo! no compartas, compartir es pirateria, compartir te llevara a la carcel - Revolution OS |
|
#4
|
|||
|
|||
|
Hoooola!!
Hace tiempo hice algo parecido para ver las diferencias que tenia entre un Paradox y un MySQL : Código:
TComparaCDS = class
cdsDiferencies:TClientDataSet;
constructor Create;
procedure Compara(const taula:string; cdsOrigen, cdsDesti:TClientDataSet);
destructor Destroy;override;
private
public
end;
constructor TComparaCDS.Create;
begin
inherited Create;
cdsDiferencies:=TClientDataSet.Create(Application);
with cdsDiferencies.FieldDefs do begin
Clear;
Add('taula', ftString, 15,False);
Add('clau', ftString, 100,False);
Add('origen', ftString, 2,False);
Add('desti', ftString, 2,False);
end;
cdsDiferencies.CreateDataSet;
cdsDiferencies.FieldByName('clau').DisplayWidth:=15;
cdsDiferencies.Open;
cdsDiferencies.IndexFieldNames:='taula;clau';
end;
procedure TComparaCDS.Compara(const taula:string; cdsOrigen, cdsDesti:TClientDataSet);
var
o:string;
d:string;
begin
cdsOrigen.First;
cdsDesti.First;
while not cdsOrigen.Eof
or not cdsDesti.Eof do begin
if cdsOrigen.Eof
then o:='ZZZZZZZZZZZZZZZZZZZZZZ'
else o:=registreAsString(cdsOrigen);
if cdsDesti.Eof
then d:='ZZZZZZZZZZZZZZZZZZZZZZ'
else d:=registreAsString(cdsDesti);
if o=d
then begin
cdsOrigen.Next;
cdsDesti.Next;
end
else
if (o<d)
then begin
cdsdiferencies.Insert;
cdsDiferencies.FieldByName('taula').AsString:=taula;
cdsDiferencies.FieldByName('clau').AsString:=o;
cdsdiferencies.FieldByName('origen').AsString:='->';
cdsdiferencies.FieldByName('desti').Clear;
cdsdiferencies.Post;
cdsOrigen.Next;
end
else
if (o>d)
then begin
cdsdiferencies.Insert;
cdsDiferencies.FieldByName('taula').AsString:=taula;
cdsdiferencies.FieldByName('clau').AsString:=d;
cdsdiferencies.FieldByName('origen').Clear;
cdsdiferencies.FieldByName('desti').AsString:='<-';
cdsdiferencies.Post;
cdsDesti.Next;
end;
end;
end;
destructor TComparaCDS.Destroy;
begin
if cdsDiferencies.Active
then cdsDiferencies.EmptyDataSet;
cdsDiferencies.Free;
inherited Destroy;
end;
Para que funcione necesitas tener ordenados los clientdataset por el mismo indice. Con este objeto lo que tengo es un registro de las diferencias, no hace la sincronización, pero es facil de modificar para que la haga. Saludos!! |
![]() |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| ¿Una alternativa a win98? | FGarcia | Windows | 3 | 16-06-2008 08:39:44 |
| Alternativa TStringGrid | lightningdd | Gráficos | 4 | 01-03-2008 07:44:23 |
| Alternativa OutLook | Io | Varios | 4 | 26-12-2007 11:08:19 |
| Alternativa SQL*Plus | Alfonsoft | Oracle | 4 | 07-10-2007 17:31:14 |
| Alternativa a DbGrid | JULIOCTORRESG | Varios | 2 | 12-03-2007 15:24:47 |
|