Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   conectar dos BD interbase para una consulta que sólo va a mostrar datos (https://www.clubdelphi.com/foros/showthread.php?t=49454)

Giniromero 22-10-2007 17:11:50

conectar dos BD interbase para una consulta que sólo va a mostrar datos
 
Hola,

Estoy trabajando con dos bases de datos en Interbase 7.5. Tienen información que tenemos que cruzar, para obtener un listado.
Hay alguna manera de, antes de nada, conectar a las BD desde la consulta SQL, para luego hacer una consulta entre tablas de ambas, como normalmente cuando las tablas son todas de la misma BD?

Muchas gracias,

Virginia

poliburro 22-10-2007 17:55:05

No conozco firebird, pero en la mayoría de los motores de bases de datos, si no es que en todos, cuando consultas tablas de diferentes bases de datos que residen en el mismo servidor lo puedes hacer de la siguiente manera


Schema.TableName

Teniendo que Schema es la base de datos.

Suerte

RolphyReyes 22-10-2007 19:05:38

Saludos.

En Interbase/Firebird por el momento no se permiten sentencias de ningun tipo enlazadas entre dos BD sin importar su ubicacion fisica.

Se espera que en la proxima version de Firebird (>= 2.5) se pueda realizar los cross join.

La opcion que tienes por el momento es hacerlo manual desde delphi.

Hasta luego.

Giniromero 23-10-2007 10:35:07

Cita:

Empezado por RolphyReyes (Mensaje 240324)
Saludos.

En Interbase/Firebird por el momento no se permiten sentencias de ningun tipo enlazadas entre dos BD sin importar su ubicacion fisica.
.

¿sin importar su hubicación física? si te refieres a tener el path, lo tengo, por eso no habría problema. ¿como se haría?
Cita:

Empezado por RolphyReyes (Mensaje 240324)
La opcion que tienes por el momento es hacerlo manual desde delphi.
Hasta luego.

Exactamente a que te refieres con "hacerlo manual desde delphi"? por que efectivamente estoy trabajando con delphi, y supongo que esta es la otra opcion que tengo.

Muchas gracias por la ayuda, de ante mano,

Virginia

RolphyReyes 23-10-2007 14:22:11

Cuando me referiero a su ubicacion fisica es que no importa en que servidor esten ubicadas las BD no podras realizar sentencias de ningun tipo via el mismo motor de BD.

En cuanto "hacerlo manual desde delphi" es que debes de poner 2 componentes de BD para conectar las distintas BD luego con 2 componentes Query/Dataset traer los datos de las BD e ir leyendo tus datos desde los DataSet y realizar las operaciones de lugar que necesites.

Digo 2 por poner un ejemplo pueden ser mas dependiendo de tu caso.

Hasta luego.

poliburro 23-10-2007 19:27:40

Cita:

Empezado por RolphyReyes (Mensaje 240324)
Saludos.

En Interbase/Firebird por el momento no se permiten sentencias de ningun tipo enlazadas entre dos BD sin importar su ubicacion fisica.

Se espera que en la proxima version de Firebird (>= 2.5) se pueda realizar los cross join.

La opcion que tienes por el momento es hacerlo manual desde delphi.

Hasta luego.


No se puede?, caramba, una nueva razón por la que no me gusta FireBird/Interbase.

juanelo 23-10-2007 20:25:43

Cita:

Empezado por poliburro (Mensaje 240574)
No se puede?, caramba, una nueva razón por la que no me gusta FireBird/Interbase.

Es en verdad una falta de diseño o una consulta extraordinaria (trabajo por encargo) el que se tenga que hacer este tipo de consultas, pero Firebird tiene grandes ventajas sobre otros manejadores incluso gratutitos, y para aquellos que necesiten hacer estos trabajos pues ahi viene una nueva version que contempla las consultas multi base de datos.
Saludos

jhonny 23-10-2007 23:36:50

Cita:

Empezado por RolphyReyes (Mensaje 240324)
Saludos.

En Interbase/Firebird por el momento no se permiten sentencias de ningun tipo enlazadas entre dos BD sin importar su ubicacion fisica.

Se espera que en la proxima version de Firebird (>= 2.5) se pueda realizar los cross join.

La opcion que tienes por el momento es hacerlo manual desde delphi.

Hasta luego.

¿De donde sacaste que para FireBird 2.5 tendremos dicha caracteristica?, sería algo muy bueno, lo malo es que no logro encontrar dicho articulo :( :).

jhonny 24-10-2007 00:09:36

Ahhh, ya encontre algo, pero veo que la implementación del cross-database esta presupuestada para la versión 3.0, no para la 2.5 que según veo no va a existir ;).

Precisamente estaba en el Roadmap de FireBird, ufff... :D.

http://www.firebirdsql.org/index.php...ap_2007&nosb=1

RONPABLO 24-10-2007 00:33:58

Para comunicarme con otra bd, en algunos casos he encontrado muy útil usar las tablas externas, yo hago algo como lo siguiente:

1. En bd1 creo una tabla externa
Código SQL [-]
RECREATE TABLE FACTURASXPERSONA
EXTERNAL FILE 'C:\ARCHIVOS DE PROGRAMA\FIREBIRD\FIREBIRD_1_5\BIN\MIBD\CITASXPERSONA.TXT'
(
  CODIGO                  CHAR(    50)  COLLATE NONE,
  NOMBRE                  CHAR(   200)  COLLATE NONE,
  TOTAL                   CHAR(     2)  COLLATE NONE,
  FACTURA                 CHAR(    20)  COLLATE NONE
);
2. luego en la bd 2 creo exactamente la misma tabla externa

Código SQL [-]
RECREATE TABLE FACTURASXPERSONA
EXTERNAL FILE 'C:\ARCHIVOS DE PROGRAMA\FIREBIRD\FIREBIRD_1_5\BIN\MIBD\CITASXPERSONA.TXT'
(
  CODIGO                  CHAR(    50)  COLLATE NONE,
  NOMBRE                  CHAR(   200)  COLLATE NONE,
  TOTAL                   CHAR(     2)  COLLATE NONE,
  FACTURA                 CHAR(    20)  COLLATE NONE
);

y ahí comparto información entre las dos bds sin necesidad de usar mas que querys... es solo una idea.....

pvizcay 25-10-2007 15:28:18

podrías unificar las dos bases en una..

si tienes que consulltar datos de dos bds seguramente hay un relación de integridad entre ambas, aun con la versión 3 y los cross joins entre bases esto no se puede garantizar

Giniromero 05-11-2007 17:24:51

Hola de nuevo,

Desde que me comentaste esto:

Cita:

Empezado por RolphyReyes (Mensaje 240515)
Cuando me referiero a su ubicacion fisica es que no importa en que servidor esten ubicadas las BD no podras realizar sentencias de ningun tipo via el mismo motor de BD.

En cuanto "hacerlo manual desde delphi" es que debes de poner 2 componentes de BD para conectar las distintas BD luego con 2 componentes Query/Dataset traer los datos de las BD e ir leyendo tus datos desde los DataSet y realizar las operaciones de lugar que necesites.

Digo 2 por poner un ejemplo pueden ser mas dependiendo de tu caso.

Hasta luego.

he estado haciendo pruebas con esto, pero no lo consigo filtrar del todo bien.

Quiero decir, si tengo una base de datos 1 con una tabla A, que tiene muchos registros para cada campo "codigo" y tengo otra base de datos 2, con una tabla B, en la que hay un sólo registro para cada campo "codigo" y tengo que hacer que se conecten por ese campo código, para que cada registro de la tabla A tenga una correspondencia con el campo2 de la tabla tablaB. Hasta aquí todo bien. Me devuelve todos los registros de la tablaA y un campo más que resulta de la consulta a la tablaB. El problema es que, la tablaB NO tiene 1 registro por cada número de codigo, por lo que algunos registros de la tablaA se quedan en blanco, cuando lo que yo necesito es que en tal caso esos registros no se muestren.

Por eso necesito, alguna manera dentro del delphi, de que se conecten las BD.

Espero haberme explicado bien.

Muchas gracias por todo,

Virginia

RolphyReyes 06-11-2007 16:25:54

Saludos.

Jhonny aca tienes el link de la información que dije http://www.firebirdnews.org/index.php?paged=2

Virginia si vas a relacionar dos tablas se supone que debes de tener un campo por el cual vas a realizar dicha operacion. Debes de enfocarte bien en lo que quieres obtener y si puedes darnos parte de la estructura asi mas facil podriamos ayudarte.

Hasta luego.

jhonny 06-11-2007 16:48:41

Cita:

Empezado por RolphyReyes (Mensaje 243804)
Saludos.

Jhonny aca tienes el link de la información que dije http://www.firebirdnews.org/index.php?paged=2

Virginia si vas a relacionar dos tablas se supone que debes de tener un campo por el cual vas a realizar dicha operacion. Debes de enfocarte bien en lo que quieres obtener y si puedes darnos parte de la estructura asi mas facil podriamos ayudarte.

Hasta luego.

Si, en el RoadMap de FireBird tambien estaba, interesante :)... es mas, por aqui http://www.fingerbird.de/ff/refguide..._BASED_ON.html encontre un algo que aún no he tenido la oportunidad de probar pero parece ser el asunto :).

Gracias RolphyReyes :).

tefots 06-11-2007 23:29:07

creo que si se puede
 
pues yo creo que si se puede , no lo he provado, pero deberia funcionar sin problemas.

creas dos conexiones odbc , una apuntando a la bd1 , y otra apuntando a la bd2.

luego desde access, vinculas las tablas correspondientes por odbc, de la bd1 y la bd2.

y se hace la consulta desde access. select from tabla1,tabla2 where tabla1.codigo=tabla2.codigo ... etc.

si funciona , podemos guardar la consulta , y/o acceder a la bd acces con las tablas vinculadas.

el rendimiento será pobre , ya que supongo que access se traerá los datos y luego hará la consulta localmente.

que alguien lo pruebe y diga si funciona.

tefots 08-11-2007 10:54:21

Me respondo a mi mismo.

Comprobado , funciona correctamente y bastante bien.

he enlazado mediante una consulta 2 tablas de 2 bases de datos distintas que residen en distintos servidores firebird.

la aplicación solo ha de acceder a la base de datos que en este caso es access (donde estan vinculadas las tablas de los distintos servidores firebird por odbc ) , y trabajar como si trabajara con una bd access. el access se encarga de todo , a la aplicación le es transparente y le da igual que las tablas se encuentren en distintos servidores.

saludos.


La franja horaria es GMT +2. Ahora son las 13:28:37.

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