Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Consulta a dos bases de datos (https://www.clubdelphi.com/foros/showthread.php?t=55384)

drykea 15-04-2008 17:57:33

Consulta a dos bases de datos
 
Hola a tod@s.

Tengo una aplicacion con dos ADOConnection a dos bbdd diferentes.
En una tengo los nombres de los clientes y en otra los pedidos con un codigo de cliente.

Necesito mostrar los datos en un dbgrid, habia pensado algo como:
Select Pedidos.*, Cliente.Nombre from Pedidos inner join Cliente on cliente.codcli = Pedidos.codcli

Teniendo en cuenta que cada tabla esta en una base de datos
¿alguien sabe como hacerlo?

Muchas gracias de antemano

enecumene 15-04-2008 18:13:00

Hola, no te garantizo que te funcione, pero de nada se pierde con probar:

Código SQL [-]
select BD1.Tabla.Campo, BD2.Tabla.Campo from BD1.Tabla, BD2.Tabla  where...

espero te sirva,

Saludos.

Neftali [Germán.Estévez] 15-04-2008 18:15:21

¿Qué BD estás utilizando?
En el caso de SQL Server busca en la ayuda sobre LINKED SERVERS y obtendrás cómo se puede hacer.
El el caso de ACCESS sino recuerdo mal, se puede añadir el path de la BD antes del nombre de la tabla.

luisgutierrezb 15-04-2008 18:16:01

los 2 ado connection son para 2 bases de datos diferentes en 2 plataformas diferentes? o para 2 bases de datos en una misma plataforma?
nos podrias dar mas informacion?

drykea 16-04-2008 10:23:53

Hola gracias a todo por responder.

Estoy utilizando SQL Server y las dos bbdd estan en el mismo servidor.

Lo de poner la base de datos antes de la tabla no me ha funcionado.
Voy a buscar a ver lo que encuentro sobre los LINKED SERVERS.

Neftali [Germán.Estévez] 16-04-2008 11:36:19

En el caso de SQL Server y estando ambas dentro del mismo servidor basta con que las llames utilizando nombre de la Base de Datos y nombre de la tabla (interponiendo dbo).

Código SQL [-]
Select * from BD1.dbo.tabla1
union
Select * from BD2.dbo.tabla2

NOTA: Para el mismo servidor no hace falta LINKED SERVERS.
NOTA2: He aquí un ejemplo más de lo importante que es explicar las cosas bien. Si esta última explicación (los dos detalles subrayado) la hubieras dado en un primer momento nos hubieramos ahorado muchas horas y unas cuantas respuestas.

Un saludo.

drykea 16-04-2008 14:00:21

Siento no haberme explicado bien a la primera.:o

De todos modos, lo de la 'union' no me sirve porque eso lo que hace es devolver registros de los dos sitios pero anexarlos 'en vertical' y yo lo que quiero es hacerlo 'en Horizontal'.

A ver si me explico:
Yo quiero obterner algo parecido a esto:
bd1.tabla1.Pedido bd2.tabla2.Cliente

Y lo que me devolveria la union sería:

bd1.tabla1.Pedido
bd2.tabla2.Cliente

Asi para todos los pedidos, como quiero visualizarlo en un DBGRID lo de la union no me sirve.

Neftali [Germán.Estévez] 16-04-2008 14:19:40

Lo de la UNION aquí es un ejemplo, simplemente era para que vieras como se llama a las diferentes tablas.
Lo que tú necesitas hacer es una simple JOIN, pero tu pregunta iba referida a cómo llamar a las tablas, no a cómo relacionarlas para obtener los datos.

drykea 16-04-2008 15:46:47

Ya sé que necesito algo parecido a un inner join.

Tal y como dije en el primer post, el problema es que no sé como hacerlo con delphi y ADO.

¿Alguien sabe como?

Neftali [Germán.Estévez] 16-04-2008 17:36:05

HAz una busqueda en los foros hay muchísimos ejemplos de cómo hacerlo....

drykea 18-04-2008 10:38:53

Eso ya lo hice antes de poner el post, pero no encontré lo que necesito.

Neftali [Germán.Estévez] 18-04-2008 12:51:45

Si revisas el hilo con detalle tienes todas las respuestas.
Coloca un ADOConnection y un ADOQuery. En el ADOQuery la siguiente consulta:

Código SQL [-]
  Select BD1.dbo.Pedidos.*, BD2.dbo.Cliente.Nombre from BD1.dbo.Pedidos inner join BD2.dbo.Cliente on BD2.dbo.Cliente.codcli = BD1.dbo.Pedidos.codcli

drykea 18-04-2008 13:54:53

Vale y a que base de datos conecto el ADOConnection a BD1 o a la BD2 ???

Neftali [Germán.Estévez] 18-04-2008 15:58:09

Pues da igual, lo importante en el ADOConnection es el Servidor, puesto que las Bases de Datos ya se las estamos pasando en la consulta.


La franja horaria es GMT +2. Ahora son las 19:36:21.

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