Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

acpazebao

Campo Numeric como tratar ?

Recommended Posts

Boa noite a todos!

 

Estou voltando a desenvolvimento em delphi, usando o XE2 so que dessa vez com postgresql.

 

Dados:

 

postgresql 9.1

Delphi XE2

 

Problema: Ao utilizar o campo numeric ( 15,2 ) não consegui formatar o dbedit para que ele aceitasse a "virgula" como separador decimal. O sistema operacional esta configurado para o portugues brasil.

 

Ao tentar digitar o valor, "500,99" o mesmo retornoou o seguinte erro:

 

"ERRO: sintaxe de entrada é inválida para tipo numeric: 500,99";

Error while executing the query.

 

 

Preciso que o campo esteja formatado no padrão real ou seja R$ 500,99 ou entao pode ser somente 500,99.

 

Como proceder nesse caso? Meu sistema de programação esta assim:

 

Conexao com banco dados atraves de driver odbc. Estou usando:

 

SQLDataSet, DataSetProvider, ClientDataSet, DataSource.

 

 

Como devo proceder afim de solucionar o problema?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigos.

 

Amigo acpazebao, primeiramente gostaria de lhe desejar as boas vindas.

 

Você experimentou colocar uma mascara na propriedade DisplayFormat e EditFormat do seu ClientDataSet?

 

A Mascara seria algo semelhante a isso: ###,##0.00

 

Até a próxima. :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olah bom dia Eisenheim,

 

Fiz exatamente o que vc informou, porem sem sucesso...

 

Ao colocar o valor em um campo acontece isso:

 

quando coloco valor redondo: 10,00 ele grava no banco 10.00

 

Quando eu coloco o valor com decimal ele da essa mensagem:

 

103,50 is not a BCD Value - Aqui vc pode notar que o valor colocado eh 103,50 ( isso mesmo virgula ) pois o ponto, o dbedit nao permite colocar !!!

 

Forte abraço e obrigado pela ajuda !

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olah bom dia Eisenheim,

 

Fiz exatamente o que vc informou, porem sem sucesso...

 

Ao colocar o valor em um campo acontece isso:

 

quando coloco valor redondo: 10,00 ele grava no banco 10.00

 

Quando eu coloco o valor com decimal ele da essa mensagem:

 

103,50 is not a BCD Value - Aqui vc pode notar que o valor colocado eh 103,50 ( isso mesmo virgula ) pois o ponto, o dbedit nao permite colocar !!!

 

Forte abraço e obrigado pela ajuda !

 

Isso acontece porque vc tem que formatar o valor para inserir no banco, sempre que inserir no banco as casas decimais estarão separados por ponto " . ", ou seja como exemplo o valor 1.250,35 - ficaria assim no banco 1250.35, ou seja isso é normal, quando vc coloca 103,5 no dbedit da o erro pois não pode haver virgula no momento da inserção, eu criei essa função que uso para inserir valores no banco.

 

function TDM.FormatarDecimal(Valor: string): string;

begin

Result := StringReplace(Valor, '.', '', [rfReplaceAll, rfIgnoreCase]);

Result := StringReplace(Result, ',', '.', [rfReplaceAll, rfIgnoreCase]);

end;

 

Exempo de uso:

 

FormatarDecimal(ValorAqui);

 

Porém eu uso com Edit e não DbEdit e uso Query!

 

Faça o teste.. espero ter ajudado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desde que você não esteja fazendo o update ou insert automaticamente ao alterar o dbedit vai sim, no seu código de insert e update altera o codigo que vc esta usando para pegar o valor do dbedit para FormatarDecimal(NomedoDbEdit.Text)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olah Thiago boa noite! Tudo bem? Estimo que sim!

 

Antes de mais nada obrigado pela ajuda no forum!

Eu coloquei a funçao que vc passou no meu modulo de dados, porém nao obtive sucesso.

 

Acho que devo estar colocando em lugar errado, não sei!!!

A minha forma de trabalho eh essa:

 

Tenho o modulo de dados que conecta por odbc o postgresql.

Depois tenho o formulario ( no caso cadastro de serviços ). Nesse form tenho os botoes novo, alterar, gravar etc...

 

Não consegui fazer, ou melhor nao consegui ainda sacar onde eh colocada essa função ( que creio eu esta sendo colocada no modulo de dados ) ou entao fazer a chamada da mesma.

Desculpa pela falta de conhecimento nessa parte !!

 

 

Se puder ajudar agradeço

 

 

 



Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia amigos.

 

Amigo acpazebao, no evento onCreate do seu form principal, coloque o seguinte:

 

DecimalSeparator := '.';

 

E no evento onKeyPress do seu controle aonde você digita o valor, experimente o seguinte:

 

if key in [',', '.'] then

key := decimalseparator;

 

Até a próxima. :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olah AMIGO EISENHEIM ... muitissimo obrigado pela dica!!! Ajudou muito e ja coloquei pra testes e funcionou certinho!

 

Somente uma duvida:

 

Agora os campos tipo moeda será colocado o ponto em lugar da virgula eh isso? ou tem alguma formatação especial para isso ? ?

 

Pergunto somente a titulo de duvida, tipo se teria condiçoes de aparecer para o usuario, o campo formatado no padrao brasileiro.

 

 

Forte abraço e obrigado !!!

 

 

 

Cesar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigos.

 

Se você utilizar as propriedades DisplayFormat e EditFormat do seu ClientDataSet, acredito que a visualização para o usuário ficaria como você espera. Experimente e me reporte.

 

A Mascara seria algo semelhante a isso: ###,##0.00

 

Até a próxima. :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olah Eisenheim ... fiz os testes como solicitado, porem sem sucesso!

 

No lugar da virgula, ele aparece o ponto ...

 

Fiz os testes alterando o Displayformat e o EditFormat com os 2 juntos e depois separado tambem, porém sem sucesso!!!

 

 

Forte abraço e obrigado mais uma vez pela grande gentileza !!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigos.

 

Amigo, que estranho, eu trabalho dessa maneira e não tenho problemas assim, embora utilize o Firebird como banco de dados e você o postgres.

 

Que componente você está utilizando para se conectar com o banco de dados? ZeosDBO?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olah Amigo bom dia !!

 

Eu utilizo o

 

sql + dsp + cds + ds

 

e o sqlconnection ...

 

 

conexao com o banco vai odbc

 

 

Forte abraço

 

 

 

Cesar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia meus amigos.. aproveitanto o tópico, gostaria de pedir ajuda sobre um problema que estou tendo nesse mesmo contexto.. Estou tentando ler um banco Firebird com os componentes Zeos.. porém no componente ZTable, os campos numerc(15,2) estão sendo carregados como TIntegerField. Muito estranho, já que quando faço a mesma coisa com os componentes do DBExpress os tipos dos campos vem corretos :(

 

De já obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigos!

 

Amigo gleickson, peço que abra um novo tópico com a sua dúvida acima, pois como esse tópico já se encontra encerrado pelo autor do mesmo, fica complicado de administrá-lo. Abrindo um novo tópico com sua dúvida, será um enorme prazer poder te ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.