Page 1 of 1
Pesquisa string
Posted: 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
Posted: 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
Posted: 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
Posted: 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
Posted: Thu Aug 02, 2007 8:32 pm
by Patricio Avalos Aguirre
si los datos son fijos puedes hacer indIces parcelados
Code: Select all
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
Posted: 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
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