Busca retorna valores errados

14/03/2016

1

Boa tarde a todos!!!

Eu estou tentando fazer uma busca em um bd, onde eu preciso que retorne o valor de "lambda" de acordo com o "caso", o valor do "caso" e inserido pelo usuário e o "lambda" calculado pelo programa. Eu utilizei o código abaixo ele ate retorna os valores, porem retorna sempre o primeiro valor da tabela independente do "caso" selecionado.

ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from apoio');
ADOQuery1.SQL.Add('Where caso = lambda');
ADOQuery1.Open;

vlinhax := ADOQuery1.fieldByName('vlinhax').AsFloat;
ShowMessage('Vlinhax = ' + FloatToStr(vlinhax));

vx := ADOQuery1.fieldbyname('vx').AsFloat;
ShowMessage('Vx = ' + FloatToStr(vx));

vlinhay := ADOQuery1.fieldByName('vlinhay').AsFloat;
ShowMessage('Vlinhay = ' + FloatToStr(vlinhay));

vy := ADOQuery1.fieldbyname('vy').AsFloat;
ShowMessage('Vy = ' + FloatToStr(vy));


Alguém teria alguma dica de como fazer ele retornar os valores corretos?
Responder

Posts

14/03/2016

Marco Antônio

Boa tarde a todos!!!

Eu estou tentando fazer uma busca em um bd, onde eu preciso que retorne o valor de "lambda" de acordo com o "caso", o valor do "caso" e inserido pelo usuário e o "lambda" calculado pelo programa. Eu utilizei o código abaixo ele ate retorna os valores, porem retorna sempre o primeiro valor da tabela independente do "caso" selecionado.

ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from apoio');
ADOQuery1.SQL.Add('Where caso = lambda');
ADOQuery1.Open;

vlinhax := ADOQuery1.fieldByName('vlinhax').AsFloat;
ShowMessage('Vlinhax = ' + FloatToStr(vlinhax));

vx := ADOQuery1.fieldbyname('vx').AsFloat;
ShowMessage('Vx = ' + FloatToStr(vx));

vlinhay := ADOQuery1.fieldByName('vlinhay').AsFloat;
ShowMessage('Vlinhay = ' + FloatToStr(vlinhay));

vy := ADOQuery1.fieldbyname('vy').AsFloat;
ShowMessage('Vy = ' + FloatToStr(vy));


Alguém teria alguma dica de como fazer ele retornar os valores corretos?


Emanuel, boa tarde.
Pelo que entendi vc esta realmente sempre filtrando a mesma coisa.
No campo 'Where' deveria passar um parametro para a pesquisa:

antes: ADOQuery1.SQL.Add('Where caso = lambda');
depois: ADOQuery1.SQL.Add('Where caso = ' + intToStr( lambda ) ) ;

Bão mesmo seria vc posta todo o código ae.


Abc.
Responder

14/03/2016

Emanuel

Não deu certo deste jeito, eu mudei o código para isto.

lambda := ly/lx;
lambda := RoundTo(lambda, -1);
ShowMessage(FloatToStr(lambda));

if lambda <= 2 then
begin

ShowMessage('Laje armada em duas direções');

ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Select * from apoio');
ADOQuery1.SQL.Add('where caso = :caso');
ADOQuery1.Parameters.ParamByName('caso').Value := Edit8.Text;
ADOQuery1.Open;


com isso ele ate retornou valores do "caso" selecionado pelo usuário, porem ele retornou a primeira linha, que seria "lambda = 1" quando ele deveria retornar a linha onde o "lambda = 1,4".
Responder

14/03/2016

Emanuel

Sobe
Responder

15/03/2016

Luiz Menin

Você está utilizando um Round na parte inicial do código, não seria isso?
Outra coisa, você está passando como parâmetro o Edit8.Text ao invés da variável "lambda".
Tente ser um pouco mais claro nos seus questionamentos, está um pouco confuso.
Responder

15/03/2016

Emanuel

E o seguinte eu estou com este código de pesquisa:

ADOQuery1.Close; 
ADOQuery1.SQL.Clear; 
ADOQuery1.SQL.Add('select * from apoio'); 
ADOQuery1.SQL.Add('Where caso = :caso and lambda = :lambda'); 
ADOQuery1.Parameters.ParamByName('caso').Value := Edit8.Text; 
ADOQuery1.Parameters.ParamByName('lambda').Value := lambda; 
ADOQuery1.Open;

vlinhax := ADOQuery1.fieldByName('vlinhax').AsFloat; 
ShowMessage('Vlinhax = ' + FloatToStr(vlinhax)); 

vx := ADOQuery1.fieldbyname('vx').AsFloat; 
ShowMessage('Vx = ' + FloatToStr(vx)); 

vlinhay := ADOQuery1.fieldByName('vlinhay').AsFloat; 
ShowMessage('Vlinhay = ' + FloatToStr(vlinhay)); 

vy := ADOQuery1.fieldbyname('vy').AsFloat; 
ShowMessage('Vy = ' + FloatToStr(vy));


Só que quando ele vai me retornar os dados da erro seguinte erro "is not a valid floating point value." porém esta tudo correto no banco de dados e retorna esta linha da img em azul.

[img]http://arquivo.devmedia.com.br/forum/imagem/476122-20160315-162943.jpg[/img]

E este e o banco de dados.

[img]http://arquivo.devmedia.com.br/forum/imagem/476122-20160315-163001.jpg[/img]

Alguém poderia me ajudar em como solucionar isto?
Responder
Pela mensagem de erro, me parece erro de um ponto inválido nas casas decimais ou os valor do campo vLinhax está vindo vazio ou nulo.

Experimente colocar um ShowMessage para mostrar na tela o valor deste campo antes da conversão para Float.
ShowMessage(ADOQuery1.fieldByName('vlinhax').AsString); // Mostrar o valor antes
vlinhax := ADOQuery1.fieldByName('vlinhax').AsFloat;
Responder

15/03/2016

Emanuel

Corrigi o erro ao mudar de banco de dados, antes eu utilizava o access como bd agora eu fiz um teste passando a utilizar o ibexpress e todos os campos como float e o problema foi resolvido.
Responder