Problema con filtros
- José Luis Sánchez
- Posts: 484
- Joined: Thu Oct 13, 2005 9:23 am
- Location: Novelda - Alicante - España
- Contact:
Problema con filtros
Hola a todos:
Tengo un problema con los filtros de un DBF en un programa, creo un filtro de esta manera:
CO->( dbSetFilter( {|| Upper( CO->CoFila ) == Upper( cFila ) } ) )
y a continuación ? CO->(DbFilter()) me devuelve la cadena vacía.
Necesito controlar por programa cuando tengo un filtro sobre una tabla, porque hay situaciones que necesito quitar/restaurar el filtro, pero dbfilter() siempre me retorna la cadena vacía.
Lo curioso es que el filtro funciona bien, me hace el fitrado correctamente.
¿ Alguna idea de porqué me pasa esto ?
Saludos,
José Luis
Tengo un problema con los filtros de un DBF en un programa, creo un filtro de esta manera:
CO->( dbSetFilter( {|| Upper( CO->CoFila ) == Upper( cFila ) } ) )
y a continuación ? CO->(DbFilter()) me devuelve la cadena vacía.
Necesito controlar por programa cuando tengo un filtro sobre una tabla, porque hay situaciones que necesito quitar/restaurar el filtro, pero dbfilter() siempre me retorna la cadena vacía.
Lo curioso es que el filtro funciona bien, me hace el fitrado correctamente.
¿ Alguna idea de porqué me pasa esto ?
Saludos,
José Luis
Re: Problema con filtros
¿Por qué no usas indice temporal?
comando:
MEMORY / TEMPORARY
INDEX ON CLAVE TAG CLAVE MEMORY
Ó
INDEX ON CLAVE TAG CLAVE TEMPORARY
Saludos.
comando:
MEMORY / TEMPORARY
INDEX ON CLAVE TAG CLAVE MEMORY
Ó
INDEX ON CLAVE TAG CLAVE TEMPORARY
Saludos.
João Santos - São Paulo - Brasil
Re: Problema con filtros
José Luis, prueba añadiendo el literal del filtro, para que pueda devolverte la misma cadena al preguntar por el filtro activo
Un saludoCO->( dbSetFilter( {|| Upper( CO->CoFila ) == Upper( cFila ) } , "Upper( CO->CoFila ) == Upper( cFila )" ) )
- José Luis Sánchez
- Posts: 484
- Joined: Thu Oct 13, 2005 9:23 am
- Location: Novelda - Alicante - España
- Contact:
Re: Problema con filtros
Muchas gracias, eso es lo que buscaba. El caso es que leí la documentación de dbsetfilter y no me di cuenta del segundo parámetro.
Saludos,
Saludos,
- José Luis Sánchez
- Posts: 484
- Joined: Thu Oct 13, 2005 9:23 am
- Location: Novelda - Alicante - España
- Contact:
Re: Problema con filtros
Ahora estoy con el tema de guardar/restaurar un filtro sobre una tabla. La manera en que lo estoy haciendo es llamar a una función que me devuelva el codeblock del filtro y guardar en el 2º campo del dbsetfilter una cadena que me permita luego volver a generar el filtro. Algo así:
¿ Hay alguna manera más fácil de hacerlo ? El caso es que tengo una opción en que se puede establecer 12 filtros distintos sobre un mantenimiento, y luego tengo que analizar la cadena que guarda el filtro para poder llamar a cada función que devuelve su codeblock, y me parece algo enrevesado.
Saludos,
José Luis
Code: Select all
cFilter :="bCoFilter2;"+cFila
CO->( dbSetFilter( bCoFilter2(cFila), cFilter ))
...
FUNCTION bCoFilter2(cFila)
Return {|| Upper( CO->CoFila ) == Upper( cFila ) }
Saludos,
José Luis
- Joaquim Ferrer
- Posts: 58
- Joined: Sat Jan 14, 2012 3:46 pm
- Location: Barcelona
Re: Problema con filtros
José Luís
Puedes definir una macro de este estilo :
Mantienes en una tabla la expresión del filtro en un string y ya cuando lo creas lo tienes facil
Creo recordar que dbsetfilter funciona sobre el area activa (tienes que hacer antes un select() , por lo que el alias delante creo no funcionará
Saludos
Puedes definir una macro de este estilo :
Code: Select all
#define CTOBLOCK(e) &("{||"+e+"}")
Code: Select all
cFilter := 'Upper( CO->CoFila ) == Upper( cFila )'
dbSetFilter( CTOBLOCK(cFilter), cFilter )
Saludos
Fivewinner desde 1.9, programador PHP y Javascript, HTML5 evangelista
- José Luis Sánchez
- Posts: 484
- Joined: Thu Oct 13, 2005 9:23 am
- Location: Novelda - Alicante - España
- Contact:
Re: Problema con filtros
Muchas gracias Quim !!!
- nageswaragunupudi
- Posts: 8017
- Joined: Sun Nov 19, 2006 5:22 am
- Location: India
- Contact:
Re: Problema con filtros
Macro compilation fails when the expression uses local variables.
Test:
Runtime Error
So, the variables has to declared as Private.
Even then saving as
and later re-applying the filter in a different context with
fails if the variable used is out of scope.
Test:
Code: Select all
#include "fivewin.ch"
REQUEST DBFCDX
#define CTOBLOCK( e ) &( "{||" + e + "}" )
function Main()
local cValue := "NY"
local cFilter := "UPPER( FIELD->CODE ) == UPPER( cValue )"
USE STATES NEW VIA "DBFCDX"
STATES->( DBSETFILTER( CTOBLOCK( cFilter ), cFilter ) )
STATES->( DBGOTOP() )
return nil
Code: Select all
Error description: Error BASE/1003 Variable does not exist: CVALUE
Stack Calls
===========
Called from: F.prg => (b)MAIN( 14 )
Called from: => DBGOTOP( 0 )
Called from: F.prg => MAIN( 15 )
Even then saving as
Code: Select all
cFilter := (cAlias)->( DBFILTER() )
Code: Select all
(cAlias)->( DBSETFILTER( CTOBLOCK( cFilter ), cFilter ) )
Regards
G. N. Rao.
Hyderabad, India
G. N. Rao.
Hyderabad, India
Re: Problema con filtros
José Luis.
Si tienes un indice por el campo CO->CoFila es más efectivo los scopes.
Todas las RDD lo tienen, incluso los NTX!!!
Si tienes un indice por el campo CO->CoFila es más efectivo los scopes.
Todas las RDD lo tienen, incluso los NTX!!!
______________________________________________________________________________
Sevilla - Andalucía
Sevilla - Andalucía