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,49406564584e-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,49406564584e-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,条形值为-10。
这是一个错误吗?
有一个WorkAround?
这是固定的?
我使用Microsoft OLEDB提供程序进行Oracle和Oracle Provider for OLEDB进行了测试。 所有测试都是使用Delphi 6完成的。
答案 0 :(得分:0)
我不知道我是否理解正确,但请尝试这样:
select cast(replace(-10,'-','') as number(9)) foo, -10 bar
from dual;