busca por palavra
Moderador: Moderadores
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
É isso que muitas vezes desencoraja a migração Clipper x xHarbour, pois nem todas as LIBs que eu utilizava podem ser usadas no xHarbour. Mas isso é também outra questão, que inclusive ocorre com outras ferramentas. Vale de referência a sua menção do xHarbour, mas por enquanto estou me "limitando" a Clipper.
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
- alaminojunior
- Colaborador

- Mensagens: 1717
- Registrado em: 16 Dez 2005 21:26
- Localização: Ubatuba - SP
Eis aí a função que uso num sistema Clipper 5.2 e funciona legalzinha.
Como os colegas poderão ver, ela não depende de indice.
Se satisfizer a condição, ela vai passando por entre os registros.
Seria muito mais interessante, claro, se o resultado dela fosse jogado num outro banco temporario, para ser mostrado num tbrowse, ( exatamente o que estou tentando, imagine ter de ir passando por n registros ) mas por enquanto é isso.
Como os colegas poderão ver, ela não depende de indice.
Se satisfizer a condição, ela vai passando por entre os registros.
Seria muito mais interessante, claro, se o resultado dela fosse jogado num outro banco temporario, para ser mostrado num tbrowse, ( exatamente o que estou tentando, imagine ter de ir passando por n registros ) mas por enquanto é isso.
Código: Selecionar todos
case tempo = K_F6
dbgotop()
incr:= space(20)
h1:=SaveScreen(00,00,24,79)
DbgShadow(05,42,09,76)
@ 05,42,09,76 box B_SINGLE + space(1) colo "g+/g"
@ 06,43 say padc("ExpressÆo p/ pesquisar",32) colo "w+/g"
@ 08,49 get incr colo "gr+/n*" pict "@!"
set curs on
read
set curs off
do while !eof()
if busca(@incr)
@ 05,42,09,76 box B_SINGLE + space(1) colo "r+/r"
@ 07,43 say padc(chr(25)+ " p/ avan‡ar ESC - Sa¡da",32)
tone(333,.1)
inkey(0)
if lastkey() = 24
skip
elseif lastkey() = 27
exit
endif
else
skip
endif
enddo
@ 05,42,09,76 box B_SINGLE + space(1) colo "b+/b"
@ 07,43 say padc("Final da Pesquisa",32) colo "w+/b"
tone(44,6)
RestScreen(00,00,24,79,h1)
cTb3:RefreshAll()
loopCódigo: Selecionar todos
Function Busca(arg)
if at(alltrim(arg),clinom) > 0
Destaca(cTb3)
cTb3:stabilize()
MostraC()
return .t.
else
return .f.
endifCompilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
MySQL c/ SQLRDD
HwGui + GTWVG
- Luciano Bonfim
- Usuário Nível 3

- Mensagens: 414
- Registrado em: 23 Ago 2007 09:34
- Localização: Rio de Janeiro / São Paulo
- Contato:
Eu faço assim, porem jogando para um vetor e depois mostrando ele numa funçaö que fiz que dá um TBROWSE num vetor
Código: Selecionar todos
mtamanho=25
hfil_ope1 = '='
hfil_cod1 = space(mtamanho)
hcolor = SETCOLOR(cor[5])
@ mlin_sup-1,mcol_sup+01 SAY '['+SPACE(30)+']'
@ mlin_sup-1,mcol_sup+02 get hfil_ope1 pict '!' valid critletra(hfil_ope1,'=#',['=' - Igual ou '#' - Diferente])
@ mlin_sup-1,mcol_sup+04 get hfil_cod1 pict '@!'
SETCOLOR(hcolor)
ex_read()
set key K_TAB to udf_tab
if lastkey()=K_ESC
RESTSCREEN(mlin_sup-1,mcol_sup,mlin_sup-1,mcol_inf,buffer)
return(1)
endif
private v_fil:={},v_fil1:={}
for x=1 to mtamanho
xpedaco=substr(hfil_cod1,x,1)
if !empty(xpedaco)
aadd(v_fil1,{x,xpedaco})
endif
next
aviso('Filtrando Registros...')
xreg_ant=recno()
select DOCUMENT
go top
do while !eof()
if pode_filtro(substr(doc_origem,1,mtamanho),hfil_ope1,hfil_cod1,v_fil1)
aadd(v_fil,{cod_doc,nr_rev,titulo,titulo2,titulo3,cod_end,cod_end3,cod_end2})
endif
skip
enddo
private xhead[8],xwidt[8],xmypi[8],eyerow
xhead[1]='Codigo'
xwidt[1]=15
xmypi[1]=memvar->mask_doc
xhead[2]='Rev'
xwidt[2]=03
xmypi[2]='@!'
xhead[3]='Titulo'
xwidt[3]=50
xmypi[3]='@!'
xhead[4]='Titulo - Continuacao'
xwidt[4]=50
xmypi[4]='@X'
xhead[5]='Titulo - Continuacao'
xwidt[5]=50
xmypi[5]='@X'
xhead[6]='Original'
xwidt[6]=len(mask_ende)-3
xmypi[6]=mask_ende
xhead[7]='Copial'
xwidt[7]=len(mask_ende)-3
xmypi[7]=mask_ende
xhead[8]='Digital'
xwidt[8]=len(mask_ende)-3
xmypi[8]=mask_ende
mexc=abrowse(.t.,.f.,.t.,.f.,.f.,"",1,v_fil,mlin_sup,mcol_sup,22,78,xhead,xwidt,xmypi,{|t,l,c| gt_help(t,l,c)},,,.t.,,,{K_F6})
if mexc=K_ESC
go xreg_ant
RESTSCREEN(mlin_sup-1,mcol_sup,mlin_sup-1,mcol_inf,buffer)
return(1)
else
set order to 1
seek v_fil[eyerow,1]
set order to mind_old
RESTSCREEN(mlin_sup-1,mcol_sup,mlin_sup-1,mcol_inf,buffer)
return(1)
endif
function pode_filtro
para mcampo,moperador,mfiltro,v_fil
private mpode:=.t.,x
if !empty(mfiltro)
mpode=iif(moperador='=',.t.,.f.)
for x=1 to len(v_fil)
if substr(mcampo,v_fil[x,1],1)#v_fil[x,2]
mpode=iif(moperador='=',.f.,.t.)
exit
endif
next
endif
return(mpode)
Muito Obrigado,
Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Sim, isso mesmo assim como disse o colega Luciano Bonfim. Mas o exemplo que tem na seção downloads do fórum (a que mencionei) tem a pesquisa por TBROWSE.alaminojunior escreveu:Seria muito mais interessante, claro, se o resultado dela fosse jogado num outro banco temporario, para ser mostrado num tbrowse, ( exatamente o que estou tentando, imagine ter de ir passando por n registros )
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Re: busca por palavra
Evaldo,
Você quer exibir o resultado num dbedit?
Se for eu tenho uma função pronta para isso.
[]´s
Você quer exibir o resultado num dbedit?
Se for eu tenho uma função pronta para isso.
[]´s
evaldo escreveu:Ola pessoal, estou precisando de um busca por palavra ex.: qdo digitar joao aparecer todos joao.
antonio joao
joao carlos
obrigado
Mesmo esquema do SET FILTER e LOCATE: ir de registro a registro. Isso num arquivo grande fica uma lesma manca. Daí a grande vantagem de indexar e usar a função sx_WildSeek(). Mesmo que a chave de índice seja utilizada apenas e tão somente para uma busca num único ponto do programa. O índice é compactado mesmo.alaminojunior escreveu:Eis aí a função que uso num sistema Clipper 5.2 e funciona legalzinha.
Como os colegas poderão ver, ela não depende de indice.
Isso, claro, pra quem usa a SIX.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
E um detalhe importante: como eu já disse antes numa outra thread, até pode ser utilizado o SET FILTER ou LOCATE num DBF gigantesco, mas desde que se faça o DBF menor. Isso se faz com o uso de SCOPE. Aí sim, pode-se usar um filtro qualquer sem medo de perda de velocidade.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
- alaminojunior
- Colaborador

- Mensagens: 1717
- Registrado em: 16 Dez 2005 21:26
- Localização: Ubatuba - SP
Claro que se for possível usar a Six, não pense duas vezes !
Agora no meu caso como estou preso a certos detalhes, foi a solução.
Como mencionei mais acima, implementei a função para jogar num banco temporário e mostrar num tbrowse, ficou muito boa.
Detalhe: No banco temporario, de um DbSeek() antes do Set Filter.
Agora no meu caso como estou preso a certos detalhes, foi a solução.
Como mencionei mais acima, implementei a função para jogar num banco temporário e mostrar num tbrowse, ficou muito boa.
Detalhe: No banco temporario, de um DbSeek() antes do Set Filter.
Código: Selecionar todos
Function Busca(arg)
dbgotop()
do while !eof()
if at(alltrim(arg),clinom) > 0
cdtmp000->(dbappend())
if neterr()
loop
else
@ 08,65 say clicod pict "99999-9" colo "n/g"
repl cdtmp000->tmpcod with clicod
repl cdtmp000->tmpnom with clinom
repl cdtmp000->tmpcid with clicid
repl cdtmp000->tmpusu with netname()
cdtmp000->(dbcommit())
cdtmp000->(dbunlock())
skip
endif
else
skip
endif
enddo
return cdtmp000->(reccount())Código: Selecionar todos
Function Brow_Incr
Private local1:=select(),local2:=indexord(),local3:=savescreen(06,03,24,78)
select cdtmp000
set order to 1
dbseek(trim(netname()))
set filter to tmpusu = trim(netname())
set color to "n/w","gr+/b",,,"g/w"
Win(06,03,22,76,"Consulta por parte do nome","w+/bg","bg/w")
@ 21,04 say padc("[ ENTER ] - Visualiza os dados do cliente.",71) colo "r/w"
vCon_ = "Cliente Cidade"
pTb4:= TbColumnne(Vcon_, { || tmpnom + " " + tmpcid })
pTb3:= TbrowseDB(07,04,20,75)
pTb3:HeadSep:= "Ä"
pTb3:ColorSpec:= "n/w,gr+/b,n+/w,n+/n,n/w"
pTb4:DefColor:= {5}
pTb3:AddColumn(pTb4)
Do While .t.
Do While !pTb3:Stabilize()
Enddo
tempo:= Inkey(180)
Do Case
Case Tempo = 0
Protect()
pTb3:RefreshAll()
loop
Case Tempo = K_DOWN
pTb3:Down()
Loop
Case Tempo = K_UP
pTb3:Up()
Loop
Case Tempo = K_PGUP
pTb3:PageUp()
pTb3:RefreshAll()
Loop
Case Tempo = K_PGDN
pTb3:PageDown()
pTb3:RefreshAll()
Loop
Case Tempo = K_ESC
_rest(06,03,24,78,local3,9)
set filter to
dbseek(trim(netname()))
do while !eof() .and. trim(tmpusu) = trim(netname())
bloq(1)
dele
unlock
skip
enddo
commit
select(local1)
set order to local2
return
case lastkey() = 13
kkey:= tmpcod
set filter to
dbseek(trim(netname()))
do while !eof() .and. trim(tmpusu) = trim(netname())
bloq(1)
dele
unlock
skip
enddo
commit
_rest(06,03,24,78,local3,9)
select(local1)
set order to 1
return kkey
endcase
enddoCompilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
MySQL c/ SQLRDD
HwGui + GTWVG
Nenhuma chance de passar a usar a SIX. Pouco precisará ser alterado, já que os comandos são automaticamente convertidos por CH.Agora no meu caso como estou preso a certos detalhes, foi a solução.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
- JAIR RANGEL
- Usuário Nível 3

- Mensagens: 178
- Registrado em: 19 Jul 2005 16:01
- Localização: RIO DE JANEIRO
- Contato:
busca por palavra
Olá, Pessoal !
Existe na HMG uma função semelhante a sx_wildseek() ?
Utilizo dbfcdx. O cadastro de Produtos é muito grande para utilizar SET FILTER ou LOCATE.
Ler todo o arquivo para selecionar string dentro do campo nome, também ficaria um processo lento.
Utilizo tabelas DBF.
Que a força esteja com todos voces !!
Existe na HMG uma função semelhante a sx_wildseek() ?
Utilizo dbfcdx. O cadastro de Produtos é muito grande para utilizar SET FILTER ou LOCATE.
Ler todo o arquivo para selecionar string dentro do campo nome, também ficaria um processo lento.
Utilizo tabelas DBF.
Que a força esteja com todos voces !!
MINIGUI + HARBOUR + BRMAKE + CDX
CLIPPER 5.2E + VISUALLIB 2 + BLINKER
CLIPPER 5.2E + VISUALLIB 2 + BLINKER

