Page 1 of 1

Pesquisa string

PostPosted: Thu Aug 02, 2007 5:22 pm
by Wanderson
Olá,

Tenho uno campo de dbf caracter 25 chamdo NF que faz parte de una tag
conteúdo = "12345/12121/74844/41414"

Necessito filtrar todos los dados con parte de NF = "74844" existe una maneira senão dbsetfilter() ? Es muy lento.

NF faz parte de una TAG en média 100.000 registros

Salu2.

Re: Pesquisa string

PostPosted: Thu Aug 02, 2007 5:43 pm
by ACC69
Wanderson wrote:Olá,

Tenho uno campo de dbf caracter 25 chamdo NF que faz parte de una tag
conteúdo = "12345/12121/74844/41414"

Necessito filtrar todos los dados con parte de NF = "74844" existe una maneira senão dbsetfilter() ? Es muy lento.

NF faz parte de una TAG en média 100.000 registros

Salu2.


Hola usa la funcion ORDWILDSEEK(), te encontrara la palabra interna en la base de datos, no lo he probado, pero he visto ejemplos como de Jose Murugosa y funciona bien
Saludos
Adrian

PostPosted: Thu Aug 02, 2007 6:47 pm
by Armando
Wanderson:

Tambien te recomiendo la función WildMatch().

Se usa así:

WildMatch("*DISCO",(cFile)->PRD_DES)

Te devuelve .T. si la palabra DISCO se encuentra en cualquier parte del campo PRD_DES.

Prueba a usar la busqueda con y sin asterico para que veas la diferencia.

WildSeek() y WildMatch() son para xHarbour (desconozco si Harbour la tiene).

Saludos

PostPosted: Thu Aug 02, 2007 7:51 pm
by Wanderson
Armando wrote:Wanderson:

Tambien te recomiendo la función WildMatch().

Se usa así:

WildMatch("*DISCO",(cFile)->PRD_DES)

Te devuelve .T. si la palabra DISCO se encuentra en cualquier parte del campo PRD_DES.

Prueba a usar la busqueda con y sin asterico para que veas la diferencia.

WildSeek() y WildMatch() son para xHarbour (desconozco si Harbour la tiene).

Saludos


Armando ficou demasiado lento usando WildMatch ya que necessito leitura en toda tabla, mira lo código

Do While ! oCtoPar:Eof()
oCtoPar:Load()

If WildMatch("*"+alltrim(nrnf),oCtoPar:NOTAS)
AAdd(VETCTOS,oCtoPar:SIGLAPAR+"-"+oCtoPar:CTO)
Endif
oCtoPar:Skip(+1)
Loop
Enddo

Salu2

PostPosted: Thu Aug 02, 2007 8:32 pm
by Patricio Avalos Aguirre
si los datos son fijos puedes hacer indIces parcelados

Code: Select all  Expand view
INDEX ON SUBSTR( CAMPO, 1, 5 )  TAG PASO1
INDEX ON SUBSTR( CAMPO, 7, 5 )  TAG PASO2
INDEX ON SUBSTR( CAMPO, 13, 5 ) TAG PASO3
INDEX ON SUBSTR( CAMPO, 19, 5 ) TAG PASO3

luego puedes usar ordScope

OrdSetFocus( "paso3" )
OrdScope( 0, "74844" )
OrdScope( 1, "74844" )
browse()


espero que te sirva

PostPosted: Thu Aug 02, 2007 10:54 pm
by Wanderson
Patricio Avalos Aguirre wrote:si los datos son fijos puedes hacer indIces parcelados

Code: Select all  Expand view
INDEX ON SUBSTR( CAMPO, 1, 5 )  TAG PASO1
INDEX ON SUBSTR( CAMPO, 7, 5 )  TAG PASO2
INDEX ON SUBSTR( CAMPO, 13, 5 ) TAG PASO3
INDEX ON SUBSTR( CAMPO, 19, 5 ) TAG PASO3

luego puedes usar ordScope

OrdSetFocus( "paso3" )
OrdScope( 0, "74844" )
OrdScope( 1, "74844" )
browse()


espero que te sirva


Patricio es o problema, los datos não são fijos hora tiene "12354/52451/1212" ora tiene apenas "35212" non puedo usar indices parcelados.

Gracias