Como efetuar uma pesquisa por parte do campo
Moderador: Moderadores
-
nanosoft
- Usuário Nível 1

- Mensagens: 5
- Registrado em: 29 Jan 2007 12:42
- Localização: São Paulo
- Contato:
Como efetuar uma pesquisa por parte do campo
Apos terminar um curso na SOS a 12 anos, nunca mais mexi com clipper, mas agora inventei de fazer algo de util e estou montando um controle de estoque.
Esta tudo funcionando redondo a nao ser pela pesquisa.
O problema é que como o sistema é para oficina de eletronica, existem componentes que tem o inicio do codigo alterado pelo seu fabricante ou o final para indicar a sua caracteristica, por exemplo:
un741 / lm741 / ua741
bc548 / bc548a / bc548c
Fiz alguns testes por aqui com comando locate, e ele me listou todas as peças que terminavam com 741, mas no caso do bc548, o que tem final a, b, ou c, não foi listado.
Entao preciso que o sistema busque o codigo no meio dele, para listar todos os componentes que tenham o determiando codigo.
Agradeço deste ja qualquer ajuda
Esta tudo funcionando redondo a nao ser pela pesquisa.
O problema é que como o sistema é para oficina de eletronica, existem componentes que tem o inicio do codigo alterado pelo seu fabricante ou o final para indicar a sua caracteristica, por exemplo:
un741 / lm741 / ua741
bc548 / bc548a / bc548c
Fiz alguns testes por aqui com comando locate, e ele me listou todas as peças que terminavam com 741, mas no caso do bc548, o que tem final a, b, ou c, não foi listado.
Entao preciso que o sistema busque o codigo no meio dele, para listar todos os componentes que tenham o determiando codigo.
Agradeço deste ja qualquer ajuda
[]´s
Marcos
Fone/Fax:: (11) 6726 1357 - Celular - 8216 6731
MSN => marcos@nanosoft.com.br
SKYPE => nanoinfo
www.nanosoft.com.br
www.equivalentes.com.br
www.esquemaseletricos.com.br
Marcos
Fone/Fax:: (11) 6726 1357 - Celular - 8216 6731
MSN => marcos@nanosoft.com.br
SKYPE => nanoinfo
www.nanosoft.com.br
www.equivalentes.com.br
www.esquemaseletricos.com.br
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
Marcos,
Se os códigos tiverem sempre esta mesma estrutura (duas letras, três números e um letra) você pode fazer o seguinte usando o LOCATE:
LOCATE FOR SUBS(codigo,3,3)="548"
Abraços,
Se os códigos tiverem sempre esta mesma estrutura (duas letras, três números e um letra) você pode fazer o seguinte usando o LOCATE:
LOCATE FOR SUBS(codigo,3,3)="548"
Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
-
nanosoft
- Usuário Nível 1

- Mensagens: 5
- Registrado em: 29 Jan 2007 12:42
- Localização: São Paulo
- Contato:
Como efetuar uma pesquisa por parte do campo
Mas ai é que esta o problema.
Nao segue um padrao.
A peça pode vir com codigo:
uml 741, hps 741, cd741, ou mesmo so 741, ou seja varia de fabricante para fabricante.
O codigo da peça, a parte numerica pode ser de ate 7 digitos.
Nao segue um padrao.
A peça pode vir com codigo:
uml 741, hps 741, cd741, ou mesmo so 741, ou seja varia de fabricante para fabricante.
O codigo da peça, a parte numerica pode ser de ate 7 digitos.
[]´s
Marcos
Fone/Fax:: (11) 6726 1357 - Celular - 8216 6731
MSN => marcos@nanosoft.com.br
SKYPE => nanoinfo
www.nanosoft.com.br
www.equivalentes.com.br
www.esquemaseletricos.com.br
Marcos
Fone/Fax:: (11) 6726 1357 - Celular - 8216 6731
MSN => marcos@nanosoft.com.br
SKYPE => nanoinfo
www.nanosoft.com.br
www.equivalentes.com.br
www.esquemaseletricos.com.br
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
Então tenta o seguinte:
LOCATE FOR TIRA_LETRA(codigo)="548"
Abraços,
LOCATE FOR TIRA_LETRA(codigo)="548"
Código: Selecionar todos
PROC TIRA_LETRA(vCod)
LOCAL abc:=" ABCDEFGHIJKLMNOPQRSTUVWXYZ", ret:=vCod
FOR i=1 TO LEN(abc)
ret = STRTRAN(ret, subs(abc,i,1),"")
NEXT
RETU (ret)
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
- Augusto
- Usuário Nível 3

- Mensagens: 473
- Registrado em: 26 Ago 2003 17:50
- Localização: Maricá/RJ
- Contato:
Desculpem os parceiros aí de cima... em especial o amigo "papa" Toledo... mas acho que o ideal nesse caso seria usar a função AT()...
Tipo assim...
O que acham ??
Tipo assim...
Código: Selecionar todos
p_cod = "548"
use seu_arq
Locate for AT(p_cod,codigo) # 0
Editado pela última vez por Augusto em 29 Jan 2007 15:21, em um total de 1 vez.
:xau Fui...
goulart@provsul.com.br
Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
goulart@provsul.com.br
Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
-
nanosoft
- Usuário Nível 1

- Mensagens: 5
- Registrado em: 29 Jan 2007 12:42
- Localização: São Paulo
- Contato:
Como efetuar uma pesquisa por parte do campo
No caso o cliente ira entrar com o codigo desejado, pode ser 548, 741, etc.
Entao no lugar do 548, ou do 748, ou qq outro codigo irei colocar o mcod, que é a variavel que pega o valor digitado pelo cliente , é isso?
Entao no lugar do 548, ou do 748, ou qq outro codigo irei colocar o mcod, que é a variavel que pega o valor digitado pelo cliente , é isso?
[]´s
Marcos
Fone/Fax:: (11) 6726 1357 - Celular - 8216 6731
MSN => marcos@nanosoft.com.br
SKYPE => nanoinfo
www.nanosoft.com.br
www.equivalentes.com.br
www.esquemaseletricos.com.br
Marcos
Fone/Fax:: (11) 6726 1357 - Celular - 8216 6731
MSN => marcos@nanosoft.com.br
SKYPE => nanoinfo
www.nanosoft.com.br
www.equivalentes.com.br
www.esquemaseletricos.com.br
- Augusto
- Usuário Nível 3

- Mensagens: 473
- Registrado em: 26 Ago 2003 17:50
- Localização: Maricá/RJ
- Contato:
Bem... no exemplo que eu dei é P_COD....
:xau Fui...
goulart@provsul.com.br
Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
goulart@provsul.com.br
Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
A pesquisa utilizando LOCATE é seqüencial, o que pode acarretar em uma longa espera, dependendo do tamanho do bando de dados.
Acho que o que melhor se encaixa nas necessidades da pesquisa é a função sx_WildSeek() da LIB SIX. Até estranhei que ninguém a tenha indicado. Com ela, o retorno é praticamente instantâneo. Claro que neste caso, o campo precisa fazer parte da chave de índice.
Exemplo: você quer uma lista das variações do amplificador operacional 741. Uma primeira chamada à esta função retornará o primeiro 741. Depois é só seguir na pesquisa, incluindo um argumento extra:
Mesmo num arquivo muito grande, seria até difícil medir a velocidade da pesquisa, dada a velocidade do retorno.
[]'s
Maligno
http://www.buzinello.com/prg
Acho que o que melhor se encaixa nas necessidades da pesquisa é a função sx_WildSeek() da LIB SIX. Até estranhei que ninguém a tenha indicado. Com ela, o retorno é praticamente instantâneo. Claro que neste caso, o campo precisa fazer parte da chave de índice.
Exemplo: você quer uma lista das variações do amplificador operacional 741. Uma primeira chamada à esta função retornará o primeiro 741. Depois é só seguir na pesquisa, incluindo um argumento extra:
Código: Selecionar todos
lContinue := .f.
aList := {}
while sx_WildSeek("*741",lContinue)
AAdd(aList,CODIGO)
lContinue := .t.
end[]'s
Maligno
http://www.buzinello.com/prg
- Augusto
- Usuário Nível 3

- Mensagens: 473
- Registrado em: 26 Ago 2003 17:50
- Localização: Maricá/RJ
- Contato:
Da minha parte me limitei a usar o mesmo comando que ele (prá não complicar) por isso não entrei em detalhes se o LOCATE é bom negócio ou não...Maligno escreveu:A pesquisa utilizando LOCATE é seqüencial, o que pode acarretar em uma longa espera, dependendo do tamanho do bando de dados.
De fato eu não uso (nem me lembro de um dia ter usado) o LOCATE exatamente por ser muito lento, independentemente do tamanho do arquivo a ser pesquisado... assim como tbm não uso a que vc sugere... uso outras alternativas as quais estou mais acostumado e que me retornam resultados igualmente rápidos...
Agora é com ele....
:xau Fui...
goulart@provsul.com.br
Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
goulart@provsul.com.br
Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
-
MARINI
- Usuário Nível 3

- Mensagens: 288
- Registrado em: 06 Jul 2004 08:06
- Localização: Pindamonhangaba SP
Re: Como efetuar uma pesquisa por parte do campo
No ex que mencionei poderia ser feito atraves de um vetor:nanosoft escreveu:No caso o cliente ira entrar com o codigo desejado, pode ser 548, 741, etc.
Entao no lugar do 548, ou do 748, ou qq outro codigo irei colocar o mcod, que é a variavel que pega o valor digitado pelo cliente , é isso?
pcod:={}
aadd(pcod,"548")
aadd(pcod,"748")
aadd(pcod,"a743")
for i:=1 to len(pcod)
if achou:=(pcod$campo)
exit
endif
next
if achou
.....
else
....
endif
Sds
Marini
Marini
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
Pessoal, imagine os seguintes códigos:
abc741a
sdv741x
gfd1741d
a127412
b741
fds47413a
Observe que o número 741 está contido dentro de todos eles. Então se o Marcos quer apenas os registros que tenha o código 741, e não 1741, 27412, 47413, etc.... ele vai ter que usar alguma função que retire todas as letras e deixe apenas os números, ai sim montar um condição para filtrar apenas aquele código. O operador $ (contém) e a função AT() não vai dar certo e acho que a funão x_WildSeek(), utilizando o exemplo acima, também vai retornar todos os registros.
Abraços,
abc741a
sdv741x
gfd1741d
a127412
b741
fds47413a
Observe que o número 741 está contido dentro de todos eles. Então se o Marcos quer apenas os registros que tenha o código 741, e não 1741, 27412, 47413, etc.... ele vai ter que usar alguma função que retire todas as letras e deixe apenas os números, ai sim montar um condição para filtrar apenas aquele código. O operador $ (contém) e a função AT() não vai dar certo e acho que a funão x_WildSeek(), utilizando o exemplo acima, também vai retornar todos os registros.
Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Sem dúvida, vai. Mas, uma vez montado um escopo com esta função, dentro daquele próprio while ele poderá filtrar da forma que quiser; e muito mais rapidamente do que com um locate.e acho que a funão x_WildSeek(), utilizando o exemplo acima, também vai retornar todos os registros.
Muito embora, se fosse comigo, deixaria a filtragem "visual" por conta do usuário. Afinal, foi ele quem entrou o número. Então, selecionar o componente correto passa a ser problema dele. A não ser, claro, que essa filtragem tenha alguma finalidade muito especial, que ele não comentou.
[]'s
Maligno
http://www.buzinello.com/prg
- Augusto
- Usuário Nível 3

- Mensagens: 473
- Registrado em: 26 Ago 2003 17:50
- Localização: Maricá/RJ
- Contato:
Concordo "plenamente"....Maligno escreveu:Muito embora, se fosse comigo, deixaria a filtragem "visual" por conta do usuário. Afinal, foi ele quem entrou o número. Então, selecionar o componente correto passa a ser problema dele.
:xau Fui...
goulart@provsul.com.br
Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
goulart@provsul.com.br
Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
Coloque um campo no cadastro de peças para identificar "familia".
Assim as peças:
un741 / lm741 / ua741 são da familia "741"
bc548 / bc548a / bc548c são da familia "548"
Sua pesquisa será pela familia ou pela peça especifica.
Assim as peças:
un741 / lm741 / ua741 são da familia "741"
bc548 / bc548a / bc548c são da familia "548"
Sua pesquisa será pela familia ou pela peça especifica.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
{POG - Programação Orientada a Gambiarra}

