FoxPro/Visual FoxPro - Problemas con filtro

   
Vista:

Problemas con filtro

Publicado por Pablo (Argentina) (433 intervenciones) el 07/07/2009 00:50:27
Hola Amigos, les cuento, tengo un problema con un filtrado a una tabla para podes despues imprimir un informe

Trabaja asi, yo mediante una instruccion SQL o Select filtro una tabla entre 2 fecha desde y hasta y los datos eso los meto dentro de un cursor para despues verlos en el grid. Hasta ahi todo barbaro funciona de 10.

El problema se me presenta a la hora de querer imprimir entre las fechas que seleccione, para eso tengo un boton y en el evento click tengo lo siguiente:

SET FILTER TO altashabi.pagada = .T. .AND. altashabi.fecha>=CTOD(thisform.text6.value) .AND. altashabi.fecha <=CTOD(thisform.text7.value)

pero no me da resultado, el filtro no funciona me sale toda la tabla completa, no filtra entre las fecha.

Tiene algo que ver el tema del select, hay que limpiarlo, o no se como explicarme como hacer un set filter to pero al select para que despues ande o como puedo hacer para imprimir dentro de esas fecha,

Que hago mal, o me pueden decir como es

Muchas Gracias

Pablo - Argentina
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

RE:Problemas con filtro

Publicado por Eduardo Daniel (123 intervenciones) el 07/07/2009 01:33:20
Hola Pablo
A simple vista el evento click está bien, quizá l oque no esté bien definidos sean los text6 y text7m a lo mejor el ctod no los está evaluando como fecha.
Otra cosa, yo al menos cuando filtro por rango de fechas, lo pongo primero y luego agrego en este caso el and altashabi.pagada = .T.
Espero haber sido de utilidad
Saludos desde Rosario - Argentina

Eduardo
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

RE:Problemas con filtro

Publicado por alberto (399 intervenciones) el 07/07/2009 06:08:20
usa el generador para los campos de fecha , quisas no lo tome como campo date puede andar por ahi el error, mira como lo hago yo y me funciona bien

select guarderia
go top
set filter to guarderia.fecha_ing >= thisform.text1.value .and. guarderia.fecha_ing <= thisform.text2.value
go top
thisform.grid1.refresh

tambien puedes usar esto en el set filter

BETWEEN (thisform.tex1.value,thisform.text2.value)

saludos
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
Imágen de perfil de Mauricio

Problemas con filtro

Publicado por Mauricio (1368 intervenciones) el 07/07/2009 14:46:13
Pablo, esto ya fue contestado hace tiempo, pero bueno......
En primer lugar si el SELECT haces el filtro, para que luego haces de nuevo otro filtro?
fec_ini = CTOD(THISFORM.text7.value)
fec_fin = CTOD(THISFORM.text5.value)
*
SELECT * FROM mitabla WHERE pagada AND BETWEEN(fecha, fec_ini, fec_fin)
brow
* Esto ultimo para comprobar que esta filtrando los datos deseados luego lo quitas y agregas al SELECT el destino del QUERY a donde quieras...
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

RE:Problemas con filtro

Publicado por Pablo (Argentina) (433 intervenciones) el 07/07/2009 16:16:54
Hola Amigos, gracias a todos por sus respuestas, ya lo solucione, estaba mal puesto un comando antes del set filter to por eso no me funcionaba. Igual tengo en cuenta sus opiniones.

Gracias a todos

Pablo - Argentina
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

RE:Problemas con filtro

Publicado por Martín (16 intervenciones) el 07/07/2009 19:26:40
Pablo:

Te tiro algo como norma, que me parece que Mauricio apuntaba a eso.

El SET FILTER es un comando endemoniado que es mejor borrarlo de nuestras mentes, jaja.

O sea, entendamos que el comando SET FILTER viene desde el primer dBaseII (el primer lenguaje xBase de la historia, desarrollado para CP/M), en el cual no había índices, no podías abrir más de dos tablas simultáneamente, y todo un montón de otras desventajas. En ese entonces, el SET FILTER era muy útil, y lo digo porque yo programé en ese dBaseII, ja.

Hoy en día, con el comando SELECT, el SET FILTER no solo es innecesario, sino que además puede ser molesto, ya que basta con que cambies en un registro uno de los campos que está involucrado en el filtro, para que el registro te desaparezca de la vista tan pronto hagas un browse... pero no antes, por ejemplo. Ni hablar de que en una tabla con muchos registros, el SET FILTER se hace pesadísimo, y eso se nota cuando uno se va desplazando en un browse de un registro a otro (pensemos que pueden haber 54.729 registros filtrados entre el registro que estamos viendo y el siguiente que estamos viendo...)

En modo desarrollo es recomendable no utilizar nunca SET FILTER. Siempre hay mejores maneras de lograrlo con un SELECT, y la diferencia en cuanto a tiempo de ejecución entre el SET FILTER y el SELECT es ABISMAL.

Abrazos,

Martín.
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

RE:Problemas con filtro

Publicado por Pablo (Argentina) (433 intervenciones) el 07/07/2009 22:47:54
Muchas Gracias Martin por tu consejo, pasa que recien ahora hace muy poco empeze a usar las instrucciones SQL en la cual uso el select y si la verdad se nota la diferencia de velocidad es ABISMAL como vos decis.

Mi problema era que yo usaba un Select para filtrar unos datos entre fechasy despues ahi mismo hacia un report form y no se porque no me filtra entre las fecha y es por eso que estoy usando el set filter

o sea le hago un select a una tabla y la vuelco al cursor del grid para ver los datos, hasta ahi todo fenomeno pero despues eso mismos datos los quiero imprimir con el report form y obvio que en el report form no tengo el cursor que no se si ese es el problema, yo en el report form tengo la tabla. Que sea por eso que no funciona el filtrado.

Si leistes en las notas anteriores mi problema por ahi podes decirme porque, lo de mauricio lo probe y si funciona pero como mando eso al report?

Muchas Gracias y me sirve tu consejo

Pablo - Argentina
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
Imágen de perfil de Mauricio

Problemas con filtro

Publicado por Mauricio (1368 intervenciones) el 08/07/2009 01:27:29
Pablo, tu problema es que te perdes tan sencillo que da miedo, tienes la respuesta pero tambien tienes miedo a probar y no eres de las personas que le buscan el error hasta encontrarlo, lo mas facil es trasladarlo al foro y de esa manera nunca se aprende nada.
En el grid deberia de ser el resultado del SELECT y tienes el de la tabla, entonces Pablo?
*----
SELECT * FROM mitabla WHERE pagada AND BETWEEN(fecha, fec_ini, fec_fin)
INTO CURSOR resultado
* Esto ultimo para comprobar que esta filtrando los datos deseados luego lo quitas y agregas al SELECT el destino del QUERY a donde quieras...
Resultado sera el que usaras en el GRID........
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

RE:Problemas con filtro

Publicado por Martín (16 intervenciones) el 08/07/2009 16:34:35
Ahora te entiendo, Pablo. Lo que vos decís es que en el entorno de datos del REPORT FORM tenés la tabla, y no el cursor.

Claro, en ese caso, por más SELECT que hagas, la tabla permanece inmutable.

En el caso de los reportes, yo lo que hago es crear temporarios, pero que sean tablas, no cursores. Y esa tabla es la que pongo en el entorno de datos del reporte. O sea:

lcTemporario = 'c:/temp/Mi_Tabla_A_Listar.DBF'

SELECT * FROM mitabla WHERE pagada AND BETWEEN(fecha, fec_ini, fec_fin)
INTO DBF (lcTemporario)

Una vez que tenés el temporario en el entorno de datos del reporte, tenés cero problema para efectuar el listado, y que te muestre lo que vos querés.

Abrazo,

Martín.
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

RE:Problemas con filtro

Publicado por Eduardo Daniel (123 intervenciones) el 09/07/2009 01:56:00
Estuve siguiendo los hilos y me surgen dos cosas, una pregunta y una opinión

Opinión: Yo uso cursores para el report form, porque antes usaba tablas temporarias pero hay que borrarlas despues de cada repo, y packearlas, para lo cual hay que abrirlas en modo exclusivo y todo eso es engorroso. Con el cursor, se crea, se agrega información, se imprime y lsito, desaparace.

Pregunta: Se puede usar el SELECT en tablas libres, sin que formen parte de una Base de datos?

Gracias

Eduardo
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
Imágen de perfil de Mauricio

Problemas con filtro

Publicado por Mauricio (1368 intervenciones) el 09/07/2009 02:53:33
Cuando ejecutas un SELECT con tablas libres, si se puede pero te presenta un cuadro en el cual escojes la tabla libre, nada mas pero si se puede.....
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