problemas com conversão de string para Real

Delphi

14/11/2007

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


Andersonscinfo

Andersonscinfo

Curtidas 0

Respostas

Douglasaltonia

Douglasaltonia

14/11/2007

anderson

Tentou:

Panel1.Caption := FormatFloat(´#0.00´,3.5);

ou

Panel1.Caption := FormatFloat(´0.00´,StrtoFloat(Label1.Caption));

vlw


GOSTEI 0
Acror

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);


GOSTEI 0
Andersonscinfo

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


GOSTEI 0
Andersonscinfo

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


GOSTEI 0
Douglasaltonia

Douglasaltonia

14/11/2007

vamos entender...

vc quer salvar ´11.00´ e não ´11´, é isso???


GOSTEI 0
Acror

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


GOSTEI 0
POSTAR