Fórum Conversão de valores Firebird variaveis float #335958
10/01/2007
0
fiz a seguinte procedure
procedure SaveData(DB: TIBQuery; Corretora: String; Compras,MCompras,Vendas,MVendas,PLiquida,MLiquida,PCompras,PVendas,MDia: Double;Dia,Hora: TDateTime);
Var
Leitura: String;
Query: String;
D: String;
H: String;
Formato: String;
begin
try
Formato := ´¬f´;
ShortDateFormat := ´mm/dd/yyyy´;
DecimalSeparator := ´.´;
D := DatetoStr(Dia);
H := TimeToStr(Hora);
with DB do
begin
Leitura := ´PETR4´;//FOptions.ComboBox1.Text;
Close;
SQL.Clear;
SQL.Add(´SELECT * FROM DATA WHERE DIA=´ + QuotedStr(D) + ´ AND CORRETORA=´ + QuotedStr(Corretora));
Open;
if (DB.RecordCount = 0) then
begin
Close;
SQL.Clear;
SQL.Add(´INSERT INTO DATA (CORRETORA,COMPRAS,MEDIO_COMPRAS,PERC_COMPRAS,´ +
´VENDAS,MEDIO_VENDAS,PERC_VENDAS,POSICAO_LIQUIDA,MEDIA_LIQUIDA,VOLUME_DIA,DIA,HORA,ATIVO)´ +
´ VALUES (´ +
QuotedStr(Corretora) +
´,´ + FloatToStr(Compras) +
´,´ + Format(Formato,[MCompras]) +
´,´ + Format(Formato,[PCompras]) +
´,´ + Format(Formato,[Vendas]) +
´,´ + Format(Formato,[MVendas]) +
´,´ + Format(Formato,[PVendas]) +
´,´ + Format(Formato,[PLiquida]) +
´,´ + Format(Formato,[MLiquida]) +
´,´ + Format(Formato,[MDia]) +
´,´ + QuotedStr(D) +
´,´ + QuotedStr(H) +
´,´ + QuotedStr(Leitura) +
´)´);
Open;
end
else
begin
Close;
SQL.Clear;
SQL.Add(´UPDATE DATA SET ´ +
´CORRETORA=´ + QuotedStr(Corretora) +
´ ,COMPRAS=´ + FloatToStr(Compras) +
´ ,MEDIO_COMPRAS=´ + Format(Formato,[MCompras]) +
´ ,PERC_COMPRAS=´ + Format(Formato,[PCompras]) +
´ ,VENDAS=´ + Format(Formato,[Vendas]) +
´ ,MEDIO_VENDAS=´ + Format(Formato,[MVendas]) +
´ ,PERC_VENDAS=´ + Format(Formato,[PVendas]) +
´ ,POSICAO_LIQUIDA=´ + Format(Formato,[PLiquida]) +
´ ,MEDIA_LIQUIDA=´ + Format(Formato,[MLiquida]) +
´ ,VOLUME_DIA=´ + Format(Formato,[MDia]) +
´ ,DIA=´ + QuotedStr(D) +
´ ,HORA=´ + QuotedStr(H) +
´ ,ATIVO=´ + QuotedStr(Leitura) +
´ WHERE DIA=´ + QuotedStr(D) + ´ AND ´ +
´CORRETORA=´ + QuotedStr(Corretora));
Open;
end;
end;
ShortDateFormat := ´dd/mm/yyyy´;
DecimalSeparator := ´,´;
Transaction.Commit;
except
Memo1.Lines.Add(DB.SQL.Text);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
SaveData(IBDados,
Edit10.Text,
StrToFloat((´1.000,00´)),
StrToFloat((Edit2.Text)),
StrToFloat((Edit3.Text)),
StrToFloat((Edit4.Text)),
StrToFloat((Edit5.Text)),
StrToFloat((Edit6.Text)),
StrToFloat((Edit7.Text)),
StrToFloat((Edit8.Text)),
StrToFloat((Edit9.Text)),
Date,
Time);
end;
porem ele não está salvando na base, a mensagem que da eh q 1,000.00
não eh um formato float valido..
qual codificaçao do banco deve ser usada?
estou utilizando ISO8859_2 e dialeto 3
[]´s a tds
procedure SaveData(DB: TIBQuery; Corretora: String; Compras,MCompras,Vendas,MVendas,PLiquida,MLiquida,PCompras,PVendas,MDia: Double;Dia,Hora: TDateTime);
Var
Leitura: String;
Query: String;
D: String;
H: String;
Formato: String;
begin
try
Formato := ´¬f´;
ShortDateFormat := ´mm/dd/yyyy´;
DecimalSeparator := ´.´;
D := DatetoStr(Dia);
H := TimeToStr(Hora);
with DB do
begin
Leitura := ´PETR4´;//FOptions.ComboBox1.Text;
Close;
SQL.Clear;
SQL.Add(´SELECT * FROM DATA WHERE DIA=´ + QuotedStr(D) + ´ AND CORRETORA=´ + QuotedStr(Corretora));
Open;
if (DB.RecordCount = 0) then
begin
Close;
SQL.Clear;
SQL.Add(´INSERT INTO DATA (CORRETORA,COMPRAS,MEDIO_COMPRAS,PERC_COMPRAS,´ +
´VENDAS,MEDIO_VENDAS,PERC_VENDAS,POSICAO_LIQUIDA,MEDIA_LIQUIDA,VOLUME_DIA,DIA,HORA,ATIVO)´ +
´ VALUES (´ +
QuotedStr(Corretora) +
´,´ + FloatToStr(Compras) +
´,´ + Format(Formato,[MCompras]) +
´,´ + Format(Formato,[PCompras]) +
´,´ + Format(Formato,[Vendas]) +
´,´ + Format(Formato,[MVendas]) +
´,´ + Format(Formato,[PVendas]) +
´,´ + Format(Formato,[PLiquida]) +
´,´ + Format(Formato,[MLiquida]) +
´,´ + Format(Formato,[MDia]) +
´,´ + QuotedStr(D) +
´,´ + QuotedStr(H) +
´,´ + QuotedStr(Leitura) +
´)´);
Open;
end
else
begin
Close;
SQL.Clear;
SQL.Add(´UPDATE DATA SET ´ +
´CORRETORA=´ + QuotedStr(Corretora) +
´ ,COMPRAS=´ + FloatToStr(Compras) +
´ ,MEDIO_COMPRAS=´ + Format(Formato,[MCompras]) +
´ ,PERC_COMPRAS=´ + Format(Formato,[PCompras]) +
´ ,VENDAS=´ + Format(Formato,[Vendas]) +
´ ,MEDIO_VENDAS=´ + Format(Formato,[MVendas]) +
´ ,PERC_VENDAS=´ + Format(Formato,[PVendas]) +
´ ,POSICAO_LIQUIDA=´ + Format(Formato,[PLiquida]) +
´ ,MEDIA_LIQUIDA=´ + Format(Formato,[MLiquida]) +
´ ,VOLUME_DIA=´ + Format(Formato,[MDia]) +
´ ,DIA=´ + QuotedStr(D) +
´ ,HORA=´ + QuotedStr(H) +
´ ,ATIVO=´ + QuotedStr(Leitura) +
´ WHERE DIA=´ + QuotedStr(D) + ´ AND ´ +
´CORRETORA=´ + QuotedStr(Corretora));
Open;
end;
end;
ShortDateFormat := ´dd/mm/yyyy´;
DecimalSeparator := ´,´;
Transaction.Commit;
except
Memo1.Lines.Add(DB.SQL.Text);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
SaveData(IBDados,
Edit10.Text,
StrToFloat((´1.000,00´)),
StrToFloat((Edit2.Text)),
StrToFloat((Edit3.Text)),
StrToFloat((Edit4.Text)),
StrToFloat((Edit5.Text)),
StrToFloat((Edit6.Text)),
StrToFloat((Edit7.Text)),
StrToFloat((Edit8.Text)),
StrToFloat((Edit9.Text)),
Date,
Time);
end;
porem ele não está salvando na base, a mensagem que da eh q 1,000.00
não eh um formato float valido..
qual codificaçao do banco deve ser usada?
estou utilizando ISO8859_2 e dialeto 3
[]´s a tds
Nightshade
Curtir tópico
+ 0
Responder
Posts
11/01/2007
Fortaum
- Vc tem q passar a string sem o separador de milhar ex:
1.000,00 = 1000,00
- Nesse caso eu costumo usar o StringReplace...
1.000,00 = 1000,00
- Nesse caso eu costumo usar o StringReplace...
Responder
Gostei + 0
11/01/2007
Nightshade
retirando o separador decimal??
no caso estou trabalhando com valores monetarios, qual funçao vc me indicaria pra utilizar?
terei de passar um valor no lugar do ponto.. se eu passar espaço, terei de fzr um looping para retirar o espaço, fiz uma funçao similar, mas tenho receio que ela prejudique o desempenho do sistema, pois esta funçao eh executada de 1min em 1 min.
no caso estou trabalhando com valores monetarios, qual funçao vc me indicaria pra utilizar?
terei de passar um valor no lugar do ponto.. se eu passar espaço, terei de fzr um looping para retirar o espaço, fiz uma funçao similar, mas tenho receio que ela prejudique o desempenho do sistema, pois esta funçao eh executada de 1min em 1 min.
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)