Pesquisa tabela paradox

Delphi

09/10/2003

Ola


Tenho uma tabela paradox com o seguintes campos

Lacre Atesatado status
0101 0101 estoque
0102 0121 usado
0103 0122 retirado

Gostaria de saber assim que digitar o numero do lacre em um edit faça um busaca na tabela e me mostre uma messagem se ja esta em uso ou não se foi retirado usando as informações lacre atestado status.

Pode ser em SQL

Valeu

Dart


Dart

Dart

Curtidas 0

Respostas

Marlon Spiess

Marlon Spiess

09/10/2003

Olá,
vc pode usar no evento onkeyup do edit a função
tabela.findnearest([strtoint(edit1.text)])
é uma alternativa.

Espero ter ajudado


GOSTEI 0
Dart

Dart

09/10/2003

Valeu Marlon

Na verdade eu queria mais completo. Assim que digita-se o numero do lacre em um edit fize-se uma pesquisa na tebela de lacres onde tem as imformações do status do lacre.

Tipo se o campo status da tabela conter ´estoque´ então posso usar o lacre.

Se o campo status conter ´usado´ então apareça uma mensagem com informações do lacre tipo data do uso , atestato usado para o lacre e se ja foi retirado do equipamento.

Acho que em SQL isso dever ser facil e que nao sei direito como usar.

Se não fui muito claro me avisem que vou tentar explicar melhor.

Valeu

Dart


GOSTEI 0
Bacalhau

Bacalhau

09/10/2003

Na propriedade OnKeyDown do Edit, coloca um procedure com o seguinte código:

if key = #13 then // foi digitado um Enter
begin
table1.fieldbyname(´Lacre´).asstring := edit1.text;
table1.gotonearest;

if table1.fieldbyname(´Lacre´).asstring = edit1.text then
begin
if table1.fieldbyname(´Status´).asstring = ´estoque´
then showmessage(´estoque´);
if table1.fieldbyname(´Status´).asstring = ´retirado´
then showmessage(´retirado´);
if table1.fieldbyname(´Status´).asstring = ´em uso´
then showmessage(´em uso´);

end; // se o lacre foi encontrado
end; // se foi digitado um Enter

Esta é a base. Agora tens de enriquecer o código para obteres o que pretendes. Isto só funciona se houver um indice segundario do campo Lacre

abraço
bacalhau


GOSTEI 0
Marlon Spiess

Marlon Spiess

09/10/2003

Dart, o exemplo do amigo bacalhau, está mais completo, acho q dá pra ter uma idéia melhor, mas o que eu quis, é mostrar um caminho, via sql tbm dá, mas acho melhor por essa linha. Como no meu exemplo, o primeiro, as informações já estão lá, é só vc trabalahr elas.

Espero ter ajudado.

Boa Sorte e qualquer coisa MP-me;


GOSTEI 0
Dart

Dart

09/10/2003

Muito obrigado Marlon e bacalhau

Um dia eu estarei respondendo topicos assim como vcs fazem para
ajudar.

Esse e meu primeiro Sistema apesar de ser simples mas ser amuito util onde eu trabalho.

E isso pode me garantir uma promoção. (É ... Mais trabalho). :)

Valeu

Dart


GOSTEI 0
Bacalhau

Bacalhau

09/10/2003

manda sempre. há pelos menos umas 500 maneiras de fazer. Só demos as pistas
abraço


GOSTEI 0
Dart

Dart

09/10/2003

so mais uma coisa

e que ele so faz a pesquisa no primeiro registro .

como fazer para ler a tabela inteira.


valeu

Dart


GOSTEI 0
Dart

Dart

09/10/2003

Como faz para ler a tabela toda para verificar as situações dos lacres.


GOSTEI 0
Dart

Dart

09/10/2003

so falta isso ..... :cry:


GOSTEI 0
Thalesribeiro

Thalesribeiro

09/10/2003

so falta isso ..... :cry:

Faça um laço na tabela lacre com o comando while..do
por exemplo
while (not lacre.EOF) do
begin
a opção q quiser filtar
end;


GOSTEI 0
Dart

Dart

09/10/2003

eu fiz assim so que ainda não finciona.

while (not tblacre.EOF) do
begin
if tblacre.FieldByName(´lacres´).asstring <> lret.Text then
begin
showmessage(´ Lacre número ´+lret.text+ ´ não existente! ´);
lret.SetFocus;
exit;
end;
end;


o que estou fazendo de errado?


GOSTEI 0
Marlon Spiess

Marlon Spiess

09/10/2003

Olá Dart,
inicialmente, a tabela é em paradox, vc definiu como chave o campo lacre ?
Se definiu como chave, não há a necessidade de fazer um varedura, basta dar um find, caso contrario esse ai é o caminho. Outro exemplo, tendo como base o campo Lacre como chave, vc tem um Edit qualquer, onde vai digitar o nr do lacre, então:
no evento onexit do Edit vc digita

var
cod : integer;
begin
try cod := strtoint(Edit.Text);
except cod := 0
end;
if cod > 0 then
if Tabela.findkey([cod]) then
begin
// ai já tem todas informações do registro
if TabelaStatus.value = ´usado´ then
showmessage(´lacre já usado´);
end
else
showmessage(´Lacre não cadastrado´)
else
showmessage(´Nro do Lancre invalido´);
// observe q antes do else não vai o ponto e virgula

Essa rotina resolve muito bem.
Esero ter ajudado
Boa sorte


GOSTEI 0
Fabio.hc

Fabio.hc

09/10/2003

eu fiz assim so que ainda não finciona. while (not tblacre.EOF) do begin if tblacre.FieldByName(´lacres´).asstring <> lret.Text then begin showmessage(´ Lacre número ´+lret.text+ ´ não existente! ´); lret.SetFocus; exit; end; end; o que estou fazendo de errado?


Está faltando o comando ´next´ avançar p/ o próximo registro.

Tente assim:

while (not tblacre.EOF) do
begin
if tblacre.FieldByName(´lacres´).asstring <> lret.Text then
begin
showmessage(´ Lacre número ´+lret.text+ ´ não existente! ´);
lret.SetFocus;
exit;
end;
[color=blue:ea8a98cc62] tblacre.next;[/color:ea8a98cc62]
end;


GOSTEI 0
Dart

Dart

09/10/2003

if lret.Text = ´´ then
exit;
tblacre.Prior;
while not( tblacre.EOF) do
begin
if tblacrelacres.Value <> lret.Text then
begin
showmessage(´ Lacre número ´+lret.text+ ´ não existente! ´);
lret.SetFocus;
exit;
end
else
tblacre.Next;
end;

Quando eu digite um lacre que ja na tem tabela ele diz que o lacre não existe e quando digito um lacre que não tem ele diz a mesma coisa.
Ainda não finciona por que? aaaaahhhh


GOSTEI 0
Fabio.hc

Fabio.hc

09/10/2003

if lret.Text = ´´ then exit; tblacre.Prior; while not( tblacre.EOF) do begin if tblacrelacres.Value <> lret.Text then begin showmessage(´ Lacre número ´+lret.text+ ´ não existente! ´); lret.SetFocus; exit; end else tblacre.Next; end; Quando eu digite um lacre que ja na tem tabela ele diz que o lacre não existe e quando digito um lacre que não tem ele diz a mesma coisa. Ainda não finciona por que? aaaaahhhh


Tente assim:

Troque o
tblacre.Prior; // volta um registro (se vc está posicionado no ultimo ele volta um registro e faz o ´while´ sempre com um registro)
por
tblacre.First; // posiciona no primeiro registro ( e faz o ´While´ na tabela inteira)


GOSTEI 0
Bacalhau

Bacalhau

09/10/2003

Ó homem de Deus, se usas um while not tblacre.EOF faz assim:

antes do tblacre.EOF coloca tblacre.first.

Dentro do ciclo coloca tblacre.next;

Se não fizeres isto amanhã ainda está parado!! :lol: :lol:

abraço e boa sorte


GOSTEI 0
Dart

Dart

09/10/2003

Gente eu desisto, não dá... eu so muito burro .... :x

procedure TFAtestado.LRETExit(Sender: TObject);
begin
tblacre.First;
while not tblacre.EOF do
begin
if tblacre.FieldByName(´lacres´).asstring <> lret.Text then
begin
showmessage(´ Lacre número ´+lret.text+ ´ não existente! ´);
lret.SetFocus;
exit;
end
else
tblacre.Next;
end;
end;

end.


Não teria que da certo?...
Pois é mas não da certo...


GOSTEI 0
Dart

Dart

09/10/2003

o que estou fazendo de errado...

E so para verificar sem este lacre existe na tabela?

:cry:


GOSTEI 0
Bacalhau

Bacalhau

09/10/2003

Tu não és burro. É assim:


procedure TFAtestado.LRETExit(Sender: TObject);

var encontrei : boolean; // leva esta variavel

begin
encontrei := false; // inicializo, em como não encontrei
tblacre.First;
while not tblacre.EOF do
begin
if tblacre.FieldByName(´lacres´).asstring = lret.Text then // igual aqui
encontrei := true; // encontrei o registo!!!

tblacre.Next;
end; // aqui é o fim da pesquisa

// se não encontrou manda mensagem e sai

if not encontrei then
begin
showmessage(´ Lacre número ´+lret.text+ ´ não existente! ´);
lret.SetFocus;
exit;
end;
end;

end.


E pronto- Abraço das barbatanas deste peixão!! :lol:


GOSTEI 0
Dart

Dart

09/10/2003

uhaaaa consegui fazer :D

Valeu gente muito obrigado mesmo.

procedure TFAtestado.LRETExit(Sender: TObject);
var
loc :integer;
begin
loc:=1;
tblacre.First;

if lret.Text = ´´then
exit;

while not (tblacre.EOF) do
begin
if (tblacrelacres.Value <> lret.text) then
loc:=0
else
loc:=1;

if (tblacrelacres.Value = lret.text) and (tblacrestatus.Value = ´Estoque´) then
begin
showmessage(´Lacre número ´+lret.text+´ não pode ser retirado por não constar em nenhum Atestado!´);
lret.SetFocus;
exit;
end;
if (tblacrelacres.Value = lret.text) and (tblacrestatus.Value = ´Retirado´) then
begin
showmessage(´O Lacre número ´´+lret.text+´´ Ja foi usado no atestado número ´´+tblacre.FieldByName(´atestado´).asstring+´´ e Retirado da impressora número ´´+tblacre.FieldByName(´nordem´).asstring+´´!´);
lret.SetFocus;
exit;
end;

if(tblacrelacres.Value = lret.text) and (tblacrestatus.Value = ´Colocado´) then
begin
showmessage(´O Lacre número ´´+lret.text+´´ Pode ser Retirado e foi usado no atestado número ´´+tblacre.FieldByName(´atestado´).asstring+´´ e Colocado na impressora número ´´+tblacre.FieldByName(´nordem´).asstring+´´!´);
exit;
end;

tblacre.Next;
end;
if loc = 0 then
begin
showmessage(´O Lacre número ´´+lret.text+´´ não existe!´);
lret.SetFocus;
end;
end;

era tão simples...


Valeu

Ate o proximo topico.


GOSTEI 0
Bacalhau

Bacalhau

09/10/2003

Naice, meu!! Manda sempre. 8)


GOSTEI 0
POSTAR