FormatFloat!!!!!!!!
Colegas..
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
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
Curtidas 0
Respostas
Rômulo Barros
14/03/2005
procedure TForm1.Button2Click(Sender: TObject); Var Teste : String; begin Teste := ´256,89´; StringReplace(Teste,´,´,´.´,[]); end;
GOSTEI 0
Cabelo
14/03/2005
O problema é que se eu colocar assim, o banco entende como separador de milhares..
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..
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
Fred
14/03/2005
a mascara para ponto( . ) eh ´,´ tipo #,0.00 que seria 1.000,00;
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!!! :?
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
Levisants
14/03/2005
StringReplace(campo ou variavel,DecimalSeparator,´.´,[rfReplaceAll]);
StringReplace(campo ou variavel,ThousandSeparator,´´,[rfReplaceAll]);
StringReplace(campo ou variavel,ThousandSeparator,´´,[rfReplaceAll]);
GOSTEI 0
Cabelo
14/03/2005
Colegas..
Como faço para pegar o retorno do evento click num ImputBox..
Preciso saber se foi o Ok, ou o cancel..
Como faço para pegar o retorno do evento click num ImputBox..
Preciso saber se foi o Ok, ou o cancel..
GOSTEI 0
Rômulo Barros
14/03/2005
Cabelo, vc poderá utilizar o [b:06297928e1]InputQuery [/b:06297928e1]ao invés do [b:06297928e1]InputBox[/b:06297928e1].
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]
[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.
_________________________________
Utilize a pesquisa do fórum
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
Emerson Nascimento
14/03/2005
voltando à primeira pergunta...
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.
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
Joaoshi
14/03/2005
Outra solução seria você substituir a virgula por ponto na separação decimal e mandar o campo como string QUOTEDSTR(VALOR).
Espero ter ajudado.
Espero ter ajudado.
GOSTEI 0
Cabelo
14/03/2005
Não consigui..
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?
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
Emerson Nascimento
14/03/2005
utilize pârametros e vc não precisará se preocupar com as configurações regionais.
publique sua query para que possamos fazer um exemplo prático.
publique sua query para que possamos fazer um exemplo prático.
GOSTEI 0
Fred
14/03/2005
Para evitar estas configurações diferentes de maquina p/ maquina, coloque isso no on create do seu form principal:
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!!!
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
Cabelo
14/03/2005
utilize pârametros e vc não precisará se preocupar com as configurações regionais.
publique sua query para que possamos fazer um exemplo prático.
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
Cabelo
14/03/2005
Para evitar estas configurações diferentes de maquina p/ maquina, coloque isso no on create do seu form principal:
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!!!
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
Emerson Nascimento
14/03/2005
se vc já utiliza parâmetros não deveria acontecer nenhum erro. não é necessário se preocupar com formatos.
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
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