2013-04-24 101 views
4

负数我有TADOQuery一个巨大的问题:转换与TADOQuery

这是我的SQL:

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

相反TBCDField,当你添加了“foo”的领域TIntegerField将被创建的,

procedure TCustomADODataSet.InternalInitFieldDefs; 

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

功能:

因为类型在该点变

是不是在这一点上考虑信号:

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

tagVariant为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,$ 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。

这是一个错误?
有一个WorkAround?
它被修复了吗?

我测试过使用Microsoft OLEDB提供程序的Oracle和Oracle提供程序的OLEDB。 所有测试已采用Delphi 6

+0

有什么建议?疑问? – EProgrammerNotFound 2013-04-24 23:02:48

+0

我还没有任何Oracle数据库即将尝试这个。 ;-) – 2013-04-24 23:23:37

+0

@WarrenP :-(ok – EProgrammerNotFound 2013-04-24 23:26:22

回答

0

我不知道如果我理解正确的话做了,但是尝试了这种方式:

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