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 poner dos TIBQuery como maestro/ Detalle? (https://www.clubdelphi.com/foros/showthread.php?t=25082)

VRO 12-09-2005 12:20:34

¿Como poner dos TIBQuery como maestro/ Detalle?
 
Hola , no se exactamnete si esto se puede hacer, yo lo he hechjo con 2 TIBTable, pero no consigo poner 2 TIBQuery como maestro detalle.

Lo necesito para realizar un quickreport de este tipo, en la banda detail poner lo de el query maestro y en la banda subdetail lo de la detalle , para intercalar los datos con su grupo correspondiente.

Necesito 2 TIbQuerys ya que los datos los saco de la misma tabla y dependiendo el caso , la tabla de la que saco los datos de ambos querys no es la misma para todos los casos..

Por favor si alguien puede ayudarme.
Muchas gracias.

Neftali [Germán.Estévez] 12-09-2005 13:01:29

Creo que vas a tener que utilizar dos vistas o dos tablas temporales para solventarlo, ya que TIBQuery no tine las propiedades necesarias para hacerlo, MasterFields y MasterSource.

rastafarey 12-09-2005 15:52:11

Resp
 
Mira como te han dicho antes el ibquery no posee la spropiedades que necesitas a menos que uses el de ib objects.

Aunqu ya no uso quickreport. pero una solucion podria ser sacar todo en una solo instruccion sql y usas un reporte de grupo en ves d eun maestro detalle yde esa manera solucionas tu problema con el quick report.

Pero por mi parte te recomiendo lo mejor qeu conozco. A menos que sea por cuestion de trabajos u obligacion que tengas que usar el quickreport te recomiendo usar fastreport que hasta los momentos es la mejor erra meistas d ereportes que conosco(y de le que he usado muchos queick, report, report builder, zreport, crystal report, rave report, etc.). ha una cosa mas a quickreport hay momentos que se el va el yoyo sin song ni ton.

Bueno pero es cuestion de gustos si lo quiere usar aqui tiene un link de donde lo puedes bajar Fast report el segusdo edit pones fastreport y te aprecen varias versiones bajate la enterprise ya que es la mejor.

Nada pierdes con probar.

Mira que no es mas inteleigente el que tiene mas conociemientos si no quien sabe escuchar a alos demas ya que tiene los del y los de los demas.

Espero te sirva de ayuda

VRO 12-09-2005 16:53:57

Gracias
 
Gracias por vuestra ayuda probaré el fastreport.

Ya te cuento haber como me va.

rastafarey 13-09-2005 21:05:03

Resp
 
Pruebalo te aseguro que te va a gustar. Aqui tienes los manuales por si los necesitas Ayuda de fast report

jmariano 13-09-2005 22:02:23

Solo decir que no es cierto que no se pueda poner dos TIBQuery en una relación maestro/detalle. Para hacerlo tenemos que construir la sentencia SQL del TIBQuery detalle con una cláusula "WHERE" donde especificamos el campo que actúa de clave ajena igualándola a un parámetro dinámico. El nombre de este parámetro debe coincidir con el nombre del campo que forma parte de la clave principal en el TIBQuery maestro y, por último, tenemos que especificar en la propiedad "DataSource" del TIBQuery detalle el "DataSource" del TIBQuery maestro.

Por ejemplo, tomemos como ejemplo la base de datos que viene por defecto con Interbase.

EMPLOYEE (Empleado)
----------
DEPT_NO
EMP_NO
FIRST_NAME
...

PHONE_LIST (Números de teléfono de un empleado)
------------
EMP_NO
LOCATION
PHONE_NO
PHONE_EXT
...

Si queremos relacionar ambos querys para mostrar los números de teléfono de un empleado determinado:

1- Definimos la consulta SQL del TIBQuery maestro, en este caso, Empleado:

Código SQL [-]
  select * from EMPLOYEE

2- Asignamos a la propiedad "DataSource" del TIBQuery detalle (números de teléfono) el "DataSource" del TIBQuery maestro (empleado)

Código Delphi [-]
  ibqPhoneList.DataSource := ibqEmployee.DataSource;

3- Configuramos la consulta SQL del TIBQuery detalle (números de teléfono)

Código SQL [-]
  select * from PHONE_LIST where EMP_NO = :EMP_NO

(El parámetro dinámico ha de llamarse igual al campo existente en el TIBQuery maestro por el cual queremos enlazar la tabla para que lo pueda localizar, que, en este caso, se trata del número de empleado: EMP_NO).

Por último activamos el TIBQuery detalle y ya podemos ver los números de teléfono de cada empleado según nos movamos por la tabla de empleados.

Saludos!

rastafarey 13-09-2005 22:22:22

creo que aqui se aclaro el punto
Cita:

Empezado por rastafarey
... una solucion podria ser sacar todo en una solo instruccion sql y usas un reporte de grupo en ves d eun maestro detalle yde esa manera solucionas tu problema con el quick report.


Rogersito Plus 08-11-2005 17:24:15

Maestro --> Detalle
 
Soy novato en INTERBASE y Delphi...

:D Disculpen el cambio, ya que hablan de Maestro - Detalle; mi consulta es:

Trabajo con INTERBASE, tengo dos tablas(IBtable) una como maestro y otra como detalle...; al momento de modificar mis datos de detalle y hacer un detalle.POST aparece el error: :confused:
"Record Not Found or Changed by Another User"

Gracias por responder...

zuncopop 23-02-2008 14:17:25

Un espectaculo mariano
 
Cita:

Empezado por jmariano (Mensaje 105815)
Solo decir que no es cierto que no se pueda poner dos TIBQuery en una relación maestro/detalle. Para hacerlo tenemos que construir la sentencia SQL del TIBQuery detalle con una cláusula "WHERE" donde especificamos el campo que actúa de clave ajena igualándola a un parámetro dinámico. El nombre de este parámetro debe coincidir con el nombre del campo que forma parte de la clave principal en el TIBQuery maestro y, por último, tenemos que especificar en la propiedad "DataSource" del TIBQuery detalle el "DataSource" del TIBQuery maestro.

Por ejemplo, tomemos como ejemplo la base de datos que viene por defecto con Interbase.

EMPLOYEE (Empleado)
----------
DEPT_NO
EMP_NO
FIRST_NAME
...

PHONE_LIST (Números de teléfono de un empleado)
------------
EMP_NO
LOCATION
PHONE_NO
PHONE_EXT
...

Si queremos relacionar ambos querys para mostrar los números de teléfono de un empleado determinado:

1- Definimos la consulta SQL del TIBQuery maestro, en este caso, Empleado:


Código SQL [-]
select * from EMPLOYEE





2- Asignamos a la propiedad "DataSource" del TIBQuery detalle (números de teléfono) el "DataSource" del TIBQuery maestro (empleado)


Código Delphi [-]
ibqPhoneList.DataSource := ibqEmployee.DataSource;





3- Configuramos la consulta SQL del TIBQuery detalle (números de teléfono)


Código SQL [-]
select * from PHONE_LIST where EMP_NO = :EMP_NO





(El parámetro dinámico ha de llamarse igual al campo existente en el TIBQuery maestro por el cual queremos enlazar la tabla para que lo pueda localizar, que, en este caso, se trata del número de empleado: EMP_NO).

Por último activamos el TIBQuery detalle y ya podemos ver los números de teléfono de cada empleado según nos movamos por la tabla de empleados.

Saludos!

Mariano tu respuesta fue espectacular este tema me tenia trabado hace bastante tiempo gracias por compartir


La franja horaria es GMT +2. Ahora son las 20:41:34.

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