Como sair deste problema

13/03/2006

Caros colegas

Uso D7 -DBExpress - Firebird 1.5.x

Meu problema:
Tenho uma tabela com campo numérico (NUMERIC 9,2).

Este Campo Vem para o CDS no DM como Sendo TFMTBCDField.

Este Campo no CDS na sua propriedade DisplayFormat := ,#0.00

Junto ao Formulário insiro um DBEdit preencho suas propriedades DataField com este campo.
Este Campo ao ser digitado com inteiro/fração tipo 15,30 e ao ser ´postado´ da a seguinte mensagem - ´15,30 is not a valid BCD Value´

A pergunda é ´ e ai como sair desta!´

Agradeço antecipadamente pela ajuda.
Sds/Hélio


Helio Nascimento

Respostas

14/03/2006

Edilcimar

na formatação vc colocou ponto como separador decimal, e a resposta de que o número não está correto está usando vírgula, veja as configurações regionais


Responder Citar

14/03/2006

Helio Nascimento

Edicilmar

Minhas Config.Regionais esta com Virgula. Fiz a alteração mencionada,mas não surtiu efeito. No DM before post := dm1.cds_requisicaoVALOR.ASCurrency:= StrToCurr(FrmFichaVales.DBEdit2.Text) - Não deu certo. Continua com a mesma mensagem de erro. O Estralho é que no Evento OnChange do DBEdit2 não há tratamento quanto à digitação de ponto ou virgula mas, ao inserir um numero com decimal não se consegue digitar o ponto, somente com virgula - tipo 33,20 . Não aceita a entrada com 33.20. Agora se Vc coloca um numero inteiro do tipo 33 e muda o foco para outro campo ai subscreve este DBEdit como sendo 33.00. ai voce volta no campo com o mouse e apaga o backspace os digitos dos centavos e coloca um numero e manda postar ai ele aceita. Faz o post e o Applyupdates normalmente.
Bem.. continuo aceitando sugestões. Faço também uma pergunta e voces como procedem com campos do tipo numeric(9,2) em seus formulários??

Saudações a todos/Hélio


Responder Citar

14/03/2006

Marco Salles

continuo aceitando sugestões.


[b:66f0dbbb3d]Então la vai....[/b:66f0dbbb3d]

O Estralho é que no Evento OnChange do DBEdit2 não há tratamento quanto à digitação de ponto ou virgula mas, ao inserir um numero com decimal não se consegue digitar o ponto,


isto é devido as suas configuraçoes Regionais... A sua Configuração regional esta com virgula como separador de casas decimais...Portanto entradas diferentes de virgulas não são aceitas..Também entradas com letras não são aceitas e voce não tem nenhum tratamento em relação a isto...Mas isto ja vem desde do Paradox , onde um campo definido como Currency , não recebe letras como dado de entradas

Não aceita a entrada com 33.20.
.
Isto é extremamente Normal , devido ao explicado anteriormente

Agora se Vc coloca um numero inteiro do tipo 33 e muda o foco para outro campo ai subscreve este DBEdit como sendo 33.00.

Isto ai não é normal...Mesmo que a mascara esteja com intenção de Ponto para separar os decimais , as configurçoes regionais Deveriam prevalecer..
:cry: :cry:
[b:66f0dbbb3d]Não consegue reproduzir no Meu PC , usando a sua mascara com um campo numerico definido da mesma forma , a situção que voce descreveu[/b:66f0dbbb3d]

Voce tem certeza desta situação ???? :arrow: Poderia arrriscar um palpite sobre o Dialeto ou a Languagem na hora de cosntruir o Banco , mas isto so seria um palpite.. Primeiro devemos esgotar outras linhas de raciocineo


Responder Citar

14/03/2006

Marco Salles

continuo aceitando sugestões.


[b:6c1a18a959]Então la vai....[/b:6c1a18a959]

O Estralho é que no Evento OnChange do DBEdit2 não há tratamento quanto à digitação de ponto ou virgula mas, ao inserir um numero com decimal não se consegue digitar o ponto,


isto é devido as suas configuraçoes Regionais... A sua Configuração regional esta com virgula como separador de casas decimais...Portanto entradas diferentes de virgulas não são aceitas..Também entradas com letras não são aceitas e voce não tem nenhum tratamento em relação a isto...Mas isto ja vem desde do Paradox , onde um campo definido como Currency , não recebe letras como dado de entradas

Não aceita a entrada com 33.20.
.
Isto é extremamente Normal , devido ao explicado anteriormente

Agora se Vc coloca um numero inteiro do tipo 33 e muda o foco para outro campo ai subscreve este DBEdit como sendo 33.00.

Isto ai não é normal...Mesmo que a mascara esteja com intenção de Ponto para separar os decimais , as configurçoes regionais Deveriam prevalecer..
:cry: :cry:
[b:6c1a18a959]Não consegue reproduzir no Meu PC , usando a sua mascara com um campo numerico definido da mesma forma , a situção que voce descreveu[/b:6c1a18a959]

Voce tem certeza desta situação ???? :arrow: Poderia arrriscar um palpite sobre o Dialeto ou a Languagem na hora de cosntruir o Banco , mas isto so seria um palpite.. Primeiro devemos esgotar outras linhas de raciocineo


Responder Citar

14/03/2006

Marco Salles

continuo aceitando sugestões.


[b:ead9b62a04]Então la vai....[/b:ead9b62a04]

O Estralho é que no Evento OnChange do DBEdit2 não há tratamento quanto à digitação de ponto ou virgula mas, ao inserir um numero com decimal não se consegue digitar o ponto,


isto é devido as suas configuraçoes Regionais... A sua Configuração regional esta com virgula como separador de casas decimais...Portanto entradas diferentes de virgulas não são aceitas..Também entradas com letras não são aceitas e voce não tem nenhum tratamento em relação a isto...Mas isto ja vem desde do Paradox , onde um campo definido como Currency , não recebe letras como dado de entradas

Não aceita a entrada com 33.20.
.
Isto é extremamente Normal , devido ao explicado anteriormente

Agora se Vc coloca um numero inteiro do tipo 33 e muda o foco para outro campo ai subscreve este DBEdit como sendo 33.00.

Isto ai não é normal...Mesmo que a mascara esteja com intenção de Ponto para separar os decimais , as configurçoes regionais Deveriam prevalecer..
:cry: :cry:
[b:ead9b62a04]Não consegue reproduzir no Meu PC , usando a sua mascara com um campo numerico definido da mesma forma , a situção que voce descreveu[/b:ead9b62a04]

Voce tem certeza desta situação ???? :arrow: Poderia arrriscar um palpite sobre o Dialeto ou a Languagem na hora de cosntruir o Banco , mas isto so seria um palpite.. Primeiro devemos esgotar outras linhas de raciocineo


Responder Citar

14/03/2006

Marco Salles

continuo aceitando sugestões.


[b:e285de0fd1]Então la vai....[/b:e285de0fd1]

O Estralho é que no Evento OnChange do DBEdit2 não há tratamento quanto à digitação de ponto ou virgula mas, ao inserir um numero com decimal não se consegue digitar o ponto,


isto é devido as suas configuraçoes Regionais... A sua Configuração regional esta com virgula como separador de casas decimais...Portanto entradas diferentes de virgulas não são aceitas..Também entradas com letras não são aceitas e voce não tem nenhum tratamento em relação a isto...Mas isto ja vem desde do Paradox , onde um campo definido como Currency , não recebe letras como dado de entradas

Não aceita a entrada com 33.20.
.
Isto é extremamente Normal , devido ao explicado anteriormente

Agora se Vc coloca um numero inteiro do tipo 33 e muda o foco para outro campo ai subscreve este DBEdit como sendo 33.00.

Isto ai não é normal...Mesmo que a mascara esteja com intenção de Ponto para separar os decimais , as configurçoes regionais Deveriam prevalecer..
:cry: :cry:
[b:e285de0fd1]Não consegue reproduzir no Meu PC , usando a sua mascara com um campo numerico definido da mesma forma , a situção que voce descreveu[/b:e285de0fd1]

Voce tem certeza desta situação ???? :arrow: Poderia arrriscar um palpite sobre o Dialeto ou a Languagem na hora de cosntruir o Banco , mas isto so seria um palpite.. Primeiro devemos esgotar outras linhas de raciocineo


Responder Citar

14/03/2006

Marco Salles

Senhores moderadores , estava dando erro na emissão da mensagem ,por isso a minha insistencia na postagem. So o que eu não sabia, era que elas estavam sendos enviadas . Portanto para não confudir a leitura do tópico , se puderem fazer o favor de deletar as redundantes ficaria melhor na leitura do referido


Responder Citar

14/03/2006

Helio Nascimento

Marco Salles.

Obrigado p/sua atenção.
Qto. ao Dialeto é 3 o Campo REQ_VALOR foi definido com um DOMINIO
Numeric(9,2). Resta-me criar este campo sem utilizar o DOMINIO e sim diretamente. Vou tentar o Resto... tudo certo. Também estou quase partindo para substituir o DBEdit por um Edit - Fazer o Tratamento na digitação para permissao de Key in[´0...9´, tecla backspace, enter, virgula] e no DM no
before post fazer a conversão para ASCURRENCY TANTO O CAMPO QUANTO AO EDIT.TEXT e ver se passa. Sei lá vou ver... caso vc. tenha algo diferente por favor me poste.

Obrigado e até breve/Hélio


Responder Citar

14/03/2006

Marco Salles

o que esta pegando é isso

Agora se Vc coloca um numero inteiro do tipo 33 e muda o foco para outro campo ai subscreve este DBEdit como sendo 33.00.


eu continuio achando que pode ser na construção do Banco.. Dialeto , PageSize e Charset.. Infelismente eu não sou a pessoa mais indicada para separar criteriosamente cada tipo de definição

Voce sabe como foi definido o seu PageSize e o seu Charset ???

Para que eu possa temtar simular este possivel ´erro´ aqui...

Também estou quase partindo para substituir o DBEdit por um Edit - Fazer o Tratamento na digitação para permissao de Key in[´0...9´, tecla backspace, enter, virgula] e no DM no before post fazer a conversão para ASCURRENCY TANTO O CAMPO QUANTO AO EDIT.TEXT e ver se passa. Sei lá vou ver... caso vc. tenha algo diferente por favor me poste.


Acho ainda cedo para tal...


Responder Citar

14/03/2006

Helio Nascimento

eu continuio achando que pode ser na construção do Banco.. Dialeto , PageSize e Charset.. Infelismente eu não sou a pessoa mais indicada para separar criteriosamente cada tipo de definição

Voce sabe como foi definido o seu PageSize e o seu Charset ???

Para que eu possa temtar simular este possivel "erro" aqui...


PageSize - 4.096 - Charset - Win1252 - Dialeto 3 - Banco FireBird 1.5
Linguagem D7

Marcos vc pediu ... aí está .

Até breve./Hélio


Responder Citar

14/03/2006

Marco Salles

PageSize - 4.096 - Charset - Win1252 - Dialeto 3 - Banco FireBird 1.5 Linguagem D7


é a mesma que eu estou usando... A unica diferença é que voce tem um DataModulo e eu não .. Outra diferença , eu não sei porque , talves seje por cauda do DataModule o meu tipo definido para o CDS é o TBCDField. e nao o TFMTBCDField que voce definiu no inicio

:?: :?: :?: :?:


Responder Citar

14/03/2006

Helio Nascimento

é a mesma que eu estou usando... A unica diferença é que voce tem um DataModulo e eu não .. Outra diferença , eu não sei porque , talves seje por cauda do DataModule o meu tipo definido para o CDS é o TBCDField. e nao o TFMTBCDField que voce definiu no inicio


Marcos é talvez seja por aí mesmo. Bom outro jeito é Destruir os componentes do DBExpress - o Trio -TSQLDataSet -TDataSetProvider e TClientDataSet. Refazer a sentença SQL no TSQLDataSet e por ai afora.
Ver se em vez de Vir o TFMTBCDFiel vem o TBCDField - Irei fazer isto e tão logo eu faça posto aqui o resultado ok.

Até breve/Obrigado por me acompanhar nesta ´Escuridão´...


Responder Citar

14/03/2006

Martins

[quote]PageSize - 4.096 - Charset - Win1252 - Dialeto 3 - Banco FireBird 1.5 Linguagem D7


é a mesma que eu estou usando... A unica diferença é que voce tem um DataModulo e eu não .. Outra diferença , eu não sei porque , talves seje por cauda do DataModule o meu tipo definido para o CDS é o TBCDField. e nao o TFMTBCDField que voce definiu no inicio

:?: :?: :?: :?:[/quote:b58e6533c8]

Fiz testes com DataModule e sem DataModule e não tive problema algum, usando Cds, só q o tipo de campo definido foi [b:b58e6533c8]TBCDField[/b:b58e6533c8] e não [color=red:b58e6533c8][b:b58e6533c8]TFMTBCDField[/b:b58e6533c8][/color:b58e6533c8]

Mas não usei Delphi 7, tem isso tb, usei D6.

Espero q alguém descubra a solução.


Responder Citar

14/03/2006

Helio Nascimento

Caro Martins

Estamos nesta caminhada. Como Disse acima fui no sistema e deletei o trio ja citado anteriormente. Coloquei novos componentes da palheta. Refiz tudo o campo REQ_VALOR vem como sendo TFMTBCDField . Então fui no Banco de Dados e Delete este campo e troquei o por FLOAT. Deletei no SQLDataSet e mandei e adicionei novamente. Eis que vem o famigerado TFMTBCDField. Bem deletei. Repeti os passos novamente com outro tipo como Sendo DOUBLE PRECISION e... eis que também vem com TFMTBCDField. Refiz tudo novamente e ai substitui por DECIMAL(9,2), e.... também vem como TFMTBCDField. bem.. todos os tipos do FireBird para vem com este formato. ai eu pergunto e ai... ´Como sair deste problema... ´ Ainda não tentei substituir o DBEdit por Edit e fazer o tratamento da entrada de dados e ver se consigo convertê-lo para o Tal BCD e fazer com que este valor consiga entrar no ´óvulo´ do Fire.

Para aqueles que me acompanham .. o meu muito obrigado pela caminhada até breve.../hélio


Responder Citar

14/03/2006

Emerson

quando vc refez todos esses passos (excluir componentes, excluir e incluir novamente os campos) você fechou a conexão com o banco de dados e abriu novamente?

se não fez, tente...

- feche a conexão com o banco de dados (o SQLConnection).
- exclua os campos persistentes
- pelo seu administrador de banco de dados (IBConsole, IBExpert), confirme se o campo está como numeric ou float
- volte ao Delphi a refaça a conexão com o banco de dados
- persista os campos

e boa sorte!


Responder Citar