O Access causa um erro ao exportar campos com o tipo de dados único ou duplo para o Oracle

Número original da BDC: 301915

Nota

Necessita de competências básicas de macro, programação e interoperabilidade. Este artigo aplica-se a uma base de dados do Microsoft Access (.mdb) e a um projeto do Microsoft Access (.adp).

Sintomas

Quando utiliza o controlador Oracle ODBC para exportar uma tabela do Access que tenha campos do tipo de dados Single ou Double, o controlador não exporta esses campos da seguinte forma.

O controlador Microsoft Oracle apresenta a seguinte mensagem de erro:

O Microsoft Access não conseguiu acrescentar todos os dados à tabela. Os conteúdos dos campos nos <registos numéricos> foram eliminados e perderam-se 0 registos devido a violações de chaves.

  • Se os dados forem eliminados, os dados que colou ou importou não correspondem aos tipos de dados do campo ou à propriedade Tamanhodo Campo na tabela de destino.
  • Se os registos forem perdidos, os registos colados contêm valores de chave primária que já existem na tabela de destino ou violam as regras de integridade referencial de uma relação definida entre tabelas. Quer continuar mesmo assim?

Os controladores ODBC Oracle até à versão 8.1.6 e incluem a seguinte mensagem de erro:

ODBC - falha na chamada [Oracle][ODBC][ORA] ORA-01401: Valor inserido demasiado grande para a coluna (#1401)

Causa

No Microsoft Access 97, o processo de exportação converte os campos de tipo de dados Único e Duplo em VarChar2(40). No entanto, no Microsoft Access 2000 e posterior, os campos são convertidos em VarChar2(4), que é demasiado pequeno para armazenar os dados.

Resolução

Para exportar os dados com êxito para o Oracle, utilize uma consulta com base nas tabelas relevantes. Utilize a função CStr()para converter o tipo de dados em Cadeia.

Por exemplo, considere a seguinte sintaxe SQL:

SELECT tblExample.pkeyDataID, tblExample.dblTest
FROM tblExample;

em que dblTest é um campo com um tipo de dados duplo. Converta dblTest num tipo de dados Cadeia ao fazer a seguinte alteração à sintaxe SQL:

SELECT tblExample.pkeyDataID, CStr([dblTest]) AS Expr1
FROM tblExample;

A consulta pode agora ser exportada com êxito para o Oracle.

Este problema é resolvido no Microsoft Jet 4.0 Database Engine Service Pack 8 (SP8).

Estado

A Microsoft confirmou que se trata de um problema nos produtos Microsoft listados no início deste artigo.

Mais Informações

Os produtos de terceiros referidos neste artigo são fabricados por empresas independentes da Microsoft. A Microsoft não concede qualquer garantia, implícita ou de outra natureza, relativamente ao desempenho ou à fiabilidade destes produtos.