FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour filtros con scopes..
Posts: 845
Joined: Sun Oct 09, 2005 05:36 PM
filtros con scopes..
Posted: Sat Oct 21, 2006 03:42 PM

tengo una dbf con mas de 300,000 registros y quiero hacer filtros por muchos campos, probe el setfilter pero es muy lento, he hecho scopes con el campo como llave y va muy bien, mi pregunta es:
es necesario tener el indice por el scope que se necesita para hacer el filtro? o que me recomiendan para hacer multi-filtros rapidos?
salu2
gracias
Paco

____________________

Paco
Posts: 840
Joined: Thu Oct 13, 2005 07:05 PM
filtros con scopes..
Posted: Sat Oct 21, 2006 06:04 PM

Hay 2 formas la primera es aplicar el SCOPE y luego un filtro sobre el scope, lo cual resulta mucho mas rapido porque hay que filtrar menos datos, pero de entrada, siempre es necesario que exista un indice para poder "scopear".

Lo que yo hago, es hacer multiples indices con multiples llaves para hacer "multi-filtros" como tu los llamas, ya que capacidad de un CDX es de hasta 50 indices por archivo, tengo DBFs que tiene mas de 35 ordenes en cada CDX, basado en combiancines de campos y clauslas restrictivias (INDEX ON campo+otrocampo+ campo TAG nombre FOR condicion)y funcionan bastante bien. Eso cuando tengo que trabajar con CDX puros y duros.

Cuando trabajas con ADS puedes utilizar Queries de SQL que funcionan alucinamente bien, o bien los famoso AOF (Advantage Optimized Filters) que son filtros sumamente eficientes y super rapidos basados en la funcion DBSETFILTER

Saludos

R.F.
Posts: 845
Joined: Sun Oct 09, 2005 05:36 PM
filtros con scopes..
Posted: Sat Oct 21, 2006 11:36 PM

bien explicado rene, a trabajar con muchos indices...
salu2
paco

____________________

Paco
Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM
filtros con scopes..
Posted: Sun Oct 22, 2006 09:14 AM

Yo hago algo parecido, monto unos cuantos indices. Cuando voy a filtrar, segun los datos que me han introducido elijo el filtro que creo que me va a devolver menor numero de registros despues de hacer un scope.( si tengo indice por fecha e indice por cliente, si quieren filtrar por cliente y fecha, cojo scope de cliente que casi seguro es mas pequeno que por fecha), y sobre el resultado si me quedan campos para filtrar, creo un indice custom. Con el indice custom siempre sera mas rapido para manipular el resultado(browse, listados,...) que no con un filtro. Un filtro evalua el codeblock de filtro por cada registro, con el indice custom, solo una vez al crearlo.
Cada inidice adicional, hace que sea mas lento los procesos de acutlizacion de la tabla, aunque CDX es muy rapido, lo importante es encontrar un buen equilibrio(como todo en la vida).
Esa es la opinion de un novato(cada dia intento aprender mas, pero todavia me queda mucho).

Saludos desde Mallorca
Biel Maim贸
http://bielsys.blogspot.com/
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
filtros con scopes..
Posted: Mon Oct 23, 2006 12:21 AM

Paco:

Por no dejar podr铆as probar sin tener que hacer ningun SCOPE ni FILTER, por ejemplo si quiero leer el detalle de una factura cuyo 铆ndice esta formado por dos campos DET_FAC + DET_PRO (N煤mero de factura y c贸digo del producto facturado) hago lo siguiente:

(cDetFac)->(DBSEEK((cHdrFac)HDR_FAC))
// El puntero se coloca en el primer registro del detalle de la factura
DO WHILE (cDetFac)->(! EOF()) .AND.;
(cDetFac)->DET_FAC == (cHdrFac)->HDR_FAC
.....
..... // Resto del c贸digo para listar el detalle
.....
(cDetFac)->(DBSKIP())
ENDDO

Evidentemente esto no te libera de tener los TAG necesarios, pero como bien explic贸 el Master Ren茅, eso no es mayor problema.

Un Abrazo, Armando

SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero

Continue the discussion