Compañeros,
En una DBF-CDX con aprox 1.000.000 registro, necesito filtrar según parte del contenido del campo "NOMBRE".
La tabla está indexada por NOMBRE y necesito que me filtre todos aquellos registros que contengan la palabra "GARCIA" en el campo Nombre.
¿ Como se haría con SCOPE ?
Mil gracias.
LORENZO.
ORDSCOPE y DBF grandes
-
- Posts: 128
- Joined: Tue Jul 15, 2008 7:12 pm
- Location: Argentina
Re: ORDSCOPE y DBF grandes
el scope yo lo uso siempre y es rapidisimo
el tema es que no filtra por "contenga"
sólo funciona por la clave del indice activo
en tu caso en una base indexada por Nombre te va a filtrar los que comiencen con GARCIA, pero no si dice JUAN GARCIA
se entiende?
así lo hago yo
USE DBF INDEX DBF
OrdScope(0,"GARCIA")
OrdScope(1,"GARCIA")
browse()
te deberian salir sólo los registros que comiencen con GARCIA
el tema es que no filtra por "contenga"
sólo funciona por la clave del indice activo
en tu caso en una base indexada por Nombre te va a filtrar los que comiencen con GARCIA, pero no si dice JUAN GARCIA
se entiende?
así lo hago yo
USE DBF INDEX DBF
OrdScope(0,"GARCIA")
OrdScope(1,"GARCIA")
browse()
te deberian salir sólo los registros que comiencen con GARCIA
Re: ORDSCOPE y DBF grandes
El scope no te sirve para lo que pretendes, prueba asi:
http://xthefull.blogspot.com.es/2014/02 ... er-to.html
http://xthefull.blogspot.com.es/2014/02 ... er-to.html
Re: ORDSCOPE y DBF grandes
Aquí un ejemplo funcional del aporte de TheFull
Saludos,
Adhemar
Code: Select all
#include "fivewin.ch"
REQUEST DBFCDX
Function main()
RddSetDefault( "DBFCDX" )
cPath:="CUSTOMER.DBF"
USE (cPath) new
cNombre:="harry" //cambiar el nombre
FastFilter( "*"+ Upper( cNombre ), 1 ) //El 1 para indicar el numero del Indice
dbGotop()
Browse()
return nil
Function FastFilter( cCad, nOrder )
Local nIndice := OrdNumber()
Set order to nOrder
INDEX ON &(IndexKey()) TAG _TEMP_ TO tHarbourt CUSTOM ADDITIVE MEMORY
Set order to nOrder
dbGotop()
Do While OrdWildSeek( cCad, .T. )
OrdKeyAdd( "_TEMP_" )
Enddo
OrdSetFocus( "_TEMP_" )
Return nIndice
Adhemar
Saludos,
Adhemar C.
Adhemar C.
- FranciscoA
- Posts: 1964
- Joined: Fri Jul 18, 2008 1:24 am
- Location: Chinandega, Nicaragua, C.A.
Re: ORDSCOPE y DBF grandes
Gracias, Adhemar por postearlo. Y a TheFull por compartir su codigo.
Francisco J. Alegría P.
Chinandega, Nicaragua.
Fwxh1204-MySql-TMySql
Chinandega, Nicaragua.
Fwxh1204-MySql-TMySql
Re: ORDSCOPE y DBF grandes
Hola, buenos dias a todos, desde Tequila, Jalisco, México.
Estaba investigando porque el ORDKEYCOUNT() ya no me regresaba el numero correcto de renglones de mi tabla, cuando hacia SCOPE y me topo con este post, y me intereso muchisimo..
Ya lo probe y el mejoramiento de la velocidad de la consulta es enorme, cerca de 2 minutos menos que con mi consulta actual, ahora mi duda es como hacer por ejemplo cuando usamos rangos para la consulta...
En mi codigo actual hacia esto
y con la modificacion siguiendo el ejemplo hago esto
Sin embargo notaran que solo uso el rango inicial, pero no el final y seria interesante el saber como integrarlo...
Agradezco de antemano sus valiosas aportaciones en especial al master TheFull y aCuellar, por entregarnos digerido el ejemplo...
Saludos
Estaba investigando porque el ORDKEYCOUNT() ya no me regresaba el numero correcto de renglones de mi tabla, cuando hacia SCOPE y me topo con este post, y me intereso muchisimo..
Ya lo probe y el mejoramiento de la velocidad de la consulta es enorme, cerca de 2 minutos menos que con mi consulta actual, ahora mi duda es como hacer por ejemplo cuando usamos rangos para la consulta...
En mi codigo actual hacia esto
Code: Select all
SELECT ingre; ingre->(ORDSETFOCUS("ingre4dx"))
cScope0 := mPromo1 + mDesa1 + DTOS( mFech1 ) + STR( mNumero1, 1 )
cScope1 := mPromo2 + mDesa2 + DTOS( mFech2 ) + STR( mNumero2, 1 )
ingre->( ORDSCOPE( 0, cScope0 ) )
ingre->( ORDSCOPE( 1, cScope1 ) )
ingre->( DBGOTOP() )
Code: Select all
SELECT ingre; ingre->(ORDSETFOCUS("ingre5dx"))
ingre->( FastFilter( "*" + DTOS( mFech1 ) + mDesa1 + STR( mNumero1, 1 ), 5 ) ) //El 1 para indicar el numero del Indice
Agradezco de antemano sus valiosas aportaciones en especial al master TheFull y aCuellar, por entregarnos digerido el ejemplo...
Saludos
Luis Fernando Rubio Rubio