在Oracle中有这样一个表:
(
a varchar2(16),
b date,
c float(126),
d float(126)
)同时,有用VB6写的这一段程序:
sqlstr="select a, b, c, c-d from tablename"
set rec=datasource.openrecordset(sqlstr, dbOpenSnapshot, 64)每个字段都是非空的,且 c-d 的范围在0到0.02之间,但我看到的是: rec(2)=c都没有问题,rec(3)全部都显示为0。不知道问题在哪里? 请高手们赶快来帮忙~~~
(
a varchar2(16),
b date,
c float(126),
d float(126)
)同时,有用VB6写的这一段程序:
sqlstr="select a, b, c, c-d from tablename"
set rec=datasource.openrecordset(sqlstr, dbOpenSnapshot, 64)每个字段都是非空的,且 c-d 的范围在0到0.02之间,但我看到的是: rec(2)=c都没有问题,rec(3)全部都显示为0。不知道问题在哪里? 请高手们赶快来帮忙~~~
sqlstr="select a, b, c,d, c-d from tablename"
to palmkey(原水): 可能是我说的不够明确,我说c-d的范围在0到0.02之间,意思是 0<c-d<0.02。
to Leftie(左手,为人民币服务): 谢谢你的提醒,我发现SQL语句里面只要出现运算符,则运算结果都会被取整,哪怕结果是0.999都会变成0,但是1.001就变成1了。只是不知道为什么会这样? 为什么直接抓c和d都没有取整呢?
select a, b, c, CASE(c-d AS float(126)) from tablename
Oracle 中也肯定有响应的类型转换函数/语句
VB本身没有什么能力的,都是使用外部的东西,VB做数据库一般是用ADODB的,是比较高层的对象,封装了具体的OLEDB的具体操作,具体操作由OLEDB提供程序(或者绕个弯通过ODBC驱动程序)完成,而OLEDB提供程序、ODBC驱动程序一般是由数据库厂商提供的,Oracle方面用得不多,具体也不太了解//set rec=datasource.openrecordset(sqlstr, dbOpenSnapshot, 64)
sorry,没看懂妳这一句是虾米意思?
是用什么打开的呢?是ADODB吗?
我就是rec(0), rec(1) ...这样的方式读的数据, 可得到的是一列“0”
select a, b, c from tablename
select (c-d) from tablename
是啊 楼主看下 是不是浮点的问题啊
float(126)精度是很大了,要22个字节~~ 不过为什么直接抓一个字段就没问题,抓运算后的字段就要取整呢? 在Oracle强制类型转换,我也不太了解,不过将计就计,我干脆加了一个字段,用trigger让它等于c-d,然后直接抓这个字段,问题已经解决了~~ 不过我暂时还不想结帖,还欢迎大家来赐教类型转化的方法!