PDA

Ver la Versión Completa : Insercion masiva de una BD a otra BD


oscjae
14-12-2006, 10:56:15
Wenas a to2, he visto un hilo al respecto de la pregunta que voy a hacer, pero no lo veo claro, he hecho pruebas y nada.
Mi pregunta es como tengo que hacer la sentencia SQL para insertar los registros de una tabla "Tabla1" a una tabla identica "Tabla1", pero de otra base de datos, trabajo en Firebird 1.5, delphi 7 y fibPlus.

He visto en ese hilo el ejemplo siguiente

Código SQL [-] (http://www.clubdelphi.com/foros/#)
insert into ":BDDestino:Tabla1" Campo1,Campo2
select Campo1,Campo2 from ":BDOrigen:Tabla1"





Lo he intantado pero nada, decia que tenia que usar un componente Query, pero que no estuviera conectado a ninguna BD, y me da el error tipico que no tiene Database asiganda, si me pudieran mostrar un ejemplo lo tendria mucho mas claro

Gracias.

AzidRain
14-12-2006, 16:40:41
No se bien si se puede hacer asi en Firebird pero debe poderse:


INSERT INTO bddestino.tabla SELECT * FROM bdorigen.tabla


Te recomiendo "MySQL Cookbok" que aunque es para MySQL trae muchas recetas que funcionan en cualquier gestor que use SQL. Trae ejemplos prácticos como el que planteas.

oscjae
14-12-2006, 17:08:30
Gracias por la respuesta AzidRain, pero el ejemplo que me has dado, lo de "bdorigen", a que te refieres, al nombre del componente de base de datos, o a una cadena de texto que contenga la direccion de la base de datos??

AzidRain
14-12-2006, 20:07:52
No

Se refiere al nombre que tenga tu base de datos en Firebird.

Es decir, supongamos que tienes una base de datos que se llame "Matriz" y otra que se llame "Sucursal"...quieres copiar todos los registros de la tabla "Clientes" de la MAtriz a Sucursal.

Entonces

insert into Sucursal.clientes select * from Matriz.clientes


Esta instruccion se debe poner dentro del query y es muy independiente de los componentes que uses en Delphi. Se debe escribir tal cual sea el nombre que le hayas dado a tus bases de datos y las tablas que quieras copiar

oscjae
15-12-2006, 12:39:49
Te pongo un ejemplo:

Tengo dos bases de datos

"C:\Bases de datos\Datos 1\BDGestion1.fdb"
"C:\Bases de datos\Datos 2\BDGestion2.fdb"

Lo que quiero hacer es un traspaso de datos masivo de una tabla que se llama "Tabla1", las dos bases de datos son identicas, me refiero a su estructura, claro
Tengo un componente Query, al que se supone que no le debo dar ninguna base de datos en la propiedad DataBase, ahora inserto la sentencia, segun lo que me has dicho seria: (Aqui mi duda)


insert into BDGestion2.Tabla1 select * from BDGestion1.Tabla1


es así??, porque me da error, por lo pronto el error que me da es que no se puede ejecutar la sentencia porque el query no tiene asignada ninguna base de datos, de todas formas, creo que la sentencia tampoco esta bien, si te refieres al nombre del archivo cuando hay que poner la base de datos seguido de la tabla, porque como sabe en que direccion esta la base de datos??, no se si te refieres al componente de base de datos que haya puesto en el formulario que conecte con la base de datos, de todas formas me da el error que nates te he comentado.

Gracias por tu ayuda.

rastafarey
15-12-2006, 20:25:49
Eso que dicen no se puede hacer pero si lo peden hacer d eun amenra muy facil.

Puden hacer lo suiente hacen una exportacion de lo sdatos como sentencias de insercion y lo ejecutas sobre la base d edatos destino como un script para qu ese ejecute de un solo dolo.

Si la base de datos tienen el mismo formato simplente. Creas un bakup y haces un restore el la be destino.

Y la ultima que siempre funciona ve haciendo lo que te dice en la primera opcion para cada tabla y listo.

Te pongo un ejemplo para que no me digan que no les explique bien

Tienes T1: en la bd origien
con los campo s c1, c2 ,c3

C1 | C2 | C3
================
v1.1 | v1.2 | v1.3
---------------------
v2.1 | v2.2 | v2.3
---------------------

y tiene TD: ne la bddestino
con lo scampos
A1, A2

Para mi ejemplo c1=A1 y C2+C3(concatenado no sumado) = A2

Entonces arias lo siguente


Select 'Insert into TD(A1, A2) Values(''' || C1 || ''', ''' || C2 || C3 ''');' from T1;

Esto Devolvera algo como

Insert into TD(A1, A2) Values('v1.1', 'v1.2v1.3');
Insert into TD(A1, A2) Values('v2.1', 'v2.2v2.3');


Como te puedes dar cuaenta ya tienes la data lista para exportarla solo debes copiar y pegar y ejecutarla como script.