Como sair deste problema

13/03/2006

0

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

Helio Nascimento

Responder

Posts

14/03/2006

Martins

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?


Responder

14/03/2006

Helio Nascimento

Caros colegas
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



Responder

14/03/2006

Helio Nascimento

Caros colegas
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



Responder

14/03/2006

Helio Nascimento

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.


Responder

14/03/2006

Helio Nascimento

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


Responder

14/03/2006

Marco Salles

xiiiiiiiiiiii

Igual ao seu problema

http://forum.clubedelphi.net/viewtopic.php?t=11131&highlight=tfmtbcdfield+dbexpress

Alguns topicos relacionado a este tipo de Dados , mandam efetuar uma configuração no Banco

Faça uma pesquisa sobre TFMTBCDField e comprove... E sempre o mesmo tipo de erro...

Ainda bem que o meu delphi nunca declarou um tipo assim..heheheheh


Responder

14/03/2006

Marco Salles

xiiiiiiiiiiii

Igual ao seu problema

http://forum.clubedelphi.net/viewtopic.php?t=11131&highlight=tfmtbcdfield+dbexpress

Alguns topicos relacionado a este tipo de Dados , mandam efetuar uma configuração no Banco

Faça uma pesquisa sobre TFMTBCDField e comprove... E sempre o mesmo tipo de erro...

Ainda bem que o meu delphi nunca declarou um tipo assim..heheheheh


Responder

14/03/2006

Marco Salles

Helio , voce talvez nen tenha lido sobre um tópico e estou lhe enviando outro ..

Olhe so o que achei

Nesse topico

http://forum.clubedelphi.net/viewtopic.php?t=11131&highlight=tfmtbcdfield+dbexpress

No ´AfterConnect´-Event: SQLConnection.Execute(´alter session set NLS_NUMERIC_CHARACTERS=´´.,´´´, NIL,NIL);


Eu não sei se esto funciona ..

Noutro tópico o cara dis

http://forum.clubedelphi.net/viewtopic.php?t=28027&highlight=tfmtbcdfield+dbexpress


já consegui resolver o problema. setei a variável de ambietne LC_NUMERIC para en_US. (export LC_NUMERIC=en_US) Isso diz que o padrão de números do ambiente é separado por . e não por , .


O problema é que ele não diz aonde faz isto... :cry: :cry: :cry:

Mas ja da para perceber que voce não é o unico


Responder

14/03/2006

Helio Nascimento

Caro Marco Salles

Agradeço pela sua gentileza de fazer a pesquisa, e interagir comigo e aos demais que estao em modo de leitura. Mais tarde farei os testes com o que foi abordados nos dois tópicos e breve faço a comunicação sobre meus resultados. Estamos no covil sendo assistido por milhares. Mas venceremos este danado do delphi-dbexpress - firebird - conecção e por ai. Sempre há uma solução. Tem que batalhar ai é que fica o lado bom do programador. Um verdadeiro serviçal à mercê de outros que acham que qualquer input é um programinha qualquer ,mas nao sabe nos bastidores o que sofremos por querer fazer esta maquina (burra) entender o que queremos que ela faça e bem feito.Até breve caro amigo.

Saudações/Hélio


Responder

14/03/2006

Helio Nascimento

Caro Marco Salles

Fiz o Teste. Não passa. Não entende o que é ´session´ Depois de ler estes tópicos são para bancos de dados do ORACLE talvez o nosso amigo EMERSON.EN possa traduzí-lo para o nosso FIREBIRD, que sabe dá certo.

Ok até breve!/Hélio


Responder

14/03/2006

Marco Salles

Pode ser do Oracle .. Mas da para perceber que ta meio casca brava .. Ta dando muito erro

Mas eu continuio pesquisando , porque o seu erro de hoje pode ser o meu de amanha

Pergunta que eu faço :::

[b:6690a1c2a9]Voce disse que esta usando O Firibird com o DbExpress
Mas qual o Driver de conexão que voce esta usando ????[/b:6690a1c2a9]


Responder

14/03/2006

Martins

[quote:ad9f263f83=´Marco Salles´]Pode ser do Oracle .. Mas da para perceber que ta meio casca brava .. Ta dando muito erro

Mas eu continuio pesquisando , porque o seu erro de hoje pode ser o meu de amanha

Pergunta que eu faço :::

[b:ad9f263f83]Voce disse que esta usando O Firibird com o DbExpress
Mas qual o Driver de conexão que voce esta usando ????[/b:ad9f263f83][/quote:ad9f263f83]

Interessante essa pergunta.

não sei se ajuda, mas dê uma olhada nesse link.

[url]http://qc.borland.com/wc/qcmain.aspx?d=2711[/url]

Coloque aqui o DDL de sua base por favor!


Responder

14/03/2006

Martins

Um outro fato interessante é q esse campo [color=darkblue:f7801e9087][b:f7801e9087]TFmtBCDField[/b:f7801e9087][/color:f7801e9087] é colocado automaticamente, mas isso só parece ocorrer apartir do Delphi 7, ou estou enganado?


Responder

14/03/2006

Marco Salles

Um outro fato interessante é q esse campo TFmtBCDField é colocado automaticamente, mas isso só parece ocorrer apartir do Delphi 7, ou estou enganado?


Pelo que pesquisei ate agora ele é colocado automaticamente , porem depende do valor definido pelo precision.. Asiim para cada par de definição é colocado ou um ou outro

Mas acho tb , que tem change de ser o Drive que ele esta usando para se comunicar com este banco Firibird.. O dive que eu esto ume referindo é aquele definido pela conexão no SqLConnection


Responder

14/03/2006

Martins

[quote:5695b0812c=´Marco Salles´]
Um outro fato interessante é q esse campo TFmtBCDField é colocado automaticamente, mas isso só parece ocorrer apartir do Delphi 7, ou estou enganado?


Pelo que pesquisei ate agora ele é colocado automaticamente , porem depende do valor definido pelo precision.. Asiim para cada par de definição é colocado ou um ou outro

Mas acho tb , que tem change de ser o Drive que ele esta usando para se comunicar com este banco Firibird.. O dive que eu esto ume referindo é aquele definido pela conexão no SqLConnection[/quote:5695b0812c]

vc usa o[b:5695b0812c] dbexpUIBfire15.dll[/b:5695b0812c]?


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar