FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Pesquisa string
Posts: 332
Joined: Thu Nov 17, 2005 09:11 PM
Pesquisa string
Posted: Thu Aug 02, 2007 05:22 PM

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.

Posts: 632
Joined: Tue Dec 12, 2006 07:34 PM
Re: Pesquisa string
Posted: Thu Aug 02, 2007 05:43 PM
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
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Pesquisa string
Posted: Thu Aug 02, 2007 06:47 PM

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
Posts: 332
Joined: Thu Nov 17, 2005 09:11 PM
Pesquisa string
Posted: Thu Aug 02, 2007 07:51 PM
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
Posts: 1074
Joined: Fri Oct 07, 2005 01:56 PM
Pesquisa string
Posted: Thu Aug 02, 2007 08:32 PM
si los datos son fijos puedes hacer indIces parcelados

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
Posts: 332
Joined: Thu Nov 17, 2005 09:11 PM
Pesquisa string
Posted: Thu Aug 02, 2007 10:54 PM
Patricio Avalos Aguirre wrote:si los datos son fijos puedes hacer indIces parcelados

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

Continue the discussion