FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Alternativa a Locate
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 |
|