Fórum FormatFloat!!!!!!!! #272249
14/03/2005
0
Trabalho com SQL para inserir dados numa tabela paradox, o campo é tipo float..
Quando dou um FormatFloat(´0.00´, valor), e mando o sql, o banco retorna ´type mismatch error´, isto é o valor não é valido, quando debugo aparece ex: ´256,35´, daí direto no banco ele só aceita ´256.35´, isto é o decimal separator tem que ser ´.´, mas como fazer isso, já tentei de todas as forma e nada..
Uso delphi 5, e Paradox..
Agradeço a atenção
Cabelo
Curtir tópico
+ 0Posts
14/03/2005
Rômulo Barros
procedure TForm1.Button2Click(Sender: TObject); Var Teste : String; begin Teste := ´256,89´; StringReplace(Teste,´,´,´.´,[]); end;
Gostei + 0
15/03/2005
Cabelo
aí está o problema, na hora d visualizaros dados aparece como separador de milhares, se fizer isso com cada dado que aparecerá na tela, irá ficar muito lento, tenho que gravar de forma que o banco entenda..
Gostei + 0
15/03/2005
Fred
0.00 seria 1000,00 e , creio que daria isso 1.000 e no seu caso, tenta 0,00 ou seja o ponto eh a virgula e a virgula eh o ponto!! entendeu!! ve ae se funga!!! :?
Gostei + 0
15/03/2005
Levisants
StringReplace(campo ou variavel,ThousandSeparator,´´,[rfReplaceAll]);
Gostei + 0
16/03/2005
Cabelo
Como faço para pegar o retorno do evento click num ImputBox..
Preciso saber se foi o Ok, ou o cancel..
Gostei + 0
16/03/2005
Rômulo Barros
If(InputQuery... ... ..())Then Showmessage(´Clicou em ok´);
Se vc for dentro da Unit [b:06297928e1]Dialogs[/b:06297928e1], irá ver que internamente o método [b:06297928e1]InputBox[/b:06297928e1] executa o método [b:06297928e1]InputQuery[/b:06297928e1]
[u:06297928e1][b:06297928e1]Veja:[/b:06297928e1][/u:06297928e1]
function InputBox(const ACaption, APrompt, ADefault: string): string; begin Result := ADefault; InputQuery(ACaption, APrompt, Result); end;
[u:06297928e1][b:06297928e1]MÉTODO INPUTQUERY:[/b:06297928e1][/u:06297928e1]
Verifique q o [b:06297928e1]InputQuery[/b:06297928e1] possui os botões definidos como [b:06297928e1]mrOk [/b:06297928e1]e [b:06297928e1]mrCancel[/b:06297928e1]. Com isso, vc poderá capturar o botão q foi clicado.
function InputQuery(const ACaption, APrompt: string; var Value: string): Boolean; var Form: TForm; Prompt: TLabel; Edit: TEdit; DialogUnits: TPoint; ButtonTop, ButtonWidth, ButtonHeight: Integer; begin Result := False; Form := TForm.Create(Application); with Form do try Canvas.Font := Font; DialogUnits := GetAveCharSize(Canvas); BorderStyle := bsDialog; Caption := ACaption; ClientWidth := MulDiv(180, DialogUnits.X, 4); Position := poScreenCenter; Prompt := TLabel.Create(Form); with Prompt do begin Parent := Form; Caption := APrompt; Left := MulDiv(8, DialogUnits.X, 4); Top := MulDiv(8, DialogUnits.Y, 8); Constraints.MaxWidth := MulDiv(164, DialogUnits.X, 4); WordWrap := True; end; Edit := TEdit.Create(Form); with Edit do begin Parent := Form; Left := Prompt.Left; Top := Prompt.Top + Prompt.Height + 5; Width := MulDiv(164, DialogUnits.X, 4); MaxLength := 255; Text := Value; SelectAll; end; ButtonTop := Edit.Top + Edit.Height + 15; ButtonWidth := MulDiv(50, DialogUnits.X, 4); ButtonHeight := MulDiv(14, DialogUnits.Y, 8); with TButton.Create(Form) do begin Parent := Form; Caption := SMsgDlgOK; ModalResult := mrOk; Default := True; SetBounds(MulDiv(38, DialogUnits.X, 4), ButtonTop, ButtonWidth, ButtonHeight); end; with TButton.Create(Form) do begin Parent := Form; Caption := SMsgDlgCancel; ModalResult := mrCancel; Cancel := True; SetBounds(MulDiv(92, DialogUnits.X, 4), Edit.Top + Edit.Height + 15, ButtonWidth, ButtonHeight); Form.ClientHeight := Top + Height + 13; end; if ShowModal = mrOk then begin Value := Edit.Text; Result := True; end; finally Form.Free; end; end;
_________________________________
Utilize a pesquisa do fórum
Gostei + 0
16/03/2005
Emerson Nascimento
se o campo é do tipo float e a variável também, pra que usar o FormatFloat()? é só passar o parâmetro normalmente:
query.parambyname(´valor´).asfloat := valor;
se você não usa parâmetros, pense em usar, pois haverá momentos em que será necessário trabalhar com datas, valores e outros tipos de dados com formatações diferentes das normalmente utilizadas. quando você manda via parâmetros, o próprio dataset se encarrega da formatação dos dados.
Gostei + 0
16/03/2005
Joaoshi
Espero ter ajudado.
Gostei + 0
17/03/2005
Cabelo
Acontece o seguinte..
Se eu usar uma máquina que estiver configurada de acordo com o meu programa, funciona perfeitamente, mas se colocar em uma que estiver diferente, começam os problemas..
Acho que em algum determinado momento, o windows, dependendo da versão altera as configurações regionais, e por isso dá erro..
Gostaria de saber como faço para alterar definitivamente essas configurações, quando o sistema estiver rodando..
Alguém sabe?
Gostei + 0
17/03/2005
Emerson Nascimento
publique sua query para que possamos fazer um exemplo prático.
Gostei + 0
17/03/2005
Fred
ShortDateFormat := ´dd/mm/yyyy´;
DecimalSeparator := ´,´;
ThousandSeparator := ´.´;
Ai idependete do que estiver configurado nas opções regionais do windows o programa vai utilizar da maneira acima!!!
Gostei + 0
17/03/2005
Cabelo
Eu sei como utilizar os parâmetros na query..
Esta não é minha dúvida.. o q maisquero entender, é pq funciona em outras partes do sistema.. e em outras não.. em algumas máquinas funciona em outras não..
Será que é o banco?
Gostei + 0
17/03/2005
Cabelo
Colega... isso ei já faço..
É aí que está minha dúvida.. pq está alterando sozinho esta configuração.. mas não são em todos as máquinas, só em algumas.. eu tô achando que algum outro aplicativo tipo thread está alterando essas configuração, não sei..
Mas de qualquer maneira preciso resolver..
Gostei + 0
17/03/2005
Emerson Nascimento
se vc tem uma variável floate um parâmetro tipo float:
qry.parambyname(´param1´).asfloat := variavelfloat; // não importa se está com ponto ou com vírgula
se vc tem uma variável data e um parâmetro data:
qry.parambyname(´param2´).asdatetime := variaveldata; // não importa se dd/mm/yyyy ou yyyy/mm/dd ou mm/dd/yyyy
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)