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)
-   -   Conectar 2 BD con FireBird (https://www.clubdelphi.com/foros/showthread.php?t=63638)

itsi 24-02-2009 13:23:08

Conectar 2 BD con FireBird
 
Buenas amigos del Foro.
Tengo un problemilla que no se como realizar. Os Comento. Tengo 2 BD en directorios distintos y quiero pasar de una BD a otra toda la información de un tabla.
Directorio1\BD1.gdb
Directorio2\BD2.gdb

La conexión a la BD1 es correcta pero la BD2 no me conecta.

dmBD2.BD2.DatabaseName := 'C:\Directorio2\BD2.gdb';
dmBD2.BD2.Connected := True;
dmBD2.TransBD2.Active := True;
//Copiamos las Tablas Maestras
DATASETLOCAL := tIBDataSet(dmBD1.EMPRESAS);
DATASETLOCAL.Active := TRUE;

//Copiamos las Tablas Destino
DATASETLOCAL_Destino := tIBDataSet(dmBD2.EMPRESAS);
DATASETLOCAL_Destino.Active := True;with dmBD1.AuxQuery do
begin
Active := FALSE;
SQL.Text := 'SELECT * FROM Articulos';

Active := TRUE;

First;
while not Eof do
begin

DATASETLOCAL_Destino.Insert;
for i := 0 to FieldCount - 1 do
begin
DATASETLOCAL_Destino.Fields[i] := Fields[i];
end;
DATASETLOCAL_Destino.Post;

Next;
end;

end;

El error que me da es que esta grabando los datos en la BD1 en vez de la Segunda(BD2).

¿Esta bien hecha la conexión? ¿Porque me esta grabando en la BD1 en vez de la BD2?

Un saludo a Tod@s.

duilioisola 24-02-2009 13:46:44

Dos cosas:
- Pon el código entre etiquetas delphi ( [ DELPHI ] ... [ / DELPHI ] ). Así se verá mejor.
- Danos el texto exacto del error. No creo que lo hayas interpretado bien. No creo que Delphi se de cuenta de qué dato va en qué base...

Código Delphi [-]
dmBD2.BD2.DatabaseName := 'C:\Directorio2\BD2.gdb';
dmBD2.BD2.Connected := True;
dmBD2.TransBD2.Active := True;
//Copiamos las Tablas Maestras
DATASETLOCAL := tIBDataSet(dmBD1.EMPRESAS);
DATASETLOCAL.Active := TRUE;

//Copiamos las Tablas Destino
DATASETLOCAL_Destino := tIBDataSet(dmBD2.EMPRESAS);
DATASETLOCAL_Destino.Active := True;
with dmBD1.AuxQuery do
begin
   Active := FALSE;
   SQL.Text := 'SELECT * FROM Articulos';

   Active := TRUE;

   First;
   while not Eof do
   begin

      DATASETLOCAL_Destino.Insert;
      for i := 0 to FieldCount - 1 do
      begin
         DATASETLOCAL_Destino.Fields[i] := Fields[i];
      end;
      DATASETLOCAL_Destino.Post;

      Next;
   end;

end;

También se me ocurre que no estés conectando correctamente a la base de datos destino.
Normalmente se pone igual que si fuera una conexión de red:
Código Delphi [-]
   dmBD2.BD2.DatabaseName := '192.168.0.1:C:\Directorio2\BD2.gdb';
//o
   dmBD2.BD2.DatabaseName := 'localhost:C:\Directorio2\BD2.gdb';

Además puedes hacer un trace (ir avanzando con F8) y decirnos en qué línea aparece ese error (y su texto).

Tampoco veo el Commit de la transacción.

Código Delphi [-]
dmBD2.BD2.DatabaseName := 'C:\Directorio2\BD2.gdb';
dmBD2.BD2.Connected := True;
dmBD2.TransBD2.Active := True;
[...]
dmBD2.TransBD2.Commit; // Depende del componente

itsi 24-02-2009 13:55:25

Aqui es donde me da el Error

DATASETLOCAL_Destino.Post;

Error :
Violation of primary or unique key constraint "PK_Articulos" on table "ARTICULOS"

duilioisola 24-02-2009 14:00:33

Pues no tiene nada que ver con el error que comentabas...
Esto solo quiere decir que ya existe en la tabla destino el "artículo" que quieres insertar.

Las Primary Keys o los Unike Index, no permiten que existan duplicados en los datos.

Antes de insertar, deberás hacer un select de la tabla destino para ver si ya existen.
Si existen, haces un update de los campos que corresponda. Sino, lo insertas.


La franja horaria es GMT +2. Ahora son las 22:16: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