Busca retorna valores errados
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.
Alguém teria alguma dica de como fazer ele retornar os valores corretos?
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
Curtidas 0
Respostas
Marco Antônio
14/03/2016
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.
Alguém teria alguma dica de como fazer ele retornar os valores corretos?
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.
GOSTEI 0
Emanuel
14/03/2016
Não deu certo deste jeito, eu mudei o código para isto.
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".
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".
GOSTEI 0
Emanuel
14/03/2016
Sobe
GOSTEI 0
Luiz Menin
14/03/2016
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.
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.
GOSTEI 0
Emanuel
14/03/2016
E o seguinte eu estou com este código de pesquisa:
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?
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?
GOSTEI 0
Natanael Ferreira
14/03/2016
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.
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;
GOSTEI 0
Emanuel
14/03/2016
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.
GOSTEI 0