Fórum Busca em banco de dados firebird 2.5 #547893
07/03/2016
0
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
Curtir tópico
+ 0Post mais votado
08/03/2016
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.
Gilberto Moura
Gostei + 2
Mais Posts
08/03/2016
Mateus Ribeiro
Troque esse: QuotedStr(FloatToStr(kc))
Por isso: FloatToStr(kc)
Veja se resolve
Gostei + 0
08/03/2016
Rafael Bosco
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
08/03/2016
Emanuel
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
09/03/2016
Emanuel
Gostei + 0
09/03/2016
William
SQLQuery1.Close;
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add('select * from tabela1 where kc= :param1');
SQLQuery1.ParamByName('param1').AsFloat := kc;
SQLQuery1.Open;
Gostei + 0
09/03/2016
Emanuel
Gostei + 0
09/03/2016
William
Dê exemplos!
Gostei + 0
09/03/2016
Emanuel
[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
09/03/2016
Raimundo Pereira
Gostei + 0
09/03/2016
Emanuel
Gostei + 0
09/03/2016
Marco Antônio
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
14/03/2016
Emanuel
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)