DBExpress – Campos numéricos com Oracle 7


Acessar campos numéricos do Oracle com o DBExpress pode apresentar problemas de formatação e o erro ???TDBXError with message ‘ORA-01722: número inválido’??? no ApplyUpdates, uma forma de resolver/contornar este problema é definir o parâmetro NLS_NUMERIC_CHARACTERS na conexão do Oracle.

Adicione o código no evento AfterConnect do TSQLConnection:

procedure TMainDM.SQLConnectionAfterConnect(Sender: TObject);
const
  SQL = 'ALTER SESSION SET NLS_NUMERIC_CHARACTERS=''.,''';
begin
  SQLConnection.ExecuteDirect(SQL);
end;

Comentários

  1. NelZ disse:

    thank you very much!!!
    There was this error in my projects in D2010!!!
    fantastic..
    thank you really…

  2. Gabriel disse:

    Cara muito bom … vai no Delphi 7 tb … valeu!

  3. Vinicius disse:

    Aleluia que alguém fala uma coisa que presta!

  4. Alexandre disse:

    Valeu! Informação muito boa.

  5. Jeremias disse:

    Cara tem alguma dica pra resolver esse problema com FireBird 2.1 ?

    1. Cesar disse:

      @Jeremias: Este erro é exclusivo do oracle veja a mensagem “ORA-01722″.
      Você deve ter um erro parecido, para poder te ajudar, você precisa informar mais detalhes e pelo menos a mensagem de erro completa.

  6. Jeremias disse:

    Ok.
    Uso D7 + Dbexpress + FB 2.1 ….

    Não uso Driver especifico do FireBird, uso padrão IBconnection + dbexpint + Vendor Lib = fbclient

    Uso 1 sqlDataSet + 1 DataSetProvider com a propriedade poAllowCommandText=True pra pesquisas genéricas e ligo meus ClientDataSet a estes e tem funciona tranquilo.

    Mas estou com problema quando tento comparar ou armazenar o conteudo de campos do tipo NUMERC ou DECIMAL

    Dá o erro: raised exception class EconvertError with message = is not a valid floating point value

    No debug, se eu apontar para o tipo AsFloat ele me mostra:

    cdEstoque.fieldbyname(quantidade).asfloat = delphi execption EconvertError at $9A9F949

    Detalhe: Já tentei AsFloat, AsCurrency, AsBcd e dá o mesmo.

    Preciso apenas comparar essa expressão:

    if cdEstoque.fieldbyname(quantidade).asfloat <=0 then

    Detalhe: A pesquisa abre normal e consigo Navegar, armazenar, ou comparar qualquer tipo de dado diferente de NUMERIC ou DECIMAL

    Mais informação no link: http://www.devmedia.com.br/forum/delphi/413062-Erro-ao-comparar-ou-armazena-campos-numericos-com-Dbexpress.html

    Ajuda aí …