Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-10-2007
Giniromero Giniromero is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 296
Poder: 21
Giniromero Va por buen camino
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
__________________
Sonrie al mundo, y el mundo te sonreirá :)
Responder Con Cita
  #2  
Antiguo 22-10-2007
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 23
poliburro Va por buen camino
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
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
  #3  
Antiguo 22-10-2007
Avatar de RolphyReyes
RolphyReyes RolphyReyes is offline
Miembro
 
Registrado: ago 2004
Ubicación: Santo Domingo
Posts: 285
Poder: 20
RolphyReyes Va por buen camino
Lightbulb

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.
__________________
Gracias,
Rolphy Reyes
Responder Con Cita
  #4  
Antiguo 23-10-2007
Giniromero Giniromero is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 296
Poder: 21
Giniromero Va por buen camino
Cita:
Empezado por RolphyReyes Ver Mensaje
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 Ver Mensaje
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
__________________
Sonrie al mundo, y el mundo te sonreirá :)
Responder Con Cita
  #5  
Antiguo 23-10-2007
Avatar de RolphyReyes
RolphyReyes RolphyReyes is offline
Miembro
 
Registrado: ago 2004
Ubicación: Santo Domingo
Posts: 285
Poder: 20
RolphyReyes Va por buen camino
Exclamation

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.
__________________
Gracias,
Rolphy Reyes
Responder Con Cita
  #6  
Antiguo 23-10-2007
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 23
poliburro Va por buen camino
Cita:
Empezado por RolphyReyes Ver Mensaje
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.
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
  #7  
Antiguo 23-10-2007
Avatar de juanelo
juanelo juanelo is offline
Miembro
 
Registrado: sep 2007
Posts: 1.083
Poder: 18
juanelo Va por buen camino
Cita:
Empezado por poliburro Ver Mensaje
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
Responder Con Cita
  #8  
Antiguo 23-10-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por RolphyReyes Ver Mensaje
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 .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #9  
Antiguo 24-10-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
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... .

http://www.firebirdsql.org/index.php...ap_2007&nosb=1
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #10  
Antiguo 24-10-2007
Avatar de RONPABLO
[RONPABLO] RONPABLO is offline
Miembro Premium
 
Registrado: oct 2004
Posts: 1.514
Poder: 21
RONPABLO Va por buen camino
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.....
Responder Con Cita
  #11  
Antiguo 25-10-2007
pvizcay pvizcay is offline
Miembro
 
Registrado: jun 2006
Posts: 147
Poder: 18
pvizcay Va por buen camino
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
Responder Con Cita
  #12  
Antiguo 05-11-2007
Giniromero Giniromero is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 296
Poder: 21
Giniromero Va por buen camino
Hola de nuevo,

Desde que me comentaste esto:

Cita:
Empezado por RolphyReyes Ver Mensaje
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
__________________
Sonrie al mundo, y el mundo te sonreirá :)
Responder Con Cita
  #13  
Antiguo 06-11-2007
Avatar de RolphyReyes
RolphyReyes RolphyReyes is offline
Miembro
 
Registrado: ago 2004
Ubicación: Santo Domingo
Posts: 285
Poder: 20
RolphyReyes Va por buen camino
Wink

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.
__________________
Gracias,
Rolphy Reyes
Responder Con Cita
  #14  
Antiguo 06-11-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por RolphyReyes Ver Mensaje
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 .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #15  
Antiguo 06-11-2007
tefots tefots is offline
Miembro
 
Registrado: feb 2005
Posts: 108
Poder: 20
tefots Va por buen camino
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.
Responder Con Cita
  #16  
Antiguo 08-11-2007
tefots tefots is offline
Miembro
 
Registrado: feb 2005
Posts: 108
Poder: 20
tefots Va por buen camino
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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Error en Consulta - solo salen datos la primera vez javicho_villa Varios 5 24-01-2006 02:09:21
mostrar solo los datos que yo kiera en una tabla ercrizeporta Conexión con bases de datos 1 15-07-2005 13:20:47
Conectar Con Una Base De Datos En Interbase Argaron PHP 3 05-08-2004 22:44:47
mostrar SOLO cliente de los que tengo un sólo registro Giniromero SQL 15 11-06-2004 12:33:19
Construir un select para mostrar en un dbgrid sólo dos tipos Aprendiendo SQL 4 31-12-2003 13:49:39


La franja horaria es GMT +2. Ahora son las 18:02:23.


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
Copyright 1996-2007 Club Delphi