PDA

Ver la Versión Completa : Como cruzar dos bases de datos en Builder?


JuanErasmo
26-10-2005, 16:37:41
Buenas Tardes amigos, estoy en un aprieto....
Necesito mezclar dos bases de datos. Existe algun método para ello?
El problema es las dos bases de datos contienen las mismas tablas y campos, solo necesito insertar los datos de una en la otra.....
Si alguien pueda ayudarme le agradeceré mucho.

jachguate
26-10-2005, 17:11:57
en pseudocodigo:


QueryOrigen.database = base1;
QueryDestino.database = base2;
QueryOrigen.open;
QueryDestino.open;
while not QueryOrigen.eof do
begin
QueryDestino.InsertRecord([QueryOrigen.Campo1.Value,
QueryOrigen.Campo2.Value]);
Query1Origen.next;
end;
Base2.Commit;


Esto es a grosso modo, pero te da la idea.

Hasta luego.

;)

Neftali [Germán.Estévez]
26-10-2005, 18:01:36
Puedes probar con alguna de las aplicaciones de DataPump que existen; Delphi trae una y puedes encontrar algunas otras por Internet. La duda que tengo es el comportamiento que tienen ante posibles colisiones de los datos, así que no se si te será útil, pero por probar...

dec
26-10-2005, 18:07:10
Hola,



Puedes probar con alguna de las aplicaciones de DataPump que existen; Delphi trae una (...)

C++ Builder 6 también cuenta con ella. :D

JuanErasmo
26-10-2005, 18:11:23
Gracias pero una preguntas.

QueryOrigen es un IBQuery?
y Campo1, cual es el equivalente?

Gracias!

JuanErasmo
26-10-2005, 18:14:57
Hola Dec,
De donde saco un Data Pump en Builder?

dec
26-10-2005, 18:27:03
Hola,



De donde saco un Data Pump en Builder?

El programa puedes abrirlo desde los accesos directos correspondientes a C++ Builder que se sitúan dentro del menú de inicio de Windows. Se ejecuta una aplicación que se encuentra en: "C:\Archivos de programa\Archivos comunes\Borland Shared\BDE\datapump.exe", generalmente, vamos.

JuanErasmo
26-10-2005, 19:01:06
Dec, no tengo el DataPump....

necesito hacerlo manualmente....
Es mezclar dos tablas, insertar una en la otra.....
Gracias. (En Builder)

jachguate
26-10-2005, 19:15:28
Gracias pero una preguntas.

QueryOrigen es un IBQuery?
y Campo1, cual es el equivalente?

Gracias!

Es un IBQuery o un TQuery o un TAdoQuery, o un TDOAQuery... es lo que vos uses para conectarte a tu base de datos.

Campo1, pues como se llame el campo de tu tabla.

Digamos.

qClienteNOMBRES

o

qFacturaVALOR

etc.

Hasta luego.

;)

JuanErasmo
26-10-2005, 19:22:18
Hola, el nombre del campo no se puede acceder como una propiedad....

asi que QueryOrigen.Campo1.Value en "Campo1" no puedo poner un AnsiString...
cual es la propiedad para relacionar un campo a un Query?
Gracias por tu ayuda.

dec
27-10-2005, 00:34:40
Hola,


while not QueryOrigen.eof do
begin
QueryDestino.InsertRecord([QueryOrigen.Campo1.Value,
QueryOrigen.Campo2.Value]);
Query1Origen.next;
end;


Bueno. En el código de más arriba no se está especificando si un determinado valor es de tipo "string" o de qué tipo sea, sencillamente, diría yo (a riesgo de equivocarme) se está asumiendo que el tipo de dato del "QueryOrigen" es el mismo que el tipo de dato del "QueryDestino". Es decir, tal vez no sea necesario hacer lo que te planteas hacer. ¿No?

dec
27-10-2005, 00:34:46
Hola,



while not QueryOrigen.eof do
begin
QueryDestino.InsertRecord([QueryOrigen.Campo1.Value,
QueryOrigen.Campo2.Value]);
Query1Origen.next;
end;


Bueno. En el código de más arriba no se está especificando si un determinado valor es de tipo "string" o de qué tipo sea, sencillamente, diría yo (a riesgo de equivocarme) se está asumiendo que el tipo de dato del "QueryOrigen" es el mismo que el tipo de dato del "QueryDestino". Es decir, tal vez no sea necesario hacer lo que te planteas hacer. ¿No?

jachguate
27-10-2005, 01:14:54
Hola, el nombre del campo no se puede acceder como una propiedad....

asi que QueryOrigen.Campo1.Value en "Campo1" no puedo poner un AnsiString...
cual es la propiedad para relacionar un campo a un Query?
Gracias por tu ayuda.

He usado Value, precisamente, por ser un variant (en tfield), donde podría caber cualquier tipo de dato, y asumiendo, como ya apunto dec que las estructuras serán identicas, o al menos, equivalentes :D

Claro que podes ser mas específico y poner:


QueryDestino.InsertRecord([QueryOrigenCampo1.AsInteger,
QueryOrigenCampo2.AsString, QueryOrigenCampo3.AsFloat]);
//etcetera;


Hasta luego.

;)