Busca retorna valores errados
14/03/2016
0
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
Posts
14/03/2016
Marco Antônio
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.
14/03/2016
Emanuel
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".
15/03/2016
Luiz Menin
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.
15/03/2016
Emanuel
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?
15/03/2016
Natanael Ferreira
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;
15/03/2016
Emanuel
Clique aqui para fazer login e interagir na Comunidade :)