在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。不知道问题在哪里? 请高手们赶快来帮忙~~~

解决方案 »

  1.   

    将c、d与c和d之差都列出来看看:
    sqlstr="select a, b, c,d, c-d from tablename"
      

  2.   

    谢谢各位,但是问题还没有任何突破!~~to viena(维也纳nn-实心木头人):  说是Oracle的问题,倒不如说是VB的问题,我用SQL Navigator读出来的数据都是准确的!
    to palmkey(原水):  可能是我说的不够明确,我说c-d的范围在0到0.02之间,意思是 0<c-d<0.02。
    to Leftie(左手,为人民币服务):  谢谢你的提醒,我发现SQL语句里面只要出现运算符,则运算结果都会被取整,哪怕结果是0.999都会变成0,但是1.001就变成1了。只是不知道为什么会这样? 为什么直接抓c和d都没有取整呢?
      

  3.   

    在 SQL 指定列类型,如果是 SQL Server,可以写成
    select a, b, c, CASE(c-d AS float(126)) from tablename
    Oracle 中也肯定有响应的类型转换函数/语句
      

  4.   

    你查一下ORACLE的SQL帮助,看看有没有转换成浮点数的函数,我这没有ORACLE环境,测试不了!!
      

  5.   

    哈哈,回复好快,是不是今天大家都没心思上班呢~~  可惜我还要工作到年三十的17:30~再次谢谢各位的关心,其实我之所以在这里问问题,就是我认为很明确是VB的问题,而不是Oracle的问题,不过我还是在SQL语句中用了各位提到的强制类型转换,发现的结果让我更确定是VB的问题了:不管是c, d, 还c-d, 只要用了round函数处理后,到了VB里面都变成取整后的值了,看来round函数也跟那些运算符一样麻烦~~呵呵,还请各位再帮忙想想哦~~ 多谢了!
      

  6.   

    //VB的问题
    VB本身没有什么能力的,都是使用外部的东西,VB做数据库一般是用ADODB的,是比较高层的对象,封装了具体的OLEDB的具体操作,具体操作由OLEDB提供程序(或者绕个弯通过ODBC驱动程序)完成,而OLEDB提供程序、ODBC驱动程序一般是由数据库厂商提供的,Oracle方面用得不多,具体也不太了解//set rec=datasource.openrecordset(sqlstr, dbOpenSnapshot, 64)
    sorry,没看懂妳这一句是虾米意思?
    是用什么打开的呢?是ADODB吗?
      

  7.   

    楼主改用ADODB的Recordset打开试一下呢
      

  8.   

    呵呵,不需要改用了,我用的就是ADODB的Recordsetdim rec as ADODB.Recordset
    我就是rec(0), rec(1) ...这样的方式读的数据, 可得到的是一列“0”
      

  9.   

    select a, b, c-d,c from tablename
    select a, b, c from tablename
    select (c-d) from tablename
      

  10.   

    你查一下ORACLE的SQL帮助,看看有没有转换成浮点数的函数,我这没有ORACLE环境,测试不了!!
    是啊 楼主看下 是不是浮点的问题啊
      

  11.   

    oracle 中的 float(126) 具体是什么精度?可能在无法自动转换为 ado 响应的浮动类型,你把精度降下来试试
      

  12.   

    to Tiger_Zhao(VB老鸟):  谢谢!
      float(126)精度是很大了,要22个字节~~ 不过为什么直接抓一个字段就没问题,抓运算后的字段就要取整呢?  在Oracle强制类型转换,我也不太了解,不过将计就计,我干脆加了一个字段,用trigger让它等于c-d,然后直接抓这个字段,问题已经解决了~~ 不过我暂时还不想结帖,还欢迎大家来赐教类型转化的方法!
      

  13.   

    一般 Double 类型为 8 个字节,你看能不能将精度缩小点,或者用固定小数的数值类型