Busca em banco de dados firebird 2.5
Boa noite a todos.
Estou tentando fazer uma busca em um banco de dados, porem não esta dando certo. Quando eu utilizo o banco de dados access este código funciona perfeitamente:
Porém agora eu quero utilizar o banco de dados firebird 2.5, o banco esta conectado com um SQLConection, SQLTable e SQLQuery, quando eu realizo a busca no banco de dados me retorna um erro de "Is not a valid floatpoint point value." O código utilizado e o seguinte:
Alguém pode me dar uma dica de como resolver isto?
Estou tentando fazer uma busca em um banco de dados, porem não esta dando certo. Quando eu utilizo o banco de dados access este código funciona perfeitamente:
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from tabela1 where kc= ' + QuotedStr(FloatToStr(kc)));
ADOQuery1.Open;
bx := SQLQuery1.fieldByName('bx').AsFloat;
ks := SQLQuery1.fieldbyname('Ks').AsFloat;Porém agora eu quero utilizar o banco de dados firebird 2.5, o banco esta conectado com um SQLConection, SQLTable e SQLQuery, quando eu realizo a busca no banco de dados me retorna um erro de "Is not a valid floatpoint point value." O código utilizado e o seguinte:
SQLQuery1.Close;
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add('select * from tabela1 where kc= ' + QuotedStr(FloatToStr(kc)));
SQLQuery1.Open;
bx := SQLQuery1.fieldByName('bx').AsFloat;
ks := SQLQuery1.fieldbyname('Ks').AsFloat;Alguém pode me dar uma dica de como resolver isto?
Emanuel
Curtidas 0
Melhor post
Gilberto Moura
08/03/2016
Emanuel, bom dia.
Qdo se faz floatToStr a formatação não fica válida para executar SQL. O que eu quero dizer com isso...
Qdo tenho o valor float 10.00, ao utilizar o floatToStr( 10.00 ) ficará 10.
Qdo tenho o valor float 10.18, ao utilizar o floatToStr( 10.00 ) ficará 10,18.
Esse valor de 10,18 não é valido para o SGDB do firebird.
Uma forma simples de se entender seria:
var x1 : string;
x1 := FloatToStr( kc );
x1 := StringReplace( x1 , ',' , '.' , [ rfReplaceAll , rfIgnoreCase ] );
SQLQuery1.Close;
SQLQuery1.Filtered := false; // <---- procure manter o padrão de retirar os filtros
SQLQuery1.Filter := ''; // <---- procure manter o padrão de retirar os filtros. é bom utilizar tb
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add('select * from tabela1 where kc= ' + x1 );
SQLQuery1.Open;
Abc.
Qdo se faz floatToStr a formatação não fica válida para executar SQL. O que eu quero dizer com isso...
Qdo tenho o valor float 10.00, ao utilizar o floatToStr( 10.00 ) ficará 10.
Qdo tenho o valor float 10.18, ao utilizar o floatToStr( 10.00 ) ficará 10,18.
Esse valor de 10,18 não é valido para o SGDB do firebird.
Uma forma simples de se entender seria:
var x1 : string;
x1 := FloatToStr( kc );
x1 := StringReplace( x1 , ',' , '.' , [ rfReplaceAll , rfIgnoreCase ] );
SQLQuery1.Close;
SQLQuery1.Filtered := false; // <---- procure manter o padrão de retirar os filtros
SQLQuery1.Filter := ''; // <---- procure manter o padrão de retirar os filtros. é bom utilizar tb
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add('select * from tabela1 where kc= ' + x1 );
SQLQuery1.Open;
Abc.
GOSTEI 2
Mais Respostas
Mateus Ribeiro
07/03/2016
Bom dia!
Troque esse: QuotedStr(FloatToStr(kc))
Por isso: FloatToStr(kc)
Veja se resolve
Troque esse: QuotedStr(FloatToStr(kc))
Por isso: FloatToStr(kc)
Veja se resolve
GOSTEI 0
Rafael Bosco
07/03/2016
O campo KC é um Float? Faça o controle dessa variável através do código, não através da SQL, utilize o tipo de variável Currency:
procedure Select(Kc: Currency);
begin
SQLQuery1.Close;
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add('select * from tabela1 where kc = :kc');
SQLQuery1.ParamByName('KC').AsCurrency := KC
SQLQuery1.Open;
bx := SQLQuery1.fieldByName('bx').AsCurrency;
ks := SQLQuery1.fieldbyname('Ks').AsCurrency;
GOSTEI 0
Emanuel
07/03/2016
Emanuel, bom dia.
Qdo se faz floatToStr a formatação não fica válida para executar SQL. O que eu quero dizer com isso...
Qdo tenho o valor float 10.00, ao utilizar o floatToStr( 10.00 ) ficará 10.
Qdo tenho o valor float 10.18, ao utilizar o floatToStr( 10.00 ) ficará 10,18.
Esse valor de 10,18 não é valido para o SGDB do firebird.
Uma forma simples de se entender seria:
var x1 : string;
x1 := FloatToStr( kc );
x1 := StringReplace( x1 , ',' , '.' , [ rfReplaceAll , rfIgnoreCase ] );
SQLQuery1.Close;
SQLQuery1.Filtered := false; // <---- procure manter o padrão de retirar os filtros
SQLQuery1.Filter := ''; // <---- procure manter o padrão de retirar os filtros. é bom utilizar tb
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add('select * from tabela1 where kc= ' + x1 );
SQLQuery1.Open;
Abc.
Qdo se faz floatToStr a formatação não fica válida para executar SQL. O que eu quero dizer com isso...
Qdo tenho o valor float 10.00, ao utilizar o floatToStr( 10.00 ) ficará 10.
Qdo tenho o valor float 10.18, ao utilizar o floatToStr( 10.00 ) ficará 10,18.
Esse valor de 10,18 não é valido para o SGDB do firebird.
Uma forma simples de se entender seria:
var x1 : string;
x1 := FloatToStr( kc );
x1 := StringReplace( x1 , ',' , '.' , [ rfReplaceAll , rfIgnoreCase ] );
SQLQuery1.Close;
SQLQuery1.Filtered := false; // <---- procure manter o padrão de retirar os filtros
SQLQuery1.Filter := ''; // <---- procure manter o padrão de retirar os filtros. é bom utilizar tb
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add('select * from tabela1 where kc= ' + x1 );
SQLQuery1.Open;
Abc.
Vlw pela ajuda de todos, porém sempre retorna o erro "Is not a valid floatpoint point value.".
Gil sua dica ajudou a mudar o erro kkkkk, ele diz que o "operation not allowed on a unidirectional dataset" eu sei q o erro e pq os elementos da dbexpress são unidecionais, com uma pesquisa em vários tópicos sobre este erro eu vi que o certo seria fazer a conexão nesta sequencia, sqlconnection/sqlquery/datasetprovider/clientdataset/datasource para que os dados fossem retornados, porém o erro persiste.
Alguém teria alguma outra dica? ja estou quebrando cabeça com isso faz um tempo e nada.
GOSTEI 0
Emanuel
07/03/2016
Sobe
GOSTEI 0
William
07/03/2016
Tente parametrizado:
SQLQuery1.Close;
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add('select * from tabela1 where kc= :param1');
SQLQuery1.ParamByName('param1').AsFloat := kc;
SQLQuery1.Open;
GOSTEI 0
Emanuel
07/03/2016
Da o mesmo erro de "Is not a valid floatpoint point value.". To quebrando a cabeça com essa pesquisa, já tentei varias maneiras e sempre da erro.
GOSTEI 0
William
07/03/2016
Que tipo de valor vem nesse campo "kc"?
Dê exemplos!
Dê exemplos!
GOSTEI 0
Emanuel
07/03/2016
Esse valor de kc e o resultado de uma equação matemática, conforme a img.
[img]http://arquivo.devmedia.com.br/forum/imagem/476122-20160309-132436.jpg[/img]
esse valor pode ser "1,8", "1,7", "2", "3,1". E com estes valor de Kc eu preciso buscar na tabela o valor de Ks e Bx para continuar os cálculos. Os valores de Ks e Bx podem ser: "0,029", "0,028" e "0,50", "0,48" respectivamente.
[img]http://arquivo.devmedia.com.br/forum/imagem/476122-20160309-132436.jpg[/img]
esse valor pode ser "1,8", "1,7", "2", "3,1". E com estes valor de Kc eu preciso buscar na tabela o valor de Ks e Bx para continuar os cálculos. Os valores de Ks e Bx podem ser: "0,029", "0,028" e "0,50", "0,48" respectivamente.
GOSTEI 0
Raimundo Pereira
07/03/2016
Experimente alterar o campo da sua tabela para numeric 18,4
GOSTEI 0
Emanuel
07/03/2016
Problema resolvido, podem fechar o tópico.
GOSTEI 0
Marco Antônio
07/03/2016
Boa tarde Emanuel. Qual foi a solução encontrada?
A sugerida pelo P2? Caso não gostaríamos que fosse compartilhado uma vez que o fórum é sempre consultado por outros interessados.
Abc.
A sugerida pelo P2? Caso não gostaríamos que fosse compartilhado uma vez que o fórum é sempre consultado por outros interessados.
Abc.
GOSTEI 0
Emanuel
07/03/2016
Sim, deu certo utilizando o código original e transformando a tabela em numeric.
GOSTEI 0