単精度浮動小数点型または倍精度浮動小数点型のフィールドを Oracle にエクスポートすると Access でエラーが発生する

難易度 : 中。基本的なマクロ、コーディング、相互運用性に関する知識が必要です。



この資料は Microsoft Access データベース (.mdb) および Microsoft Access プロジェクト (.adp) について記述したものです。



現象

Oracle ODBC ドライバを使用して、単精度浮動小数点型または倍精度浮動小数点型のフィールドを持つ Access テーブルをエクスポートするときに、それらのフィールドのエクスポートが失敗し、次の現象が発生します。

Microsoft Oracle ドライバで、次のエラー メッセージが表示されます。

すべてのデータをテーブルに追加できませんでした。

キー違反のため、<number> 件のレコードのデータが失われ、0 件のレコードが削除されました。


  • データが失われたときは、貼り付けまたはインポートしたデータが、対象となるテーブルのフィールドのデータ型または "FieldSize/フィールドサイズ" プロパティと一致していません。


  • レコードが削除されたときは、対象となるテーブルにすでに存在する主キー値が貼り付けたレコードに含まれているか、テーブル間に設定されているリレーションシップの参照整合性に違反しています。


    継続しますか?
バージョン 8.1.6 までの Oracle ODBC ドライバでは、次のエラー メッセージが表示されます。

ODBC - call failed

[Oracle][ODBC][ORA] ORA-01401: Inserted value too large for column (#1401)

原因

Microsoft Access 97 では、エクスポート処理によって単精度浮動小数点型または倍精度浮動小数点型のフィールドが VarChar2(40) に変換されます。しかし、Microsoft Access 2000 およびそれ以降では、データを保持するには小さすぎる VarChar2(4) にフィールドが変換されます。

解決方法

データを Oracle に正常にエクスポートするには、該当するテーブルに基づくクエリを使用します。CStr() 関数を使用して、データ型を文字列に変換します。



たとえば、次の SQL 構文を例に説明します。

SELECT tblExample.pkeyDataID, tblExample.dblTest
FROM tblExample;
dblTest は倍精度浮動小数点型のフィールドです。この SQL 構文を次のように変更して、dblTest を文字列型に変換します。


SELECT tblExample.pkeyDataID, CStr([dblTest]) AS Expr1
FROM tblExample;
このクエリにより、Oracle に正常にエクスポートできるようになります。

この問題は、Microsoft Jet 4.0 Database Engine Service Pack 8 (SP8) で修正済みです。Microsoft Jet 4.0 Database Engine SP8 の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。


829558 [ACC2003] Jet 4.0 Service Pack 8 について

状況

マイクロソフトでは、この問題をこの資料の冒頭に記載したマイクロソフト製品の問題として認識しています。

詳細

この資料に記載されているサードパーティ製品は、マイクロソフトと関連のない他社の製品です。明示または黙示にかかわらず、これらの製品のパフォーマンスや信頼性についてマイクロソフトはいかなる責任も負わないものとします。


プロパティ

文書番号:301915 - 最終更新日: 2008/11/11 - リビジョン: 1

フィードバック