PDA

Ver la Versión Completa : Maestro Detalle con ClientDataset Filtrado


Joser
19-09-2012, 05:40:50
Hola gente, disculpen la molestia pero hay un temita que necesito resolver y no se como.
estoy realizando una aplicacion en delphi 7 con sql server 2005, en mi diseño de db, la tabla maestro la denomino tipomov(tipos de movimientos) con los sig. campos(id,nombre,accion) mientras que en la tabla detalle, denominada movimientos, entre todos los campos contiene el identificador de la tabla tipomov y la fecha de dicho movimiento. mi consulta es la siguiente, es posible realiza el maestro detalle filtrarlo con el campo fecha de la tabla detalle, el rango de la fecha lo obtendria por desicion del usuario.

desde ya muchas gracias.

Saludos!!!

Casimiro Notevi
19-09-2012, 11:11:37
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php)?, gracias por tu colaboración :)

No se entiende bien lo que preguntas, pero si quieres filtrar por fecha, por supuesto que podrás hacerlo.

select ...
from ...
where fecha between :fechainicio and :fechafinal

Joser
19-09-2012, 17:55:07
Perdón si cometí un error... Vamos de nuevo.

Primeramente gracias por responder, en mi formulario tengo dos DBGrid, uno vinculado a la tabla tipodemovimiento y el otro a la tabla movimientos, lo que quiero es que mientras el usuario se mueva por la grilla de los tipos de movimientos, la otra grilla solo muestre los movimientos de ese tipo...hasta esta parte no tengo problemas, funciona correctamente...ahora en la tabla movimientos tengo un campo fecha, y quiero que cuando muestre los movimientos contemple ese campo para que solo me muestre los movimientos de una fecha determinada... esto lo quiero hacer a través de los ClientDataset con su propiedad MasterSouce pero no se como hacer para que contemple el campo fecha cuando hace el maestro detalle... espero que esta vez me haya podido expresar un poco mejor y si no es posible lo que estoy consultando por favor si me pueden decir una manera diferente y/o mas conveniente de hacerlo...

espero me sepan disculpar si no me se expresar, nuevamente gracias

Casimiro Notevi
19-09-2012, 18:20:28
No sé cómo hacerlo con un clientdataset, no lo he usado nunca de esa forma.

En casos de maestro/detalle como el que comentas, siempre he usado un query para el detalle, ejemplo:
Tengo un querydetalle con la sentencia:
select * from tabladetalle where codigomaestro= :codigo
Y cada vez que se cambia de registro en el maestro se ejecuta esa sentencia con el parámetro del código maestro, ejemplo:

querymaestroOnChange
begin
querydetalle.close;
querydetalle.parambyname('codigomaestro').asinteger := querymaestroCodigo.asinteger;
querydetalle.open;
end;


De esa forma, añadir más parámetros es algo sencillo, por ejemplo la fechas que te interesa:
select * from tabladetalle where codigomaestro= :codigo and fecha between :fechainicio and :fechafinal
querymaestroOnChange
begin
querydetalle.close;
querydetalle.parambyname('codigomaestro').asinteger := querymaestroCodigo.asinteger;
querydetalle.parambyname('fechainicio').asdate := datetimepickerinicio.asdate;
querydetalle.parambyname('fechafinal').asdate := datetimepickerfinal.asdate;
querydetalle.open;
end;


De todas formas, seguramente puedes hacerlo con el clientdataset, sólo que yo prefiero querys para hacer eso.

roman
19-09-2012, 18:25:24
No entiendo Casimiro. ¿Estas diciendo que en lugar de usar las relaciones maestro-detalle de los componentes, lo haces manualmente?

// Saludos

Casimiro Notevi
19-09-2012, 18:31:26
No entiendo Casimiro. ¿Estas diciendo que en lugar de usar las relaciones maestro-detalle de los componentes, lo haces manualmente?

Sí, soy así de... bruto :o

No sé, siempre lo hice así, me parece que tengo más control y como nunca he tenido problema con ello, pues sigo haciéndolo así.

Joser
19-09-2012, 18:53:54
ok, gracias por tu respuesta, muy amable...

saludos y éxitos!!!