Array
(
)

Como sair deste problema

Helio Nascimento
   - 13 mar 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


Edilcimar
   - 14 mar 2006

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


Helio Nascimento
   - 14 mar 2006

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


Marco Salles
   - 14 mar 2006


Citação:
continuo aceitando sugestões.


Então la vai....


Citação:
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


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


Citação:
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..

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

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


Marco Salles
   - 14 mar 2006


Citação:
continuo aceitando sugestões.


Então la vai....


Citação:
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


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


Citação:
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..

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

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


Marco Salles
   - 14 mar 2006


Citação:
continuo aceitando sugestões.


Então la vai....


Citação:
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


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


Citação:
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..

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

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


Marco Salles
   - 14 mar 2006


Citação:
continuo aceitando sugestões.


Então la vai....


Citação:
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


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


Citação:
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..

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

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


Marco Salles
   - 14 mar 2006

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


Helio Nascimento
   - 14 mar 2006

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


Marco Salles
   - 14 mar 2006

o que esta pegando é isso


Citação:
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...


Citação:
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...


Helio Nascimento
   - 14 mar 2006

#Código

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


Marco Salles
   - 14 mar 2006


Citação:
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

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


Helio Nascimento
   - 14 mar 2006


Citação:
é 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´...


Martins
   - 14 mar 2006


Citação:

Citação:
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

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


Fiz testes com DataModule e sem DataModule e não tive problema algum, usando Cds, só q o tipo de campo definido foi TBCDField e não TFMTBCDField

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

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


Helio Nascimento
   - 14 mar 2006

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


Emerson
   - 14 mar 2006

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!


Martins
   - 14 mar 2006


Citação:
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!


Isso mesmo, outra coisa, vc conegue inserir os dados normalmente pelo IbExpert?


Helio Nascimento
   - 14 mar 2006

Caros colegas

Citação:


Resolvi o problema desta forma: Com o nosso velho e bom Edit. Não teve jeito até agora. Fiz de tudo no Formulario e DModule.

Eis o meu algoritimo:

1- Substitui o DBEdit por um Edit

2- Fiz o Tratamento da Entrada de Dados neste Edit para aceitar somente
números de 0..9 - tecla Blackspace, a Tecla Enter, a Tecla da Virgula.

3- No Evento OnChange do Edit1 ficou assim
begin
if DtSrc.DataSet.Active then
if not(DtSrc.DataSet.State in [dsInsert,dsEdit]) then
DtSrc.DataSet.Edit;
end;


4- No Data Modulo (DM) No Evento Before Post :
dm1.cds_requisicaoREQ_VALOR.AsVariant := FrmFichaVales.Edit.Tex;

5- Não aceita ou tipo de conversão a não ser o Variant.

6- No BD é gravado 33,20 e esta como Numeric(9,2).

7- Quando eu recupero o Registro faço a entrada Manual no Edit1.Text
Edit1.Text:=
Format(´¬m´,[dm1.cds_RequisicaoREQ_VALOR.AsCurrency]);

8-Se utilizar outro formato de conversão - que não seja AsCurrency, não
aceita ´dá pau´.

9 - Bem por ora é somente isto. Se alguem tiver uma outra solução, por favor sinta-se a vontade para informar-nos.

Para todos um abraço/Obrigado pela companhia./Hélio





Helio Nascimento
   - 14 mar 2006

Caros colegas

Citação:


Resolvi o problema desta forma: Com o nosso velho e bom Edit. Não teve jeito até agora. Fiz de tudo no Formulario e DModule.

Eis o meu algoritimo:

1- Substitui o DBEdit por um Edit

2- Fiz o Tratamento da Entrada de Dados neste Edit para aceitar somente
números de 0..9 - tecla Blackspace, a Tecla Enter, a Tecla da Virgula.

3- No Evento OnChange do Edit1 ficou assim
begin
if DtSrc.DataSet.Active then
if not(DtSrc.DataSet.State in [dsInsert,dsEdit]) then
DtSrc.DataSet.Edit;
end;


4- No Data Modulo (DM) No Evento Before Post :
dm1.cds_requisicaoREQ_VALOR.AsVariant := FrmFichaVales.Edit.Tex;

5- Não aceita ou tipo de conversão a não ser o Variant.

6- No BD é gravado 33,20 e esta como Numeric(9,2).

7- Quando eu recupero o Registro faço a entrada Manual no Edit1.Text
Edit1.Text:=
Format(´¬m´,[dm1.cds_RequisicaoREQ_VALOR.AsCurrency]);

8-Se utilizar outro formato de conversão - que não seja AsCurrency, não
aceita ´dá pau´.

9- No evento OnKeyPress ficou assim:
procedure TFrmFichaVales.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
inherited;
if(not (Key in [´0´..´9´,#13,9,8])) then Key := 0;
end;

10 - Bem por ora é somente isto. Se alguem tiver uma outra solução, por favor sinta-se a vontade para informar-nos.

Para todos um abraço/Obrigado pela companhia./Hélio





Helio Nascimento
   - 14 mar 2006

Caros amigos Emerson.en e Martins

Enquanto vcs. me respondiam estava fazendo outro montando a outra solucao, quando voltei aqui vc. ja haviam postado. Vou Fazer o que recomedam e volto em breve com uma resposta. Apesar de estar funcionando com o Edit conforme postei, mas o certo é certo e errado as vezes é certo e as vezes não é . É muito deselegante o coitado do DBEdit perder a parada para o o Seu primo ou irmão sei Edit. Não é mesmo.
Volto breve

Até daqui a pouco.


Helio Nascimento
   - 14 mar 2006

Emerson.en e Martins

Fiz conforme descrito.

Voltou a dar o mesmo Formato TFMTBCDField. e apresentando as mesmas conseqüencias retro descritas.
Estou com uma solução (Temporária?/Definitiva!) conforme postei anteriormente. Estou ´ligado´ em outras soluções o ´paciente´ está firme com o Edit.

Sds/Hélio