首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用TADOQuery转换负数

使用TADOQuery转换负数
EN

Stack Overflow用户
提问于 2013-04-25 02:27:33
回答 1查看 257关注 0票数 4

我对TADOQuery有一个很大的问题

这是我的SQL:

代码语言:javascript
复制
select cast(-10 as number(9)) foo, -10 bar 
  from dual

当您添加"foo“字段时,将创建TIntegerField而不是TBCDField,因为此时类型已更改:

代码语言:javascript
复制
procedure TCustomADODataSet.InternalInitFieldDefs;

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

函数:

代码语言:javascript
复制
function TCustomADODataSet.GetFieldData(Field: TField; Buffer: Pointer;
  NativeFormat: Boolean): Boolean;

在这一点上没有考虑信号:

代码语言:javascript
复制
    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完成的。

EN

回答 1

Stack Overflow用户

发布于 2013-07-23 17:12:44

我不知道我是否理解正确,但请尝试这样做:

代码语言:javascript
复制
select cast(replace(-10,'-','') as number(9)) foo, -10 bar 
  from dual;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16199517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档