Fórum Delphi7 X dbExpress X MySQL5 problema com casas decimais #349533
23/11/2007
0
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
Curtir tópico
+ 0Posts
26/11/2007
Du_nirvana
Gostei + 0
26/11/2007
Turbo Drive
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
26/11/2007
Du_nirvana
Gostei + 0
26/11/2007
Devmedia
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
26/11/2007
Devmedia
Desconsidera o [color=blue:81c028dc3d] e o [/color:81c028dc3d] porque o forum não mudou a cor do que tinha selecionado.
Inté.
Gostei + 0
26/11/2007
Devmedia
desconsidera os COLOR do codigo la.
inté.
Gostei + 0
26/11/2007
Devmedia
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
Clique aqui para fazer login e interagir na Comunidade :)