Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Un consulta sobre dos BD distintas (https://www.clubdelphi.com/foros/showthread.php?t=65721)

mjjj 08-01-2010 21:37:01

Un consulta sobre dos BD distintas
 
Hola gente del foro, una preguntita.

Utilizo Firebird 2.0, Delphi 2006 y componentes Interbase.

Imaginense que tengo 2 BD distintas, alojadas en el mismo servidor.
En una aplicación quisiera poder realizar una consulta que relacione tablas de las distintas BD... se puede hacer esto?

Saludos

HenryAraniva 09-01-2010 06:34:42

Yo lo he hecho con los componentes ADO y utilizando bases de datos de SQLServer, en la conexion no debes especificar la base de datos y en el query solo pones por ejemplo
SELECT T1.Micampo,T2.Micampo
FROM Mibase1.dbo.MiTabla T1
INNER JOIN Mibase2.dbo.MiTabla T2 ON T1.Micampo = T2.Micampo

Casimiro Notevi 09-01-2010 14:28:45

No, con firebird no puedes relacionar 2 bd al mismo tiempo, tienes que coger los datos de una y otra, pero independientemente, cada una con su conexión.
Creo que en la última versión que está en fase "rc1" sí que lo permite, pero tendría que verlo para confirmarlo.

rgstuamigo 09-01-2010 14:29:26

Cita:

Empezado por mjjj (Mensaje 350305)
Hola gente del foro, una preguntita.

Utilizo Firebird 2.0, Delphi 2006 y componentes Interbase.

Imaginense que tengo 2 BD distintas, alojadas en el mismo servidor.
En una aplicación quisiera poder realizar una consulta que relacione tablas de las distintas BD... se puede hacer esto?

Saludos

Chequea este hilo para que veas si es posible hacerlo en Firebird ya que no todos los servidores de bases de datos son iguales o tienen las mismas caracteristicas.;).
Saludos...:)

Axel_Tech 27-01-2010 11:24:52

Bueno, pues ya he probado Firebird 2.5 y he de decir que se puede hacer un SELECT a otra base de datos distinta, gracias a la expresión ON EXTERNAL DATA SOURCE, poniendo la ruta de la base de datos, el usuario y la contraseña. Pero mucho me temo que unir tablas (JOIN) de bases de datos distintas todavía no se puede :( pero bueno es un comienzo.
Habrá que seguir con las tablas temporales, claro que ahora se hace mucho más rápido (con un cursor, en un SP por ejemplo) que antes recorriendo con código Delphi las IBQuery y haciendo un INSERT registro a registro. Sería una cosa tal que así:
Código SQL [-]
DECLARE VARIABLE C1 INTEGER; 
DECLARE VARIABLE C2 INTEGER; 

BEGIN
   FOR 
       EXECUTE STATEMENT 'SELECT CAMPO1, CAMPO2 FROM TABLA WHERE CAMPO1 = 50'
       ON EXTERNAL DATA SOURCE '192.168.X.X:/RUTA/BASEDATOS.GDB' 
       AS USER 'SYSDBA' PASSWORD 'masterkey'
       INTO :C1, :C2
   DO 
       INSERT INTO TABLA_TEMPORAL (CAMPO1, CAMPO2) VALUES (:C1, :C2);    
END

Y posteriormente ya podríamos unir una tabla con la temporal que tiene los registros de la otra base de datos.
Aquí tenéis más información sobre el tema. También pone cómo hacer un simple SELECT para visualizar datos de otra base de datos mediante la sentencia EXECUTE BLOCK.

Casimiro Notevi 27-01-2010 11:45:34

muy interesante, gracias por compartirlo :)


La franja horaria es GMT +2. Ahora son las 22:07:22.

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