FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour SCOPE + SET FILTER
Posts: 632
Joined: Thu Jan 19, 2006 10:45 AM
SCOPE + SET FILTER
Posted: Mon Feb 23, 2015 08:30 PM

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 los campos que están filtrados (almenos eso creo). Es cierto o estoy equivocado?

Saludos



Andrés González desde Mallorca
Posts: 817
Joined: Sun Jun 15, 2008 07:47 PM
Re: SCOPE + SET FILTER
Posted: Mon Feb 23, 2015 11:48 PM

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
Posts: 8523
Joined: Tue Dec 20, 2005 07:36 PM
Re: SCOPE + SET FILTER
Posted: Tue Feb 24, 2015 01:24 PM
Andrés, el mejor és usar INDICE TEMPORAL Super rápido para filtros.

Code (fw): Select all Collapse
   INDEX ON CAMPO TAG CAMPO TO TMP MEMORY // ADDITIVE
   OrdSetFocus( 1 )
   GO TOP


Saludos.

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 632
Joined: Thu Jan 19, 2006 10:45 AM
Re: SCOPE + SET FILTER
Posted: Tue Feb 24, 2015 05:13 PM
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 (fw): Select all Collapse
[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
Posts: 150
Joined: Tue Jul 15, 2008 07:12 PM
Re: SCOPE + SET FILTER
Posted: Tue Feb 24, 2015 09:16 PM

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

Continue the discussion