Pesquisa string

Post Reply
Wanderson
Posts: 332
Joined: Thu Nov 17, 2005 9:11 pm

Pesquisa string

Post 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.
ACC69
Posts: 619
Joined: Tue Dec 12, 2006 7:34 pm
Contact:

Re: Pesquisa string

Post 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
User avatar
Armando
Posts: 2479
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México
Contact:

Post 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
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
Wanderson
Posts: 332
Joined: Thu Nov 17, 2005 9:11 pm

Post 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
User avatar
Patricio Avalos Aguirre
Posts: 1028
Joined: Fri Oct 07, 2005 1:56 pm
Location: La Serena, Chile
Contact:

Post 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
Saludos
Patricio

__________________________________________________________________
Version: Harbour 3.2.0dev (r1307082134),Compiler: Borland C++ 5.8.2 (32-bit)
PCode version: 0.3, FWH 13.2
http://www.sialm.cl
Wanderson
Posts: 332
Joined: Thu Nov 17, 2005 9:11 pm

Post 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
Post Reply