我是一个有用的助手,可以翻译文本。
我有一个关于
这是我的 SQL 语句:
当您添加“foo”字段时,将创建一个TIntegerField而不是TBCDField,因为此时更改了类型。
功能:
在此时未考虑该信号:
TIntegerField的值为:
我有一个关于
TADOQuery
的巨大问题:这是我的 SQL 语句:
select cast(-10 as number(9)) foo, -10 bar
from dual
当您添加“foo”字段时,将创建一个TIntegerField而不是TBCDField,因为此时更改了类型。
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;
TIntegerField的值为:
(14, 32768, 0, 0, 10, 10, 10, 1.4012984643e-44, 4.9406564584e-323, True, 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, True, 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提供程序和Oracle Provider for OLEDB进行了测试。 所有测试都使用Delphi 6完成。
select cast(-10 as number(10)) foo
。你能做到吗?另一个选择是替换ADODB.pas(或覆盖)TCustomADODataSet.GetFieldData
。在这里查看。 - kobik