GARANTIR DESCONTO

Fórum FormatFloat!!!!!!!! #272249

14/03/2005

0

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


Cabelo

Cabelo

Responder

Posts

14/03/2005

Rômulo Barros

procedure TForm1.Button2Click(Sender: TObject);
Var
   Teste : String;
begin
   Teste := ´256,89´;
   StringReplace(Teste,´,´,´.´,[]);
end;



Responder

Gostei + 0

15/03/2005

Cabelo

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..


Responder

Gostei + 0

15/03/2005

Fred

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!!! :?


Responder

Gostei + 0

15/03/2005

Levisants

StringReplace(campo ou variavel,DecimalSeparator,´.´,[rfReplaceAll]);
StringReplace(campo ou variavel,ThousandSeparator,´´,[rfReplaceAll]);


Responder

Gostei + 0

16/03/2005

Cabelo

Colegas..

Como faço para pegar o retorno do evento click num ImputBox..

Preciso saber se foi o Ok, ou o cancel..


Responder

Gostei + 0

16/03/2005

Rômulo Barros

Cabelo, vc poderá utilizar o [b:06297928e1]InputQuery [/b:06297928e1]ao invés do [b:06297928e1]InputBox[/b:06297928e1].

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


Responder

Gostei + 0

16/03/2005

Emerson Nascimento

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.


Responder

Gostei + 0

16/03/2005

Joaoshi

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.


Responder

Gostei + 0

17/03/2005

Cabelo

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?


Responder

Gostei + 0

17/03/2005

Emerson Nascimento

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.


Responder

Gostei + 0

17/03/2005

Fred

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!!!


Responder

Gostei + 0

17/03/2005

Cabelo

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?


Responder

Gostei + 0

17/03/2005

Cabelo

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..


Responder

Gostei + 0

17/03/2005

Emerson Nascimento

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


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar