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)
-   -   Como hacer una consulta (Query) con dos DB? (https://www.clubdelphi.com/foros/showthread.php?t=27556)

El_Raso 24-11-2005 04:52:47

Como hacer una consulta (Query) con dos DB?
 
Alguien me dice como? usando Firebird... quiero consultar dos tablas que estan en dos bases de datos diferentes... ejemplo

DB1 tiene la Tabla Provincia
DB2 tiene la Tablas Alumnos y los alumnos tienen el codigo de la provincia de la tabla provincia que esta en la DB1, como traigo el nombre de la provincia?

Un ayuda con ejemplo porfa...

Un Saludo a todos!!!

Migpal 24-11-2005 14:18:19

Si manejas Dataset, entonces en la propiedad datasuorce pones el datasource
de la tabla provincia.

y en el SQL text del dataset pones select * from alumnos where fkprovincia=:pkprovincia.

marcoszorrilla 24-11-2005 15:19:09

Si, pero la pregunta es con FireBird, y que yo sepa no pueden hacerse consulta con tablas que estén en 2 bases de datos distintas.

Un Saludo.

jhonny 25-11-2005 14:26:38

Bueno, una manera de intentarlo seria poniendo dos componentes de conexion a las dos diferentes bases de datos, 1 TDataSet TQuery(llamemosle qAlumnos) conectado a la BD que tiene la tabla "Alumnos", en ese TQuery poner la consulta de la tabla "Alumnos" que traeria el codigo de la "Provincia". Luego recorrer dicho "qAlumnos" dandole inicio a otro TQuery(llamemosle qProvincias) creado esta vez en tiempo de ejecución y conectado a la otra BD (la que tiene la tabla "Provincias") que diga algo como
Código SQL [-]
select p.descripcion from provincia p where p.codigo=:cod_provincia
y en el bucle donde se rrecorre el qAlumnos pasarle los parametros al qProvincias y en ese mismo bucle ir descargando dato por dato en algun otro componente por ejemplo: Un TRxMemoryData que tenga los campos necesarios.

Espero me haya hecho entender y que sobre todo te sirva de algo ;).

roman 25-11-2005 16:55:20

Cita:

Empezado por marcoszorrilla
Si, pero la pregunta es con FireBird, y que yo sepa no pueden hacerse consulta con tablas que estén en 2 bases de datos distintas.

Marcos, tengo dudas respecto a esto. Es decir, sé que no se pueden hacer consultas SQL en Firebird que crucen dos bases distintas. Pero en este caso pienso que debe funcionar ya que se hace a nivel de componentes. Una componente está conectada a la tabla de alumos de una base e imagino que la propiedad DataSource que menciona Migpal no necesita saber a qué DataSet está conectado ese DataSource ni de dónde toma los datos. Entonces, usando un segundo DataSet conectado al catálogo de provincias de la otra base debería funcionar ¿no?

// Saludos

jhonny 25-11-2005 17:08:59

Lo que dice roman tambien es lo que yo he creido y por eso saque dichas conclusiones, pues a nivel de componentes ya es otra cosa.

El_Raso 25-11-2005 21:47:02

Uso FIBPlus... tambien se podria con ellas?

jhonny 25-11-2005 21:54:33

Cita:

Empezado por El_Raso
Uso FIBPlus... tambien se podria con ellas?

Si, claro, seria lo mismo.

Ricomarz 30-01-2007 05:37:49

Perdon yo tengo el mismo problema
 
Hola yo tengo el mismo problema !!

Quiero hacer una consulta en dos bases de datos diferentes ... en la primera consulto cuatro tablas, de las cuales obtengo el grupo,salon,capacidad y el num de empleado, este ultimo entrara como parametro en la segunda BD (tabla empleados) de la cual obtendre el nombre del maestro ......

Yo utilizo dos Data Modulos para c/ BD, en cada uno hago la conexion a la BD por medio de un Conexion String ... estoy utilizando el componente ADO ...

El problema es que no se si lo que stoy haciendo este bien, aqui esta lo que hago para obtener esos datos ...
Código Delphi [-]
 
procedure ObtenerDatosMaestroGrupo(per,mpio:string);
var idmpio,reg,emp:integer;
begin
idmpio:=strToInt(muncipio(mpio));
 
dmprincipal.QBuscar.Close;
dmprincipal.QBuscar.SQL.Text:='Select pe.periodo, g.salon, g.grupo, g.capacidad, g.empleado as numemp '+
'From grupos g, periodos pe, materias ma, cursos cu '+
'Where pe.id_periodo=g.id_periodo and ma.clave_materia=g.clave_materia '+
'and cu.id_curso=ma.id_curso and cu.id_mpio=:idmpio and pe.periodo=: per '+
'Order by cu.id_mpio,g.grupo';
dmprincipal.QBuscar.Parameters.ParamByName('per').value:=per;
dmprincipal.QBuscar.Parameters.ParamByName('idmpio').value:=idmpio;
dmprincipal.QBuscar.Open;
reg:=dmprincipal.QBuscar.Recordset.RecordCount;
if reg>0 then
begin
emp:= dmprincipal.QBuscar.FieldByName('numemp').value;
 
dmrechum.QRechum.Close;
dmrechum.QRechum.SQL.Text:='Select ap_pat,ap_mat,nom_empl,num_empl from pcrhac02 where num_empl=:nemp';
dmrechum.QRechum.Parameters.ParamByName('nemp').Value:=emp;
dmrechum.QRechum.Open;
 
FRepgrupos.Preview;
end
else
begin
FidioConceptosyGrupos.mensaje.Caption:='No existen grupos vigentes en el periodo '+ per;
FidioConceptosyGrupos.mensaje.Visible:=true;
end;
end;
Maestro Grupo Salon Capacidad
Ricardo A1 200 10
Ricardo A2 201 10


Los valores que me arrogan son los correctos a excepcion de que el maestro me lo duplica para todos los grupos, siendo que es diferente el maestro ... No se si hay otra forma de hacerlo ... espero puedan ayudarme ..

Saludos... espero sus respuestas y/o sugerencias


La franja horaria es GMT +2. Ahora son las 06:11:10.

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