我对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的tagVariant值为:
(14,32768,0,0,10,10,10,1.4012984643e-44,4.9406564584e-323,True,10,0.001,4.9406564584e-323,,$A,$A '',$A,$A,#10,10,10,10,10,$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,#10,10,10,10,10,$A,,$A,$A)
foo值将是10,而bar值将是-10。
这是一个bug吗?
有WorkAround吗?
修好了吗?
我使用Microsoft OLEDB provider for Oracle和Oracle Provider for OLEDB进行了测试。所有的测试都是使用Delphi6完成的。
发布于 2013-07-23 17:12:44
我不知道我是否理解正确,但请尝试这样做:
select cast(replace(-10,'-','') as number(9)) foo, -10 bar
from dual;https://stackoverflow.com/questions/16199517
复制相似问题