FoxPro/Visual FoxPro - Set filter to (con dos filtros)

 
Vista:

Set filter to (con dos filtros)

Publicado por NL (2 intervenciones) el 24/09/2014 12:17:31
Buenos días,

Tengo dos grids y ambas contienen un campo de fecha y uno de hora. Quiero que al seleccionar un registro en una de las grids, en la otra se muestren únicamente los registros que corresponden con la fecha y hora del registro seleccionado en la primera tabla.

He intentado utilizar set filter to, pero sólo me sirve para una de las variables: o fecha u hora. Al incluir un AND en el set filter to, en la segunda grid se muestran los registros que corresponden con la fecha de la primera -en caso de que el cursor se encuentre sobre la columna fecha- O los registros que corresponden con la hora de la segunda -en caso de que el cursor se encuentre sobre la columna hora-.

Un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Set filter to (con dos filtros)

Publicado por Fidel José (558 intervenciones) el 24/09/2014 15:40:00
1) Sería conveniente, dada la necesidad, utilizar un campo DateTime en lugar de un Campo Date y otro Char

2) Set filter es una opción para tablas locales o cursores.
La estrategia que suele adoptarse es la siguiente:
2.1) Creas en el load del form, un cursor basado en la tabla del segundo grid
SELECT * FROM TalTAbla WHERE .F. INTO CURSOR curGrid2
&& esto se hace para evitar que el grid2 se quede en blanco y se necesite reconfigurar

2.2) En el Init del form (o en un método llamado desde el Init), asocias al grid2 al cursor vacío curGrid2

2.3) En el formulario conviene crear un método que resuelva el tema.
*<metodo_del_form>
ldFEcha=CurGrid1.Fecha
lcHora=CurGrid1.Hora

&& buscas los datos coincidentes
SELECT * FROM TALTABLA WHERE FECHA=ldFecha AND hora=lcHora INTO CURSOR CurPase
&& Quita todos los registros de curGrid2 y le agrega los obtenidos en curPase
SELECT curGRid2
ZAP
APPEND FROM DBF("curPase")
Thisform.grid2.refresh
*</metodo_del_form>

Si el grid1 es AutoCellSelection=.t. y el GRid1 está en el primer orden de tabulación, pones la llamada al método solamente en el AfterRowColChange. De lo contrario, la llamada al método tendrá que estar también en el init del form.

2.4) Para el caso, es muy importante que la tabla fuente del cursor del grid2 tenga un índice por fecha.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar