problemas com conversão de string para Real
bom dia, é o seguinte....eu uso delphi+zeos+postgres, eu tenho um panel onde vai um valor tipo 3,5 então eu passo ele por uma conversão onde ele fica 3,50 mas quando tento converter este caption do panel de 3,50 string para 3.50 real ele fica sempre 0, alguem ja passou por isso e pode me dar uma mão??
anderson
anderson
Andersonscinfo
Curtidas 0
Respostas
Douglasaltonia
14/11/2007
anderson
Tentou:
Panel1.Caption := FormatFloat(´#0.00´,3.5);
ou
Panel1.Caption := FormatFloat(´0.00´,StrtoFloat(Label1.Caption));
vlw
Tentou:
Panel1.Caption := FormatFloat(´#0.00´,3.5);
ou
Panel1.Caption := FormatFloat(´0.00´,StrtoFloat(Label1.Caption));
vlw
GOSTEI 0
Acror
14/11/2007
Quando usamos o formatfloat ele volta com a virgula.
Vc terá que fazer uma função para retornar uma string com ponto
function TForm1.ponto(valor:double):string;
var
s : string;
begin
s := formatfloat(´0.00´,valor);
while Pos(´,´, S) > 0 do
S[Pos(´,´, S)] := ´.´;
result := s;
end;
usar:
panel1.caption := ponto(3,5);
Vc terá que fazer uma função para retornar uma string com ponto
function TForm1.ponto(valor:double):string;
var
s : string;
begin
s := formatfloat(´0.00´,valor);
while Pos(´,´, S) > 0 do
S[Pos(´,´, S)] := ´.´;
result := s;
end;
usar:
panel1.caption := ponto(3,5);
GOSTEI 0
Andersonscinfo
14/11/2007
amigos...muito obrigado por se prontificarem....eu testei das duas formas e não quiz funcionar....então pequei e tentei direto pra ver qual era o problema....
fiz assim
DM_dd_psqlQry_osvalor_servico.Value:=11;
DM_dd_psqlQry_osvalor_servico.Value:=11.00;
de nem umas das formas ele salvou no banco...todos os outros dados foram salvos....menos o campo do valor....que coisa estranha, isso sendo que na mesma procedure eu tenho depois disso um insert no contas a receber que pega o valor do mesmo caption e ele insere blz....menos ai...que estranho...vou fazer outra qry pra ver se funciona
até mais
fiz assim
DM_dd_psqlQry_osvalor_servico.Value:=11;
DM_dd_psqlQry_osvalor_servico.Value:=11.00;
de nem umas das formas ele salvou no banco...todos os outros dados foram salvos....menos o campo do valor....que coisa estranha, isso sendo que na mesma procedure eu tenho depois disso um insert no contas a receber que pega o valor do mesmo caption e ele insere blz....menos ai...que estranho...vou fazer outra qry pra ver se funciona
até mais
GOSTEI 0
Andersonscinfo
14/11/2007
ja tentei de tudo que foi geito, até ja coloquei dbedit e escrevi dentro do dbedit o valor e mesmo assim não salva no banco....ele salvou uma via sql
Qry_geral.Close;
Qry_geral.SQL.Clear;
Qry_geral.SQL.Add(´UPDATE public.´tb_os´ SET valor_servico=´´´+p_serv.capition+´´´, valor_total=´´´+p_total.capition+´´´ WHERE codigo=´´´+Qry_oscodigo.AsString+´´´;´);
Qry_geral.Open;
desta forma ele salvou...mas deu erro na tal virgula e quando eu fiz dai a conversão para ficar com o . no lugar da virgula, ele faz a conversão...mas ai não salva....que loucura....se alguem ai usa os mesmo componentes que eu, eu mando os fontes e tbm o banco de dados pra analizarem....porque o trem ta dificel....
Anderson
Qry_geral.Close;
Qry_geral.SQL.Clear;
Qry_geral.SQL.Add(´UPDATE public.´tb_os´ SET valor_servico=´´´+p_serv.capition+´´´, valor_total=´´´+p_total.capition+´´´ WHERE codigo=´´´+Qry_oscodigo.AsString+´´´;´);
Qry_geral.Open;
desta forma ele salvou...mas deu erro na tal virgula e quando eu fiz dai a conversão para ficar com o . no lugar da virgula, ele faz a conversão...mas ai não salva....que loucura....se alguem ai usa os mesmo componentes que eu, eu mando os fontes e tbm o banco de dados pra analizarem....porque o trem ta dificel....
Anderson
GOSTEI 0
Douglasaltonia
14/11/2007
vamos entender...
vc quer salvar ´11.00´ e não ´11´, é isso???
vc quer salvar ´11.00´ e não ´11´, é isso???
GOSTEI 0
Acror
14/11/2007
Bem vamos detalhar
Um componente panel vc usa o caption que é string
Se vc usar a função que te passei e que retorna string, tem que funcionar.
Para gravar no campo como 11.00 tem que ser um campo string.
se vc está querendo salvar o que está dentro do panel para o banco com a virgula vc tem que fazer assim
p_serv.caption = ´11,00´;
p_total.caption = ´15,00´;
Qry_geral.Close;
Qry_geral.SQL.Clear;
Qry_geral.SQL.Add(´UPDATE public.´tb_os´ SET valor_servico=´+ponto(strtofloat(p_serv.capition))+´, valor_total=´+ponto(strtofloat(p_total.capition))+´ WHERE codigo=´+Qry_oscodigo.AsString;
Qry_geral.Open;
Assim funciona pq se vc usar virgula no SQL acusa erro e tem que usar o ponto no lugar da virgula.
Eu uso essa função direto pelo mesmo motivo
Neste caso o banco vai receber o seguinte
UPDATE public.´tb_os´ SET valor_servico=11.00 , valor_total=15.00
WHERE codigo=´1´
Eu recomento que vc use o quotedstr() em vez das ´´´. Fica mais limpo.
se seu campo codigo for inteiro não precisa das ´´.
Não sei no postgres mas que eu saiba vc não precisa colocar o ; dentro do SQL. Eu uso o Zeos e não coloco
Um componente panel vc usa o caption que é string
Se vc usar a função que te passei e que retorna string, tem que funcionar.
Para gravar no campo como 11.00 tem que ser um campo string.
se vc está querendo salvar o que está dentro do panel para o banco com a virgula vc tem que fazer assim
p_serv.caption = ´11,00´;
p_total.caption = ´15,00´;
Qry_geral.Close;
Qry_geral.SQL.Clear;
Qry_geral.SQL.Add(´UPDATE public.´tb_os´ SET valor_servico=´+ponto(strtofloat(p_serv.capition))+´, valor_total=´+ponto(strtofloat(p_total.capition))+´ WHERE codigo=´+Qry_oscodigo.AsString;
Qry_geral.Open;
Assim funciona pq se vc usar virgula no SQL acusa erro e tem que usar o ponto no lugar da virgula.
Eu uso essa função direto pelo mesmo motivo
Neste caso o banco vai receber o seguinte
UPDATE public.´tb_os´ SET valor_servico=11.00 , valor_total=15.00
WHERE codigo=´1´
Eu recomento que vc use o quotedstr() em vez das ´´´. Fica mais limpo.
se seu campo codigo for inteiro não precisa das ´´.
Não sei no postgres mas que eu saiba vc não precisa colocar o ; dentro do SQL. Eu uso o Zeos e não coloco
GOSTEI 0