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)
-   -   Querys entre 2 BBDD diferentes (https://www.clubdelphi.com/foros/showthread.php?t=14282)

CHiCoLiTa 15-09-2004 17:51:55

Querys entre 2 BBDD diferentes
 
Hola, ando un poco espeso ultimamente y estoy con trabajando con Delphi 6 contra varias Bases de datos en SQL Server.

Mi inquietud en estos momentos es la siguiente:

Si quiero copiar los datos de una tabla que estan en la Base de Datos A (Tabla1) a otra tabla a la Base de Datos B (Tabla2), lo que hago es abrir la tabla o la query con los datos que quiero copiar, abrir la tabla destino y hago lo siguiente

Código Delphi [-]
while not Tabla1.Eof do
begin
      Tabla2.Append;
      for i := 0 to Pred(Tabla1.Fields.Count) do
             Tabla2.Fields[i].Value := Tabla1.Fields[i].Value;
      Tabla2.Post;
      Tabla1.Next;
end;

No se si se puede hacer de otra forma, pero ese problema ya lo tengo solventando

Ahora bien, y aqui llega mi gran duda. Teniendo la Base de Datos A y la Base de Datos B, quiero hacer una Query que cruce la Tabla1 en la BBDD A con la Tabla2 que esta en la BBDD B

Como consigo eso?

Por cierto, se me olvida decir que las conexion y tablas y querys que uso son ADO

__hector 15-09-2004 18:01:54

Para insertar registros, y hacer las consultas, te vale mas usando sql. Por ejemplo, tabla a en servidor1, tabla b en servidor2:

insert into servidor2.dbo.tablab (campo, campo)
select servidor1.dbo.tablaa (campo, campo)

igual para las consultas:

select A.campo, B.campo

from servidor1.dbo.tablauno A
INNER JOIN servidor2.dbo.tablados b ON A.campo1=B.campo1

me explique?

CHiCoLiTa 16-09-2004 13:24:56

Ahhh, que pillin!! :D Nunca me habia funcioando eso porque no ponia el dbo

Muchas gracias por la respuesta

Con esta respuesta se me ocurren 2 nuevas preguntas,

- La primera es si eso mismo se puede hacer con 2 SGBD diferentes, por ejemplo con SQL Server con MS Access. Desde Access tienes la posibilidad de vincular tablas y hacer las consultas que quieras

- La segunda pregunta seria si para volcar datos de una Base de Datos a otra haciendo con una consulta directamente, con el INSERT INTO como podria tener una barra de progreso para controlar el tiempo

Supongo que habria que ejecutarla en un hilo a parte, porque sino se quedaria "colgado" el programa, y usando el eveto del query FetchProgress :confused:

Esto bien hecho :p funcionaria? :rolleyes:

mguixot 07-11-2005 09:42:04

Hola,

no entiendo muy bien la sentencia Query que estais comentando. A que os referiís cuando hablais de Servidor1 y Servidor2?.
En mi caso, tengo 2 bbdd (Interbase 6) en el mismo equipo y necesito vocar el contenido de varias tablas de una bbdd a otra. Estoy intentando utilizar la sentencia insertada por Hector
Código:

insert into servidor2.dbo.tablab (campo, campo)
select servidor1.dbo.tablaa (campo, campo)

, pero no se si debo ejecutarla como un script y contra qué bbdd de las dos.
Alguien puede aclararme esto?.

Gracias a todos.

Casimiro Notevi 07-11-2005 10:17:09

Esa sentencia es para ms-sql server, no funciona con interbase.

mguixot 07-11-2005 10:29:30

Gracias por responder.

Sabes si en Interbase se puede utilizar alguna similar. O en para estos casos, está capado?.

Saludos

vtdeleon 07-11-2005 13:07:55

Saludos

Con ninguna sentencia se puede hacer una transferencia o consulta de datos entre 2 o mas BBDD. Solo queda usar DataPump o tener 2 dataset (en delphi) y mediante un ciclo agregar x datos

mguixot 09-11-2005 16:24:05

Me he tenido que implementar un bucle, con 2 TTables e ir volcando registros uno a uno, tal y como describe CHICOLITA en este hilo.
El problema que he encontrado, es que si el valor del campo es '' (cadena vacia) me inserta en el campo de la tabla destino un Null, valor que no me permite tener la própia bbdd, ya que es un campo tipo 'not null'.

Código:

IBTableVacia.Fields[i].Value := IBTableLlena.Fields[i].Value;
esta es la expresión que utilizo para pasar la información entre tablas.

Saben porque me ocurre esto con la cadena vacia ('').

Saludos

pyanqn 15-11-2005 12:56:44

Hola, yo estoy usando Zeos, y MySql. Tengo dos conecciones ya que tengo dos bases de datos distintas, la pregunta es como hago para realizar una consulta que involucra el uso de dos tablas que provienen de una y otra base de datos.

pyanqn 16-11-2005 14:30:15

Mas concretamente la pregunta es: tengo que hacer un join con tablas que estan en dos bases de datos distintas. La question es como hago esto usando ZQuery, ya que solo puedo elazarle una unica conexión.


La franja horaria es GMT +2. Ahora son las 09:46:49.

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