DBexpress ora-01722 Numero invalido
Oi Pessoal,
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:
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
Curtidas 0
Respostas
Joao_ricardomp
05/09/2003
Alessandra,
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.
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
Claudio_f
05/09/2003
Alessandra,
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.
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
Alessandramorena18
05/09/2003
Ola Claudio,
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]
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
Gabelanga
05/09/2003
Ja tive problema com isso.
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.
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
Alessandramorena18
05/09/2003
Oi Gabelanga,
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.
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