Delphi7 X dbExpress X MySQL5 problema com casas decimais

Delphi

23/11/2007

Bom dia,

Estou com o seguinte problema, possuo no mysql uma tabela com um campo do tipo DECIMAL(5,2), e utilizo como separador decimal a virgula, bom para apresentar os dados tudo ok, o problema é para inserir no banco, (as mensagens de erro deixam bem claro que o padrão de casa decimal do mysql é o ponto), pois bem, dei uma procurada pela net e achei varias funções para troca de virgula para ponto, e ate uma variavel do delphi para tal ( DecimalSeparator := ´.´ ), em relação a esse último quase tudo certo, o fato é que usando o applyupdate não consegui salvar no mysql nesse tipo de campo (DECIMAL), mesmo quando usei o ´DecimalSeparator´ no inicio da aplicação, a única maneira de faze-lo foi alterando as configurações regionais do windows, porém eu não gostaria de resolver esse problema assim, eu não me importo que em minha aplicação o separador decimal apareça como ponto, o que eu não quero é alterar isso no windows, o que poderia repercutir tambem em outros sistemas...

Fico no aguardo, abraços...


Du_nirvana

Du_nirvana

Curtidas 0

Respostas

Du_nirvana

Du_nirvana

23/11/2007

????????????????????


GOSTEI 0
Turbo Drive

Turbo Drive

23/11/2007

Talvez não seja a solução mais elegante, mas comigo funciona.

Faz assim qdo for gravar valores numéricos ou datas:

Query1.close;
Query1.sql.clear;
Query1.sql.add(´insert into contas (valor, dtcompra) values (:mvl, :mdia) ´);
query1.parambyname(´mvl´).asfloat := strtofloat (edit1.text); // edit ou maskedit com valor do tipo numérico
query1.parambyname(´mdia´).asDatetime := strtodate (edit1.text); // edit ou maskedit com valor do tipo data
Query1.execsql;  


Espero ter ajudado


GOSTEI 0
Du_nirvana

Du_nirvana

23/11/2007

Olá Turbo Drive, agradeço a atenção mas o fato é que eu não monto o SQL do INSERT, independente de qual alteração ocorrer eu apenas uso um ClientDataSet.ApplyUpdates, em casos onde eu monto o SQL sem problemas, gostaria de saber se existe uma maneira para os casos onde uso o comando referenciado acima, abraços...


GOSTEI 0
Devmedia

Devmedia

23/11/2007

Bom dia, Estou com o seguinte problema, possuo no mysql uma tabela com um campo do tipo DECIMAL(5,2), e utilizo como separador decimal a virgula, bom para apresentar os dados tudo ok, o problema é para inserir no banco, (as mensagens de erro deixam bem claro que o padrão de casa decimal do mysql é o ponto), pois bem, dei uma procurada pela net e achei varias funções para troca de virgula para ponto, e ate uma variavel do delphi para tal ( DecimalSeparator := ´.´ ), em relação a esse último quase tudo certo, o fato é que usando o applyupdate não consegui salvar no mysql nesse tipo de campo (DECIMAL), mesmo quando usei o ´DecimalSeparator´ no inicio da aplicação, a única maneira de faze-lo foi alterando as configurações regionais do windows, porém eu não gostaria de resolver esse problema assim, eu não me importo que em minha aplicação o separador decimal apareça como ponto, o que eu não quero é alterar isso no windows, o que poderia repercutir tambem em outros sistemas... Fico no aguardo, abraços...


Olá!
Cara estou desenvolvendo um sistema utilizando as suas mesmas tecnologias.
Delphi 7
Connector : dbExpress
BD : MySQL 5


Tambem estou utilizando o ApplyUpdates co ClientDataSet. E em questao oque faço para o BD aceitar gravar é o seguinte.
Antes de gravar o campo que voce quiser vamos supor PREÇO, Exemplo.


With DM.ClientDataSet do
      Open;
      Insert;
                FieldByName(´PRECO´).AsInteger := EditPreco.Text;
      Post;

end;

DM.ClientDataSet.ApplyUpdates;




irá ficar assim:


With DM.ClientDataSet do
      Open;
      Insert;
               [color=blue]EditPreco.Text := StringReplace(EditPreco.Text, ´.´, ´´, []); [/color]
               FieldByName(´PRECO´).AsInteger := EditPreco.Text;
      Post;

end;

DM.ClientDataSet.ApplyUpdates;




[color=blue:c61256a38c]EditPreco.Text := StringReplace(EditPreco.Text, ´.´, ´´, []); [/color:c61256a38c]


Aonde está o ponto, voce pode atribuir o separador que voce utiliza ou qualquer outro tipo de caracter.

Se der certo. Avise.
Um abraço.
Att.


GOSTEI 0
Devmedia

Devmedia

23/11/2007

[color=blue:81c028dc3d]EditPreco.Text := StringReplace(EditPreco.Text, ´.´, ´´, []); [/color:81c028dc3d]

Desconsidera o [color=blue:81c028dc3d] e o [/color:81c028dc3d] porque o forum não mudou a cor do que tinha selecionado.

Inté.


GOSTEI 0
Devmedia

Devmedia

23/11/2007

merd.....

desconsidera os COLOR do codigo la.

inté.


GOSTEI 0
Devmedia

Devmedia

23/11/2007

merd.............

Eu to durmindo ...... não sei de onde tirei [color=red:585434f9e8]´WHIT´[/color:585434f9e8], mil desculpas pela gafe gigantesca.

:oops:

While DM.ClientDataSet do 
      Open; 
      Insert; 
               EditPreco.Text := StringReplace(EditPreco.Text, ´.´, ´´, []); 
               FieldByName(´PRECO´).AsInteger := EditPreco.Text; 
      Post; 

end; 

DM.ClientDataSet.ApplyUpdates;
 


Tta ae o código certo.
Inté.


GOSTEI 0
POSTAR