Fórum Query retorna sempre o primeiro registro da tabela #299347

13/10/2005

0

Boa tarde a todos,

Definitivamente estou precisando da ajuda de vocês.

A partir de um Edit (On exit) dispara a query abaixo. No entanto ela me retorna sempre o primeiro registro da tabela, desconsiderando o que foi digitado no Edit.
Por exemplo:
Se digito no Edit: DEHA

A query retorna [b:bb91259ab1]sempre[/b:bb91259ab1] um produto cujo código é LAGO (este é o primeiro registro da tabela). E o registro com o código DEHA existe na tabela.

Já fiz de tudo e a impressão que tenho é que tudo que tento fazer utilizando SQLDataset, não está funcionando. Tenho que declarar alguma coisa na USES, por exemplo? Ou será que pode ser bug do DBExpress(Utilizo Delphi7) ou Firebird 1.5. Ou eu deveria utilizar um sqlquery?

Definitivamente não sei mais o que fazer. E, o pior é que não posso mais abandonar o DBExpress e recomeçar.

Aqui está o código:


Edit1.Clear;
Panel1.Visible:=False;
Panel2.Visible:=False;
Screen.Cursor:=crHourGlass;
dm.SQLDataset1.close;
dm.SQLDataSet1.CommandText:=´Select * from Itens where Barcode=:valordigitado´;
dm.SQLDataSet1.Parambyname(´valordigitado´).asstring:=´¬´+edit1.Text+´¬´;
try
dm.SQLDataset1.open;
panel1.Visible:=True;
panel2.Visible:=True;
except
ShowMessage(´Item not found!´);
panel1.Visible:=False;
panel2.Visible:=False;
end;
Screen.Cursor:=crDefault;



Agradeço qualquer ajuda recebida,


Um abraço a todos.


Jose


Dli

Dli

Responder

Posts

13/10/2005

Gandalf.nho

Tente LIKE ao invés de =

dm.SQLDataSet1.CommandText:=´Select * from Itens where Barcode like :valordigitado´;


Responder

Gostei + 0

13/10/2005

Dli

Infelizmente continua acontecendo a mesma coisa.

Por acaso eu teria que utilizar um CDS e DSP para que os dados fiquem bidirecionais??( Me parece que não faz sentido!).

Poderias me dizer como seria como seria esta mesmo queria, se eu utilizasse sqlquery??

Tentei aqui e deu erro no código.

O que me parece é que simplesmente o command text da query é ignorado.


Jose


Responder

Gostei + 0

13/10/2005

Technos

Amigo...

Faço umas 300 consultas dessas todos os dias...
Vê como eu faço, pode ser que lhe ajude.

Primeiro, nao realizo esse tipo de consulta no onexit de um edit (tcomponent), prefiro no onkeypress (#13) do mesmo, isso quando eu uso edit comum, pois geralmente uso om edit do IBO que já faz isso.

Outra pequena diferença: eu crio uma variavel string antes de dar o clear da tabela, atribuo a ela o valor passando antes um TRIM no edit, pra pegar somente o valor que eu quero.

Depois, no parambyname, eu simplesmente passo o valor dessa variável.

Pronto, tenho minha listagem na tela... :P


Responder

Gostei + 0

13/10/2005

Technos

Agora, o estranho é que o exemplo dado pela Gandalf era pra ter funcionado.


Responder

Gostei + 0

14/10/2005

Dedi

Amigo,
Voce esta limpando o edit antes da consulta então o valor passado é ´´
Edit1.Clear; Panel1.Visible:=False; Panel2.Visible:=False; Screen.Cursor:=crHourGlass; dm.SQLDataset1.close; dm.SQLDataSet1.CommandText:=´Select * from Itens where Barcode=:valordigitado´; dm.SQLDataSet1.Parambyname

elimine a linha Edit1.clear;


Responder

Gostei + 0

14/10/2005

Technos

putz... como nao vi isso ?
auehauhaeuheu

Esse clear tem que ser dado na query do seu dataset.


Responder

Gostei + 0

14/10/2005

Dli

Amigos,

Obrigado pelas respostas. O edit.clear eu já tinha consertado. Meu problema não é esse. Acho que ou estou usando os componentes errados, ou estou setando ou deixando de setar alguma propriedade dentro do object inspector.

Technos, poderias me enviar um exemplo do código que utilizas e me explicar como é este esquema do edit no IBO?

E se eu usar TQuery ao invés de SQLDatase, que propriedades e código devo usar para esta query?

Agradeço desde já toda a ajuda recebida, pois estou com todo o meu trabalho de semanas parado. E, o pior tenho que terminar este software para amanhã de manhã.


Obrigado

José


Responder

Gostei + 0

14/10/2005

Macario

Olá programador, tente da maneira abaixo



//Edit1.Clear; REMOVA
Panel1.Visible:=False; 
Panel2.Visible:=False; 
Screen.Cursor:=crHourGlass; 
dm.SQLDataset1.close; 
dm.SQLDataSet1.CommandText:=´Select * from Itens where Barcode=:valordigitado´; 
[b][color=red]// TENTE DESTA FORMA[/color][/b]
[b][color=orange]dm.SQLDataSet1.Parambyname(´valordigitado´).asstring:=QuotedStr(´¬´+edit1.Text+´¬´);[/color][/b] 
try 
dm.SQLDataset1.open; 
panel1.Visible:=True; 
panel2.Visible:=True; 
except 
ShowMessage(´Item not found!´); 
panel1.Visible:=False; 
panel2.Visible:=False; 
end; 

if dm.SQLDataset1.isEmpty then
ShowMessage(´Não localizado´);

Screen.Cursor:=crDefault; 



Espero que ajude.


Responder

Gostei + 0

14/10/2005

Macario

Ficou ruim de entender

[color=red:9a2d5ca54f]//Edit1.Clear; REMOVA [/color:9a2d5ca54f]
Panel1.Visible:=False;
Panel2.Visible:=False;
Screen.Cursor:=crHourGlass;
dm.SQLDataset1.close;
[b:9a2d5ca54f][color=orange:9a2d5ca54f]dm.SQLDataSet1.CommandText:=´´;[/color:9a2d5ca54f][/b:9a2d5ca54f]
dm.SQLDataSet1.CommandText:=´Select * from Itens where Barcode=:valordigitado´;
[b:9a2d5ca54f][color=red:9a2d5ca54f]// TENTE DESTA FORMA[/color:9a2d5ca54f][/b:9a2d5ca54f]
[b:9a2d5ca54f][color=orange:9a2d5ca54f]dm.SQLDataSet1.Parambyname(´valordigitado´).asstring:=[/color:9a2d5ca54f][color=red:9a2d5ca54f]QuotedStr(´¬´+edit1.Text+´¬´);[/color:9a2d5ca54f][/b:9a2d5ca54f]
try
dm.SQLDataset1.open;
panel1.Visible:=True;
panel2.Visible:=True;
except
ShowMessage(´Item not found!´);
panel1.Visible:=False;
panel2.Visible:=False;
end;

if dm.SQLDataset1.isEmpty then
ShowMessage(´Não localizado´);

Screen.Cursor:=crDefault;


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar