Como efetuar uma pesquisa por parte do campo

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

nanosoft
Usuário Nível 1
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

Mensagem por nanosoft »

Bem pessoal agradeço a ajuda de todos, mas não estou conseguindo fazer, do jeito que voce me aconselharam.
Então eu resolvi dividir o campo código da peça em duas partes, o sufixo, que seria o campo que armazena a parte inicial da peça, como BC, TIP, LM, etc. e o outro campo que armazena o código principal da peça.
Pois bem, então imaginei assim, após a pessoa digitar o sufixo e o prefixo da peça, eu faria uma verificação no bd para ver se não existe um registro com este código.
Seriam duas verificações um pelo prefixo e outra pelo sufixo.
Montei uma função que caso exista por exemplo o sufixo, ele da valor igual a 1 para uma variável, e caso não possua será 0.
Igualmente para o prefixo.
Em uma segunda operação ele pegarai o valor destas duas variaveis e somaria.
Caso a soma seja 2, ou seja tem o registro nos dois campos, da uma mensagem que a peça já esta cadastra, caso o valor seja 1, ou seja somente o prefixo, ou o sufixo, esta cadastrado, libera o cadastro da peça.
Pois bem o código que eu fiz para isso é esse:

Código: Selecionar todos

SET INDEX TO INDCODSF // chama o index do sufixo
	SEEK MSUF => a variável do sufixo
	IF EOF()
		VAL_SUF=0
	ELSE
		VAL_SUF=1
	ENDIF

	SET INDEX TO INDCODPC // chama o index do codigo da peça
        SEEK MCOD  => a variável do codigo
	IF EOF()
		VAL_PRE=0
	ELSE
		VAL_PRE=1
	ENDIF
                VAL_PEC=VAL_SUF+VAL_PRE // soma as duas variaveis
IF VAL_PEC<=1 
chama a tela de cadastro
else
chama a tela que já existe o cadastro
endif
Só que não esta dando certo.
Se eu isolo a parte do prefixo, funciona, mas quando eu ponha para rodar os dois campos, não funciona, ele permite registrar componentes em duplicidade.
Então gostaria da ajuda de vocês mais uma vez para ver onde estou errando neste código.
No caso estou alterando o cadastro da peça, pois desta forma eu ja tenho um modelo de consulta que lista o BD pela codigo da peça, nao precisando que eu me preocupe pelo sufixo da mesma.
Deste já agradeço a ajuda de todos.
[]´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
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem por gvc »

A minha sugestão de cadastrar "família" não funcionou para vc?

Com ela, vc poderia fazer a consulta pela família e se não encontar, fazer a mesma pesquisa pelo código da peça.
Ou colocar opção para o usuário escolher pesquisa por família ou peça.
Se for por família, vc pode apresentar todas as peças que estão na mesma família para o usuário selecionar o código específico ou mesmo verificar as peças do grupo.
"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}
Avatar do usuário
Augusto
Usuário Nível 3
Usuário Nível 3
Mensagens: 473
Registrado em: 26 Ago 2003 17:50
Localização: Maricá/RJ
Contato:

Mensagem por Augusto »

Acho muito estranho que vc não tenha conseguido com as "dicas" que foram passadas prá vc...
Foram pelo menos 3 difentes opções de pesquisa.
Me desculpe mais acho que: ou vc não entendeu nenhuma delas ou vc não está sabendo utilizá-las...
:xau Fui...
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
Usuário Nível 1
Mensagens: 5
Registrado em: 29 Jan 2007 12:42
Localização: São Paulo
Contato:

Mensagem por nanosoft »

Ola, pessoal, realmente nao funcionou por eu nao saber trabalhar com os comandos que foram passados, e nao por erro ou falta de explicação de voces.
Como eu falei, faz mais de 10 anos que eu fiz o curso, e nunca mais mexi, agora que inventei de montar esse sistema e esta dando este pepino.
Alguem conseguiu visualizar onde esta o meu erro no codigo que eu enviei, pois eu ja mexi de tudo quando é lado e nao encontrei onde esta o erro.

Mais uma vez, agradeço a todos, pelo empenho em me ajduar.
[]´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
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Mensagem por Toledo »

Marcos,
Sempre que você usar o comando SET INDEX TO ou SET ORDER TO é bom depois dar um GO TOP... então corrija seu fonte.

Mas agora quem ficou confuso sou eu, afinal de contas o que você realmente quer fazer?

Não seria mais fácil você deixar o código como estava antes (tudo junto - prefixo e sufixo) e dar um SEEK no código, se for encontrado (FOUND()), então já existe!

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
Avatar do usuário
Augusto
Usuário Nível 3
Usuário Nível 3
Mensagens: 473
Registrado em: 26 Ago 2003 17:50
Localização: Maricá/RJ
Contato:

Mensagem por Augusto »

Toledo... "acho" que já resolvi o problema dele...
Nos falamos pelo MSN e madei prá ele o seguinte código e ele disse que era o que ele queria... é simples mais funciona...

Código: Selecionar todos

sele 1
use ESTOQUE
index on C_PECA to ESTOQUE

do while .t.
	clear
	MPECA=space(25)
	@ 02,05 say "Digite o codigo...:" get MPECA pict "@!"
	read
	if lastkey()=27
		close data
		quit
	endif	
	
	PARTE=alltrim(MPECA)
	
	set filter to at(PARTE,C_PECA) # 0
	go top
	
	c1={'subst(c_peca,1,10)+" - "+subst(c_desc,1,10)+" - "+str(c_esta,5,0)+" - "+str(c_prev,8,2)'}
	c3={}
	c4={'Codigo/Descriçäo/Est.Atual/Pç.Venda'}
	c5={}
	c6={}
	dbedit(05,03,17,76,c1,,c3,c4,c5,c6,,)
	if lastkey()=27.or.lastrec()=0
	   set filter to
	   loop
	endif
	&& CONTINUA O PROGRAMA 
enddo
:xau Fui...
goulart@provsul.com.br

Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
Avatar do usuário
Trazom
Usuário Nível 3
Usuário Nível 3
Mensagens: 277
Registrado em: 14 Ago 2003 01:01
Localização: Maceió/AL

Mensagem por Trazom »

tenho uma sugestao:

para fazer uma pesquisa indexada por qualquer parte do campo:

criar um indice para cada caracrtere do campo assim

inde on cod to indice
inde on subs(cod,2,9) to tag 01 indice
inde on subs(cod,3,8) to tag 02 indice
....
e assim ate

inde on subs(cod,10,1) to tag 10 indice

e quando fizer a pesquisa tb pesquisar em cada indice desse

bom se quiserem mais detalhes eu informa, mas tenho certeza que funciona pois fiz para varios campos do sistema mesmo com outras tags funciona legal

ah, sim considerando-se que se esta usando indices compostos como cdx ou nsx
Imagem

Harbour 3.2 HMG 1.2a NSX
Evandro
Pelo fato de exercitar bem a própria arte,
cada um pretendia ser sapientíssimo também nas
outras coisas de maior importância,
e esse erro obscurecia o seu saber

Platão, Apologia de Sócrates
Responder