delphi负数变正数_TAdoQuery读取Numeric类型字段负数为正的解决办法

在Delphi7中,使用TAdoQuery读取sybase中的数据,发现在读取numeric字段时,本来存储的是负数值,但tadoquery读出后为正数。

select workdays from workinfo

后来gg了一下,发现这是delphi的一个bug,用Delphi 2010写了一小工具,发现读取不会出现负数为正的情况,说明在后来的delphi版本中修正了此错误。跟踪代码时发现在adodb.pas中的GetFieldData函数中的子函数VarToBuffer中,delphi 2010和delphi 7有所区别,具体代码片断如下:

ftAutoInc, ftInteger:

Integer(Buffer^) := lVal;

将adodb.pas文件拷贝到工程目录下,并将delphi 2010中的此行代码拷贝到这个文件中,发现问题确实解决了,但是修改delphi的源文件还是容易为以后的开发带来隐患,所以还需要其他的办法来解决此问题。

既然是读取numeric字段会报错,那么我们可以想办法把这个字段动态的改变为其他的类型,在sql语句中通过一些数学运算即可改变,最简单的就是跟这个字段除以1(乘以1不会改变),所以最简单的解决办法就是如下更改sql语句:

select workdays / 1 as workdays from workinfo

这样就轻松解决了问题,如果大家遇到类似的问题也可以考虑这种办法来解决问题。

打赏

f69872ab5631b766bfb8c62b6b7d28fa.png微信扫一扫,打赏作者吧~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值