SCOPE + SET FILTER

SCOPE + SET FILTER

Postby Andrés González » Mon Feb 23, 2015 8: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
User avatar
Andrés González
 
Posts: 627
Joined: Thu Jan 19, 2006 10:45 am
Location: Mallorca

Re: SCOPE + SET FILTER

Postby xmanuel » 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
xmanuel
 
Posts: 756
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: SCOPE + SET FILTER

Postby karinha » Tue Feb 24, 2015 1:24 pm

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

Code: Select all  Expand view

   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
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: SCOPE + SET FILTER

Postby Andrés González » Tue Feb 24, 2015 5: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: Select all  Expand view
[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
User avatar
Andrés González
 
Posts: 627
Joined: Thu Jan 19, 2006 10:45 am
Location: Mallorca

Re: SCOPE + SET FILTER

Postby postinelli » Tue Feb 24, 2015 9:16 pm

y por que no crear un indice de fechas + usuario ?
y luego crear el scope entre fechas y usuario
postinelli
 
Posts: 147
Joined: Tue Jul 15, 2008 7:12 pm
Location: Argentina


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 84 guests