Yo me encontré con un problema parecido, pero tenía 2 grandes diferencias con el tuyo:
1.- Sólo tenía que pasar una tabla (parte) de una base de datos Firebird a otra en vez de dos como es tu caso.
2.- Con lo de parte me refiero a que no tenía que pasar la tabla entera, seleccionaba los registros que me interasaban, ya fuera el criterio con un rango entre 2 fechas o por descripción. La selección mayor que tenía que "exportar" como mucho tendría unos 1500 registros, no 6000 como es tu caso. No se como te irá esta solución en cuanto a velocidad y/o rendimiento.
Aunque pensándolo bien después de leer esto:
Cita:
Refiriendome a una tabla sola, en delphi tengo dos edit, uno que es para poner el codigo inicial, y otro el final; con eso yo hago un select "desde" y "hasta" tal codigo para que lo muestre (seria select * from tabla1 where codigo >= edit1 and codigo <= edit2 (eso lo tengo funcionando)
|
creo que es algo parecido a lo que hago yo.
De todas formas te cuento:
Primero habría que hacer un select de la tabla de la base de datos Local1 (si es con el criterio "desde" y "hasta" mencionado antes mejor) con su IBQuery correspondiente (vamos a llamarle IBQuery1).
Después la recorremos, y hacemos un select de la tabla de Local2 (IBQuery2) utilizando como criterio por ejemplo el código del registro por el que vamos de IBQuery1.
Una vez echo esto montaríamos una cadena con el INSERT, que tendría como campos el Código, Nombre y Precio de IBQuery1 + el precio de IBQUERY2.
Ejecutaríamos el INSERT y ya tendríamos un registro en la nueva tabla (puedes usar un IBQuery3 o borrar el SQL de IBQuery2 e insertarlo desde ahí mismo). Mas o menos el código sería algo así:
Código Delphi
[-]IBQuery1.Active := False;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Text := 'SELECT CODIGO, NOMBRE, PRECIO FROM TABLA1 WHERE CODIGO >= EDIT1 AND CODIGO <= EDIT2';
IBQuery1.Active := True; IBQuery1.First;
while not IBQuery1.Eof do begin
IBQuery2.Active := False;
IBQuery2.SQL.Clear;
IBQuery2.SQL.Text := 'SELECT CODIGO, NOMBRE, PRECIO FROM TABLA2 ';
IBQuery2.SQL.Add('WHERE CODIGO = ' + IBQuery1.FieldByName('CODIGO').AsString);
IBQuery2.Active := True;
cadena := 'INSERT INTO TABLA3(CODIGO, NOMBRE, PRECIO_LOCAL1, PRECIO_LOCAL2) VALUES (';
cadena := cadena + IBQuery1.FieldByName('CODIGO').AsString + ',';
cadena := cadena + QuotedStr(IBQuery1.FieldByName('NOMBRE').AsString) + ',';
cadena := cadena + IBQuery1.FieldByName('PRECIO').AsString + ','; cadena := cadena + IBQuery2.FieldByName('PRECIO').AsString; cadena := cadena + ')';
IBQuery2.SQL.Clear;
IBQuery2.SQL.Text := cadena;
IBQuery2.ExecSQL; IBQuery1.Next; end;
Obviamente cambiando los nombre de las tablas, campos, controles, etc. por los tuyos. Espero que te sirva
* Nota: cada IBQuery apunta a su IBDatabase correspondiente.