Delphi 6 + Oracle 10gR2 + ADO + ClientDataSet に問題があります。
フィールド NUMBER(19,9) で集計関数を実行すると、結果の列は Delphi に NUMBER データ型を返し、一部のマシンでは精度 38 の TBCDField としてロードされ、すべてがうまくいきますが、一部のマシンでは精度 255 の TBCDField としてロードされ、フィールドで BCD オーバーフローが発生します。
問題を再現するには、列 NUMBER (19,9) を持つテーブルを作成し、SELECT SUM( column_name ) column_name FROM table_name GROUP BY column_nameを実行します。
列が NUMBER(19,9) であるにもかかわらず、結果の列は精度が定義されていない NUMBER になります。
Delphi で、DataSetProvider がリンクされ、ClientDataSet が DataSetProvider にリンクされた状態で、クエリを ADOQuery にロードします。ClientDataSet.Open を呼び出した後、一部のマシンでは NUMBER フィールドに BCD オーバーフロー メッセージが表示されますが、多くのマシンでは問題なく動作します。
midas.dll、ADO、サーバー、ユーザー、Oracle クライアントが両方のマシンですべて同じであるのに、一部のマシンでこの 255 の精度が得られるのはなぜですか? 何か案は?