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)
-   -   Maestro-Detalle (https://www.clubdelphi.com/foros/showthread.php?t=32169)

joanajj 28-05-2006 20:07:00

Maestro-Detalle
 
Buenas a todos, sabe alguien un enlace donde pueda ver como se hace de forma detallada un enlace maestro-detalle(tipo cabecera-cuerpo fra.) ya que tengo algo de información suelta(eso de crear clave foranea, un indice unique, etc.) pero no consigo que funcione correctamente.

Uso Firebird, FBIPLUS(Trial) y Delphi 7

he creado 2 tablas:

1ª) CABECERA con clave primaria (NUMERO) e indice (NUMERO UNIQUE)

2ª) CUERPO
-con clave primaria(CLAVE2) e indice (AUTOINCREM)
-clave foranea (NUMERO) APUNTANDO A (NUMERO DE 1ª TABLA) e indice (NUMERO)

el código puesto es SELECTSQL de 2ª) tabla es:
Código SQL [-]
SELECT
    C.NUMERO,
    C.CLIENTE,
    C.FECHA,
(SELECT COUNT(*) FROM cuerpo WHERE numero = C.numero) QUANTITY_ORDERS
FROM
    CABECERA C
where numero= C.NUMERO

donde cabecera es la tabla 1ª)

y en REFRESHSQL :

Código SQL [-]
SELECT
C.NUMERO,
    C.CLIENTE,
    C.FECHA,
(SELECT COUNT(*) FROM cuerpo WHERE numero = C.numero) QUANTITY_ORDERS
FROM
    CABECERA C
WHERE
C.NUMERO = :OLD_NUMERO

ORDER BU C.CLIENTE

y no consigo que al posicionarme en una linea de cabecera se muestren en cuerpo las lineas cuyo numero coincidan con el número de cabecera.

Si me podéis ayudar bien, si no, por lo menos un enlace...

Gracias a todos...

celades1 28-05-2006 21:13:11

Hola

Lo que veo mal

es el ORDER BU C.CLIENTE del refreshql

En maestro detalle el dataset segundo debe tener el datasource del maestro
Pero no entiendo lo que quieres ya que si lo que quieres es mostrar abajo
los datos de la tabla cuerpo deberias hacer



quedaria asi selectsql

Código SQL [-]
SELECT * from cuerpo where numero=:numero

refreshsql

Código SQL [-]
SELECT * from cuerpo where clave2=:clave2

si lo que pretendes es mostrar datos de la cabecera y el numero de linias del cuerpo


Código SQL [-]
SELECT * C.NUMERO, C.CLIENTE, C.FECHA,(SELECT COUNT(*) FROM cuerpo WHERE numero = C.numero) QUANTITY_ORDERSFROM CABECERA Cwhere c.numero= :NUMERO

donde :numero apunraria al pK del dataset maesto

y refreshsql

Código SQL [-]
 
SELECT
C.NUMERO,
C.CLIENTE,
C.FECHA,
(SELECT COUNT(*) FROM cuerpo WHERE numero = C.numero) QUANTITY_ORDERS
FROM
CABECERA C
WHERE
C.NUMERO = :OLD_NUMERO


Pero creo que no entiendo lo que quieres

Saludos

joanajj 28-05-2006 22:23:42

si eso es lo que busco pero no funciona
 
Gracias por responder.

Eso es exactamente lo que busca y es que al seleccionar una linea en cabecera(como puede ser una fra.) en cuerpo se vean solo loas lineas que corresponden a la selección:

Ej.

CABECERA
fra. 200 24/02/2000 Francisco Perez
esta es por ej. la selección
fra. 201 24/02/2000 Juan Carlos

CUERPO

fra. 200 2 zapatos
fra. 200 5 calcetines
fra. 200 9 pantalones

lo del bu order si era by order

y tú código se parece al mío excepto a clausula WHERE que cambias c.numero=:numero, y de momento no funciona.


Un saludo...


La franja horaria es GMT +2. Ahora son las 23:51:33.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi