Clipper On Line • Ver Tópico - Mais uma dúvida com OrdWildSeek

Mais uma dúvida com OrdWildSeek

Projeto Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

 

Mais uma dúvida com OrdWildSeek

Mensagempor porter » 08 Fev 2018 13:44

Olá pessoal, tenho uma rotina com índice CDX e quero localizar pelo numero do PEDIDO, na rotina abaixo, se existir algum campo com PEDIDO = "146209",
por exemplo, está considerando como encontrado, como faço para fazer essa localização exatamente como desejado ou seja somente "46209", com SEEK
da forma como está sei que não tem como, então quero localizar pelo OrdWildSeek, já tentei com "*" e com "?"

INDEX ON STR(CODCLI,6)+STR(PEDIDO,6)
variavel := "46209"
cBusca:="*"+variavel+"*"
OrdWildSeek( cBusca, .T. )


Harbour 3.2.0(dev), RDD CDX
porter
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1024
Data de registro: 10 Dez 2009 15:44
Cidade/Estado: OLIMPIA-SP
Curtiu: 3 vezes
Mens.Curtidas: 23 vezes

Mais uma dúvida com OrdWildSeek

Mensagempor rubens » 08 Fev 2018 15:14

Boa tarde...

Porter... não entendi bem isso aí...
CODCLI E PEDIDO são campos da tabela? Se sim não precisa de ordwildseek é só criar a chave para pesquisa com dbseek tb.

cChave := CodCli + Pedido 
Dbseek( cChave )


Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar de usuário

rubens
Colaborador

Colaborador
 
Mensagens: 1518
Data de registro: 16 Ago 2003 09:05
Cidade/Estado: Nova Xavantina - MT
Curtiu: 77 vezes
Mens.Curtidas: 104 vezes

Mais uma dúvida com OrdWildSeek

Mensagempor porter » 08 Fev 2018 15:46

Olá Rubens, boa tarde,
Sim, são campos da tabela DBF, se eu criar o índice INDEX ON STR(PEDIDO,6), eu resolveria o problema com SEEK, mas estou querendo fazer a pesquisa,
usando esse índice INDEX ON STR(CODCLI,6)+STR(PEDIDO,6) e com SEEK ou DBSeek, não consegueria fazer essa pesquisa por isso que estou fazendo
com OrdWildSeek, no momento que eu for fazer a pesquisa, informarei apenas o número do PEDIDO, o código do cliente, não, espero ter conseguido explicar, Obrigado.

INDEX ON STR(CODCLI,6)+STR(PEDIDO,6)
variavel := "46209"
cBusca:="*"+variavel+"*"
OrdWildSeek( cBusca, .T. )


Harbour 3.2.0(dev), RDD CDX
porter
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1024
Data de registro: 10 Dez 2009 15:44
Cidade/Estado: OLIMPIA-SP
Curtiu: 3 vezes
Mens.Curtidas: 23 vezes

Mais uma dúvida com OrdWildSeek

Mensagempor rubens » 08 Fev 2018 15:59

Poter pelo que sei o OrdWildSeek vai pesquisar somente em um campo da tabela ..
Tipo você quer saber todos os clientes que tem no nome a palavra Santos... aí sim funcionaria...
Mas pesquisar em dois campos, acho que só se fizer a busca em cada campo..
Acho que do jeito que você tá querendo não funciona...
Talvez algum outro colega possa ter a solução mas acho que é do jeito que te falei mesmo...
Do jeito que você colocou aí só se salvar esses dados em um mesmo campo aí tudo bem onde houver uma ocorrencia "numero do pedido" vai ser encontrado..

Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar de usuário

rubens
Colaborador

Colaborador
 
Mensagens: 1518
Data de registro: 16 Ago 2003 09:05
Cidade/Estado: Nova Xavantina - MT
Curtiu: 77 vezes
Mens.Curtidas: 104 vezes

Mais uma dúvida com OrdWildSeek

Mensagempor porter » 08 Fev 2018 16:12

Rubens, obrigado por responder,
Estou fazendo a pesquisa por apenas um campo usando OrdWildSeek, e está funcionando, mas o problema que estou encontrando é se por exemplo
fizer uma pesquisa para localizar o PEDIDO "46209", ele está considerando também o PEDIDO "146209", entendeu, tem que considerar exatamente
o que informei.
porter
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1024
Data de registro: 10 Dez 2009 15:44
Cidade/Estado: OLIMPIA-SP
Curtiu: 3 vezes
Mens.Curtidas: 23 vezes

Mais uma dúvida com OrdWildSeek

Mensagempor Eolo » 08 Fev 2018 16:24

Porter, você está mandando o OrdWildseek procurar por "46209" e ele obviamente vai considerar todas as ocorrências da string "46209"... Vai entrar, por exemplo, "462091", "146209" etc.

Mande procurar por str(46209,6), ou seja, " 46209" (espaço, 4, 6...), que é como está na indexação, com isso o "146209" (e outros) não vai mais ser considerado.

Ah, e pode incluir quantos campos quiser. Só precisa, na hora da pesquisa, procurar no formato que a indexação foi criada.
Avatar de usuário

Eolo
Colaborador

Colaborador
 
Mensagens: 1134
Data de registro: 08 Dez 2005 17:24
Cidade/Estado: São Paulo - SP
Curtiu: 0 vez
Mens.Curtidas: 41 vezes

Mais uma dúvida com OrdWildSeek

Mensagempor porter » 08 Fev 2018 17:08

Mande procurar por str(46209,6), ou seja, " 46209" (espaço, 4, 6...), que é como está na indexação, com isso o "146209" (e outros) não vai mais ser considerado.


Agora deu certo, muito obrigado Rubens e Eolo pela atenção.
porter
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1024
Data de registro: 10 Dez 2009 15:44
Cidade/Estado: OLIMPIA-SP
Curtiu: 3 vezes
Mens.Curtidas: 23 vezes

Mais uma dúvida com OrdWildSeek

Mensagempor Eolo » 08 Fev 2018 17:29

Complementando, com um alerta.

Com a indexação
INDEX ON STR(CODCLI,6)+STR(PEDIDO,6)
digamos - só pra exemplificar - que você tem algo assim:
(codcli,pedido)
"  4567 12345"
" 15333 12346"
"  4567 12347"
" 15333  4567"
etc.

Nesse índice, se você procurar pelo cliente " 4567", vão vir todos (e somente) os pedidos do cliente 4567, certo?

Errado. O pedido " 4567" (que é de outro cliente) vai ser incluído, porque a string " 4567" faz parte da chave de pesquisa mas é outra coisa...

Moral da história: o OrdWildseek não se toca que código de cliente é uma coisa e número do pedido é outra. Pra ele, a coisa se resume a procurar uma string que faça parte de uma linguiça de caracteres concatenados. Então, se a procura vai ser só por pedido, crie uma indexação específica...
Avatar de usuário

Eolo
Colaborador

Colaborador
 
Mensagens: 1134
Data de registro: 08 Dez 2005 17:24
Cidade/Estado: São Paulo - SP
Curtiu: 0 vez
Mens.Curtidas: 41 vezes

Mais uma dúvida com OrdWildSeek

Mensagempor asimoes » 08 Fev 2018 17:32

Ao invés de str use hb_ntos, a função é um misto de str com alltrim, ou use:

INDEX ON AllTrim(STR(CODCLI,6)) + AllTrim(STR(PEDIDO,6))

OU

INDEX ON hb_NtoS(CODCLI) + hb_NtoS(PEDIDO)
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Mais uma dúvida com OrdWildSeek

Mensagempor asimoes » 08 Fev 2018 17:37

Se código de ciente é um número de tamanho 6 e pedido idem, pra não ficar perdido na busca eu usaria strzero

INDEX ON STRZERO(CODCLI, 6) + STRZERO(PEDIDO, 6) TO .....

Na busca:

IF DbSeek( StrZero( nCodCli, 6 ) + StrZero( nPedido, 6 ) ) ...

O que eu entedi nesse indice é que você quer achar o pedido do cliente X
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Mais uma dúvida com OrdWildSeek

Mensagempor porter » 08 Fev 2018 17:40

A pesquisa com OrdWildSeek é tão rápida como um SEEK ?
porter
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1024
Data de registro: 10 Dez 2009 15:44
Cidade/Estado: OLIMPIA-SP
Curtiu: 3 vezes
Mens.Curtidas: 23 vezes

Mais uma dúvida com OrdWildSeek

Mensagempor Eolo » 08 Fev 2018 18:04

A pesquisa com OrdWildSeek é tão rápida como um SEEK ?

Na minha experiência, sim.

INDEX ON AllTrim(STR(CODCLI,6)) + AllTrim(STR(PEDIDO,6))

NUNCA use ALLTRIM() em índices e pesquisas. Prefira sempre STRZERO().
Dê uma pesquisada no Forum, esse assunto já foi bastante debatido.

ALLTRIM() elimina os espaços em branco e o índice fica com registros de tamanhos diferentes. Bomba de efeito retardado.
Já o STRZERO() completa as strings com zeros à esquerda, todos os registros ficam com o mesmo tamanho. Sossego.
Avatar de usuário

Eolo
Colaborador

Colaborador
 
Mensagens: 1134
Data de registro: 08 Dez 2005 17:24
Cidade/Estado: São Paulo - SP
Curtiu: 0 vez
Mens.Curtidas: 41 vezes

Mais uma dúvida com OrdWildSeek

Mensagempor asimoes » 08 Fev 2018 18:13

porter escreveu:A pesquisa com OrdWildSeek é tão rápida como um SEEK ?


OrdWildSeek usa uma sintaxe que o DbSeek não tem, seria um like equivalente a uma sentença sql

SELECT * FROM TABELA WHERE NOME LIKE "%LUZ%"

No DBF
TABELA->Nomes

ALEXANDRE LUZ
JOÃO LUZ
LUZ PEDRO
LUIS LUZ DA SILVA

lPrimeira:=.T.
aNomes := {}
DO WHILE OrdWildSeek( "*LUZ*",IF(lPrimeira,.F.,.T.) )
   AADD( aNomes ,TABELA->Nomes )
   lPrimeira:=.F.
ENDDO


Não testei pra saber se OrdWildSeek é mais rápido, note que a palavra LUZ pode estar em qualquer ordem
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Mais uma dúvida com OrdWildSeek

Mensagempor Eolo » 08 Fev 2018 18:24

Porter, a diferença é:

- SEEK faz a procura no INICIO da chave.
Seek "VENTURA" não acha nada, porque meu nome é "EOLO VENTURA"

- OrdWildSeek procura em toda a chave.
OrdWildSeek "VENTURA" me acha,
a mim e a todos os registros que tenham "VENTURA" em qualquer posição (DA INDEXAÇÃO!).

Fiz um programa pra um mercado, um dia saiu um aumento de preço pra todas as cervejas de 600ml, o cliente me chamou pra resolver, rápido. Tipo dia seguinte.

OrdWildSeek "600ml", vieram todos os registros com 600ML (em qualquer parte do nome do produto), aí foi só dar um TAG no que interessava e fazer o aumento.
Avatar de usuário

Eolo
Colaborador

Colaborador
 
Mensagens: 1134
Data de registro: 08 Dez 2005 17:24
Cidade/Estado: São Paulo - SP
Curtiu: 0 vez
Mens.Curtidas: 41 vezes

Mais uma dúvida com OrdWildSeek

Mensagempor Eolo » 08 Fev 2018 18:28

Ah, e era tudo DBF, sem SQL.

O OrdWildSeek é fantástico. Tão rápido quanto o Seek.
Avatar de usuário

Eolo
Colaborador

Colaborador
 
Mensagens: 1134
Data de registro: 08 Dez 2005 17:24
Cidade/Estado: São Paulo - SP
Curtiu: 0 vez
Mens.Curtidas: 41 vezes

Próximo



Retornar para Harbour

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 10 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro