Página 1 de 2
duvida com OrdWildSeek
Enviado: 13 Fev 2015 21:09
por porter
ola pessoal, estou tentando usar o OrdWildSeek, estou com duvida na sintaxe do comando, como eu informo a variavel do nome que quero localizar, com asteriscos.
Código: Selecionar todos
variavel = "JOSE"
DO WHILE OrdWildSeek("*variavel*",.T.) <-- duvida nessa linha
AADD(aNomes,ALLTRIM(LLCDBF10->NCLIENTE) + " " + STR(NCUPOM) )
ENDDO
obrigado.
duvida com OrdWildSeek
Enviado: 13 Fev 2015 21:36
por Toledo
Amigo, segue um exemplo:
Código: Selecionar todos
variavel = "JOSE"
cBusca:="*"+variavel+"*"
nPas_:=1
DO WHILE OrdWildSeek(cBusca,iif(nPas_=1,.F.,.T.))
AADD(aNomes,ALLTRIM(LLCDBF10->NCLIENTE) + " " + STR(NCUPOM) )
nPas_+=1
ENDDO
Abraços,
duvida com OrdWildSeek
Enviado: 14 Fev 2015 09:48
por porter
bom dia Toledo, o exemplo que você passou, deu certo, mas eu nao quero fazer um While, gostaria de saber se tem como a cada tecla pressionada, o ponteiro posicionasse no proximo registro dentro do DBF que satisfaça a condição, da mesma forma como é feito com LOCATE e CONTINUE .
obrigado.
duvida com OrdWildSeek
Enviado: 14 Fev 2015 14:43
por Itamar M. Lins Jr.
É o mesmo processo.
Faça de conta que o Do While é o Locate.
Porque veja bem, o Locate aguarda a pessoa digitar via READ no Get não é assim ?
No caso vc tem que usar uma outra opção que nas linguagens visuais usamos através de eventos ON KEYDOWN {||fSuaFuncaoPesquisar()}
O comportamento é igual ao de um GET só que não precisa teclar ENTER p/ começar a pesquisar, ele vai procurado enquanto vamos teclando.
Por exemplo o comando WAIT faz isso ou INKEY(0), use tbrowse ou dbedit com nTecla := inkey(0).
Saudações,
Itamar M. Lins Jr.
duvida com OrdWildSeek
Enviado: 16 Fev 2015 11:00
por porter
ola Itamar, o do do while processa o arquivo inteiro, e a cada registro que ele processa, tenho que mostrar no TBROWSE o registro que ele esta posicionado, essa é a minha duvida parar o processo e mostrar no Tbrowse a cada tecla pressionada.
Código: Selecionar todos
cBusca:="*SILVA*"
DO WHILE OrdWildSeek(cBusca,iif(nPas_=1,.F.,.t.))
brw:REFRESHALL()
DO WHILE !brw:stabilize() .AND. NEXTKEY()=0
ENDDO
inkey(0) <-- é aqui que devo parar o processo ?
ENDDO
obrigado.
duvida com OrdWildSeek
Enviado: 16 Fev 2015 11:44
por Itamar M. Lins Jr.
Neste caso especifico de pesquisa com ordwild... vc precisa trabalhar com arrays no tbrowse não diretamente com o DBF como é no caso do locate ou seek.
Pesquisa Letra a Letra com ordwild... eu não fiz, eu uso DbSeek(). OrdWildSeek é mais refinado, procura incidência em uma string por isso tem que varrer o DBF todo, mesmo ele estando indexado.
Saudações,
Itamar M. Lins Jr.
duvida com OrdWildSeek
Enviado: 16 Fev 2015 13:46
por Toledo
Amigos, segue em anexo um exemplo.
Abraços,
duvida com OrdWildSeek
Enviado: 15 Dez 2016 18:10
por fladimir
Olá pessoal, to com um código q baseei aki no fórum sobre pesquisa com OrdWildSeek
Esta funcionando... porém acho meio estranho e queria ver se conseguem me auxiliar a uma melhoria...
Segue trecho do código q faz o OrdWildSeek Atual pra depois comentar como esta e o q pretendo.
Código: Selecionar todos
cLetra := alltrim(cLetra)
@ 10,05 say cLetra
Set Order to nOrder
Index on &(IndexKey()) TAG _TEMP_ TO tHarbour CUSTOM ADDITIVE MEMORY
SET Order to nOrder
GO TOP
while OrdWildSeed( '*' + cLetra + '?', TRUE)
OrdKeyAdd(_TEMP_)
END
OrdSetFocus('_TEMP')
Tenho um DBEdit q a medida q vai digitando o nome do cliente vai pesquisando, antigamente pesquisava da esquerda pra direita pq estava organizada por ordem de nome, depois mudei pra forma q esta acima pra pesquisar onde quer q tenha a palavra digitada...
Exemplo FERNAND (sem a letra "O" no final para entendermos melhor)
Antes mostrava
Código: Selecionar todos
FERNANDO CASTRO
FERNANDO DUARTE LIMA
FERNANDO ELIAS SOARES
...
HOJE MOSTRA
Código: Selecionar todos
ADONIS FERNANDO
ALEXANDRE AMADEU FERNANDES
BRUNO FERNANDO DE SOUZA
CAMILA FERNANDES DE SOUZA
FERNANDO AGUILHERA
FERNANDO ALENCAR DE MATOS
FERNANDO COSTA SILVA
Ai se finalizao a digitação da palavra no caso do exemplo FERNANDO (o no final) aparece
Código: Selecionar todos
ADONIS FERNANDO
BRUNO FERNANDO DE SOUZA
FERNANDO AGUILHERA
FERNANDO ALENCAR DE MATOS
FERNANDO COSTA SILVA
Gostaria de uma ideia se teria como fazer um "MIX" de ambas as formas (Antiga e Nova) ou seja...
Fazer primeiro mostrar as palavras (Nomes aki no caso) que COMECEM pela palavra FERNAND e depois as que CONTEM "FERNAND"
Ficando o exemplo anterior semelhante a algo tipo a lista abaixo (supondo q foi digitado FERNAND
Código: Selecionar todos
FERNANDO AGUILHERA
FERNANDO ALENCAR DE MATOS
FERNANDO COSTA SILVA
ADONIS FERNANDO
ALEXANDRE AMADEU FERNANDES
BRUNO FERNANDO DE SOUZA
CAMILA FERNANDES DE SOUZA
Alguém sabe se é possível isso via OrdWildSeek ou de outra maneira?
duvida com OrdWildSeek
Enviado: 15 Dez 2016 20:03
por JoséQuintas
Talvez mais um índice.
Código: Selecionar todos
while OrdWildSeed( '*' + cLetra + '?', TRUE)
OrdKeyAdd(_TEMP_)
END
OrdSetFocus('_TEMP')
GOTO TOP
INDEX ON ... TO ... WHILE ...
duvida com OrdWildSeek
Enviado: 19 Dez 2016 22:59
por fladimir
Não consegui bolar um índice para isto, pq se mando em ordem alfabética sai do propósito q seria primeiro conforme o q satisfazer da esquerda pra direita, no caso do exemplo a palavra "FERNANDO" deveria serem as primeiras e depois o q contiver "FERNANDO", alguma sugestão?
duvida com OrdWildSeek
Enviado: 20 Dez 2016 07:59
por JoséQuintas
Código: Selecionar todos
GOTO TOP
INDEX ON iif( Left( nome, 3 ) == Left( Chave, 3 ), "1", "2" ) + nome TO ... WHILE ...
ou se facilitar
Código: Selecionar todos
GOTO TOP
INDEX ON Chave( nome, cChave ) TO ... WHILE ...
FUNCTION Chave( cNome, cChave )
LOCAL cKey
IF Left( cnome, 3 ) == Left( cChave, 3 )
cKey := "1"
ELSE
cKey := "2"
ENDIF
RETURN cKey + cNome
duvida com OrdWildSeek
Enviado: 20 Dez 2016 14:10
por fladimir
Então eu tinha tentando desta forma mas não dava certo, vou tentar novamente e ver se jogando como função vai.
Obrigado Quintas.
duvida com OrdWildSeek
Enviado: 20 Dez 2016 14:20
por fladimir
Fiz aki e os "FERNANDO" ficaram em cima, mas depois deles não vem o q contém FERNANDO vem os demais em ordem alfabética.
Acho q terei q fazer jogando num Array e depois uma tabela temporária.
Vou continuar com os testes, qualquer novidade aviso.
[] 's
duvida com OrdWildSeek
Enviado: 20 Dez 2016 15:04
por JoséQuintas
Então esse índice deu certo, o que deu errado foi ele não respeitar o índice atual.
Será que isso é recurso da SIXCDX do Clipper somente?
1) Criar o índice temp_ usando OrdWildSeek()
2) Criar o novo índice, com o temp_ ativado, e com WHILE, pra pegar só registros acessíveis no índice
Acredito que o Harbour tenha esse recurso, só não sei se a sintaxe é a mesma da SIXCDX.
duvida com OrdWildSeek
Enviado: 22 Ago 2017 09:12
por rubens
Bom dia...
Fladimir,
Consegui resolver?
Obg...
Rubens