Página 2 de 2

Como efetuar uma pesquisa por parte do campo

Enviado: 01 Fev 2007 22:02
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.

Enviado: 02 Fev 2007 11:53
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.

Enviado: 02 Fev 2007 12:01
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...

Enviado: 02 Fev 2007 13:06
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.

Enviado: 02 Fev 2007 17:55
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

Enviado: 02 Fev 2007 18:40
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

Enviado: 06 Fev 2007 23:08
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