PDA

Ver la Versión Completa : Maestro Detalle


kainchu3102
07-06-2022, 04:54:13
Buenas noches gente, tengo dos tablas llamadas 1_productos y 2_detalle_productos, mi problema es el siguiente cuando quiera que me muestre los productos con sus respetivos detalles solo me muestran los productos que tienen asignados los detalles, yo necesitaria que me haga una muestra general
las consulta las hago desde dos FDquery. y llamados

FDQProductos, y FDQDet_Productos.

En el FDQDet_productos en Master source = DataSource_productos
Master Fiel = id_productos
indexFielName = id_productos_detalle
asi como fue que las enlace

P/D Mir problema es que como selecciono una fecha desde hasta solo me muestra los productos que tiene detalles asignados de la tabla y yo necesito que me muestro todos los productos tengan o no detalle.

espero haberme hecho entender :(

kuan-yiu
07-06-2022, 10:02:35
¿Cómo obtienes los datos? ¿Cuales son las consultas? Si no lo explicas en detalle no podemos ser concretos con las respuestas.

Lo que se muestra en el maestro depende de la consulta, o el filtrado, que tengas establecido.
Que los detalles de los productos se seleccionen por fecha no implica que deba aplicarse esa selección también a los productos.
Yo estas estructuras maestro-detalle siempre las hago usando tQuerys y no hay problemas en mostrar maestros sin lineas de detalle.

kainchu3102
07-06-2022, 19:35:53
Muchas gracias por responder, Los datos los obtengo con las consulta Select y Betwen fecha desde hasta tanto para FDQproductos y FdqDetalle aparentemente lo estoy haciendo mal podrias pasarme algunos links o algun codigo para poder ver. porfa

Casimiro Notevi
07-06-2022, 21:02:15
Pero pon la consulta sql que estás usando, así se te podrá ayudar.

kainchu3102
08-06-2022, 05:21:57
with DataModule1.FDQTURNOS2 Do
begin
SQL.Clear;
SQL.Add ('SELECT * FROM turnos WHERE fec_tur BETWEEN :FECHADESDE AND :FECHAHASTA ORDER BY fec_tur, hor_tur ASC');
params.ParamByName('FECHADESDE').AsDate := DateTimePicker1.Date;
params.ParamByName('FECHAHASTA').AsDate := DateTimePicker2.Date;

Open();
end;
////////////////////////////////////////////////////////////

with DataModule1.FDQPAGOS2 Do
begin
SQL.Clear;
SQL.Add ('SELECT * FROM pagos WHERE fec_pag BETWEEN :FECHADESDE AND :FECHAHASTA ORDER BY fec_pag, hor_pag ASC');

params.ParamByName('FECHADESDE').AsDate := DateTimePicker1.Date;
params.ParamByName('FECHAHASTA').AsDate := DateTimePicker2.Date;
Open();
end;

DataModule1.FRXREPORT_PAGOS.ShowReport();



Este seria el codigo desde un Boton en Delphi.

kainchu3102
08-06-2022, 05:29:46
Intente de esta dos maneras pero tambien sólo muestra datos si existen registros en ambas tablas relacionados. Si no hay detalle para un determinado producto, ese producto no aparecen.

por ejemplo en turno si no tengo ningun pago no aparece.

SELECT T.*, P.* FROM turnos T
RIGHT JOIN pagos P ON P.id_tur_pag = id_tur
y

SELECT T.*, P.* FROM turnos T
LEFT JOIN pagos P ON P.id_tur_pag = id_tur

Casimiro Notevi
08-06-2022, 08:31:10
Solo una sql, algo como:

select tablamaestro.*, tabladetalle.*
from tablamaestro
left join tabladetalles on (id.tablamaestro=id.tabladetalle)
... resto de condiciones de fechas y orden ...

kuan-yiu
08-06-2022, 08:58:21
Yo en primer lugar comprobaría que la consulta principal muestre lo deseado. Pruébala directamente sobre tu BD, ¿obtienes todos los resultados incluidos los que no tienen lineas de detalle?

A mi este artículo en su momento me ayudó mucho con todo lo relacionado con Maestro-Detalle:
https://edn.embarcadero.com/article/30330