4

私は大きな問題を抱えていTADOQueryます:

これは私のSQLです:

select cast(-10 as number(9)) foo, -10 bar 
  from dual

この時点でタイプが変更されるため、「foo」フィールドを追加すると、TBCDField の代わりに TIntegerField が作成されます。

procedure TCustomADODataSet.InternalInitFieldDefs;

    if (F.Type_ = adNumeric) and (F.NumericScale = 0) and
       (F.Precision < 10) then
      FieldType := ftInteger;

関数:

function TCustomADODataSet.GetFieldData(Field: TField; Buffer: Pointer;
  NativeFormat: Boolean): Boolean;

この時点では信号を考慮していません:

    ftAutoInc, ftInteger:
      Integer(Buffer^) := lVal;

tagVariantTIntegerFieldの値は次のとおりです。

(14, 32768, 0, 0, 10, 10, 10, 1.4012984643e-44, 4.9406564584e-323, 真, 10, 0.001, 4.9406564584e-323, , $A, $A, $A, $A, $ A, $A, $A, $A, $A, $A, $A, $A, $A '', $A, $A, $A, $A, $A, #10, 10, 10, 10, 10, $A, , $A, $A, $A, $A)

これは TBCDField でも同じです:

(14, 32768, 0, 0, 10, 10, 10, 1.4012984643e-44, 4.9406564584e-323, 真, 10, 0.001, 4.9406564584e-323, , $A, $A, $A, $A, $ A, $A, $A, $A, $A, $A, $A, $A, $A '', $A, $A, $A, $A, $A, #10, 10, 10, 10, 10, $A, , $A, $A, $A, $A)

foo の値は 10 になり、bar の値は -10 になります。

これはバグですか?
回避策はありますか?
修正されましたか?

Microsoft OLEDB provider for Oracle と Oracle Provider for OLEDB を使用してテストしました。すべてのテストは、Delphi 6 を使用して行われています。

4

1 に答える 1