Fórum DBexpress ora-01722 Numero invalido #180094
05/09/2003
0
Eu estou tentando usar o dbexpress, porem quando acesso os dados, os valores aparecem como se fossem um numeros inteiro (ex: 2,18 -> 218).
E quando vou fazer uma insercao no banco da a seguinte mensagem ´ora-01722 Numero invalido´.
Ja pesquisei as perguntas e respostas no forum mas nao achei nada que pudece me ajudar. Meu banco eh ORACLE. Os campos numericos no Oracle aparecem com ´TFMTBCDField´.
Por favor help me, ja fazem uma semana que estou emcima disso e nao saio do chao.
:oops:
Alessandramorena18
Curtir tópico
+ 0Posts
05/09/2003
Joao_ricardomp
trabalho com Delphi e Oracle a algum tempo e me recordo de ter tido um tipo de problema parecido. No meu caso estava tentando gravar um Numeric 18,2 num Numeric 18 sem precisão. Sugestão reveja o tipo de dado no qual está tentando gravar. Faça testes isolados com INSERT no banco com o SQL Plus ou qualquer outro editor. Tente mudar o tipo de dado e ver como se comporta. Vencida esse primeiro passo exclua o componente SimpleDataSet, SQLQuery, SQLDataSet ou qualquer outro que esteja usando e crie novamente. Infelizmente a distância e baseado no que vc descreveu é o máximo que posso fazer.
Gostei + 0
05/09/2003
Claudio_f
Para o problema de mostrar os valores como inteiros eu resolvi colocando a linha abaixo no SQLConnection no Evento AfterConnect:
[color=red:cf29998835] SQLConnection1.Execute(´alter session set NLS_NUMERIC_CHARACTERS=´´.,´´´, NIL,NIL); [/color:cf29998835]
Agora o problema do insert ´erro ORA-01722 Numero invalido´ eh algum problema com os campos TFMTBCDField, nao sei como resolver.
Espero ter ajudado.
Gostei + 0
05/09/2003
Alessandramorena18
A tua dica deu certo para visualizar os dados, mas continuo com o problema do insert.
[color=darkred:155a28f0a1] > Para o problema de mostrar os valores como inteiros eu resolvi colocando a linha abaixo no SQLConnection no Evento AfterConnect:
> SQLConnection1.Execute(´alter session set NLS_NUMERIC_CHARACTERS=´´.,´´´, NIL,NIL);[/color:155a28f0a1]
Gostei + 0
07/09/2003
Gabelanga
O problema esta entre o drive do dbexpress referente ao oracle. Se vc tentar rodar seu programa com o Interbase, funcionará perfeitamente. Alias, inteiro, real, float, quaquerl tipo de numero da erro.
Eu consegui resolver esse problema mudando no registro do windows a linguagem do Cliente do Oracle. Não estou com o Oracle instalado, portanto naum consigo dizer o caminho exato, mas a sessaão do registro dentro da parte referente ao oracle é NSL_Lang... ou algo muito parecido. Ele deve estar configurado como portuguese_brazilian.algumacoisa e vc deve colocar american_america.alguma coisa. Troque apenas a parte antes do ponto.
Pronto, problema resolvido. Mas outros criados. Como vc deve saber a data dos americanos é diferente da nossa... Se quiser salvar as datas na forma do Brasil, terá que fazer todos tratamentos necessários.
Faz tempo que não uso DBExpress, mas deve existir algum novo drive do DBExpress q arrume esse monte de problemas.
Gostei + 0
08/09/2003
Alessandramorena18
HKEY_LOCAL_MACHINE --> SOFTWARE --> ORACLE --> HOME0 --> NLS_LANG
troquei BRAZILIAN PORTUGUESE_BRAZIL.WE8MSWIN1252 por AMERICAN_AMERICA.WE8MSWIN1252
e tambem tive de trocar nas configuracoes regionais do Painel de Controle do Windows a ´,´ por ´.´ na separacao dos decimais.
Com estas alteracoes o insert de campos numericos funcionou.
Ate nao descobrir outro jeito esse resolve o problema, Valeu pela dica.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)