SCOPE + SET FILTER

Post Reply
User avatar
Andrés González
Posts: 625
Joined: Thu Jan 19, 2006 10:45 am
Location: Mallorca

SCOPE + SET FILTER

Post by Andrés González »

Estoy realizando pruebas y no logro dar con la rapidez que necesito. Cuando aplico SCOPE la base de datos se limita muy rápido y si luego aplico un SET FILTER en algunas me lo hace rápido y en otras funciona muy lento. Alguien sabe si cuando hago un SET FILTER encima de un SCOPE, lo hace sobre la Base de Datos limitada por el SCOPE o sobre toda la Base de Datos como si no estuviese limitada. El resultado siempre es correcto y lo realizo sobre bases de datos DBF (NTX).

A modo de ejemplo limito con SCOPE a los registros entre dos fechas y luego le pido con SET FILTER que me muestre solo los datos de un usuario. Este ultimo SET FILTER lo hace sobre los datos que se muestran en pantalla (limitados entre fechas) o vuelve a tratar toda la base de datos? En las pruebas va bien pero en ocasiones tarda mucho y en otras va muy rápido. El SCOPE lo aplico cuando cargo la base de datos, por ejemplo dependiendo de un registro de partida de otra base de datos y el filtro lo aplico desde un botón que me coge los datos que escribo con un get y hace el SET FILTER de todos _ que están filtrados (almenos eso creo). Es cierto o estoy equivocado?
Saludos

Andrés González desde Mallorca
xmanuel
Posts: 613
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla
Contact:

Re: SCOPE + SET FILTER

Post by xmanuel »

Primero se procesa el scope sobre el orden activo y luego se evalúa el filtro que se hará sobre cualquier expresión válida. Dependiendo de la complegidad de esa expresión se determinará la velocidad.

Si pudieras pober un ejemplo sería más fácil ayudarte :roll:

Tu vecino...
Manu Expósito
______________________________________________________________________________
Sevilla - Andalucía
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: SCOPE + SET FILTER

Post by karinha »

Andrés, el mejor és usar INDICE TEMPORAL Super rápido para filtros.

Code: Select all

   INDEX ON CAMPO TAG CAMPO TO TMP MEMORY // ADDITIVE
   OrdSetFocus( 1 )
   GO TOP
 
Saludos.
João Santos - São Paulo - Brasil
User avatar
Andrés González
Posts: 625
Joined: Thu Jan 19, 2006 10:45 am
Location: Mallorca

Re: SCOPE + SET FILTER

Post by Andrés González »

Gracias Manu, no puedo poner un ejemplo ya que es difícil de entender ya que todo este proceso lo hago con ficheros externos al programa, del tipo:

Code: Select all

[BASE]
10;50
entrada.dbf
n:
"ENTRADAS"
21;0;23;60
3;0;20;60
[INDEX]
ENFECEN;FECHA;efecen;date()-365;date();
ENTRADA;AÑO.NUM.;STR(EANOEN,4) + STR(ENUMEN,7)
ENREFEX;REF. EXT.;erefex
ENCODEX;COD.EXTER.;ecodex
ENRFOR;REF.ORD.;STR(ENRFOA,2) + STR(ENRFOR,4)
ENSOLIC;ENSOLIC;ESOLIC
[RELA]
ore;orecod;ecodex;.\dat\
asu;asufcd;ecodex + ecodas;.\dat\
El SCOPE me coge el primer y el ultimo registro que quiero ;date()-365;date() si lo pongo en el indice. En los indices que no tienen el cuarto o quito valor no realiza el SCOPE. En este caso limito los valores al ultimo año, o sea, 365 días menos. Luego aplico el filtro y va rapido pero algunas veces se queda pensando "????". Por eso era la pregunta, pero si se aplica sobre 9000 registros mas o menos que es filtrado del SCOPE eso no deberia pasar por muy compleja que sea el FILTER.

Karinha, es una muy buena idea eso de utilizar indices temporales ya que lo que si hace bien HARBOUR es abrir y cerrar ficheros rápido. Me pongo con ello a ver si mejoro. Gracias
Saludos

Andrés González desde Mallorca
postinelli
Posts: 128
Joined: Tue Jul 15, 2008 7:12 pm
Location: Argentina

Re: SCOPE + SET FILTER

Post by postinelli »

y por que no crear un indice de fechas + usuario ?
y luego crear el scope entre fechas y usuario
Post Reply