编写了一个小系统,其中有对数据库的统计运算,我用数据访问对象来解决的。数据库是每日更新的,有关键字“日期”,其他字段名有“取款”,“存款”等,现在要对文本框中指定的日期段在数据库中进行相应的统计求和,这里假设是计算“取款”数量并且假定指针已经定位到起始记录处
select case combo1.text
    case "取款"
    do while not db_r.eof and db_r.fields("日期").value<=cdate(text2.text)
      'text2.text为输入到文本框中的截止日期
      number=number+db_r.fields("取款").value   '求和
      db_r.movenext
    loop
    case  ....
end select
问题是这样的:当把截止日期(即text2.text)输入数值为数据库中的最后一条记录的日期时,程序运行会死!!!而除此之外,任何统计都可按照计划进行,谁知道问题出在哪里了?注:除了数据库的最后一个记录不可统计外,其余的日期范围内都可以顺利进行,所以我认为字段名和日期转换函数不会错!

解决方案 »

  1.   

    程序怎么会死呢?程序执行到最后一条纪录后再movenext,eof会变成true
    ,这时再movenext会出错啊。
    而且你的那段代码好像也没错啊。要不你用sql里面的sum函数再试试 
      

  2.   

    这个是VB的设计上的缺陷。多个条件判断时,VB会计算所有的判断条件。也就是说,当执行Do while时,即使.eof条件为真,VB仍会检查.fields("日期").value<=cdate(text2.text)
    这部分。所以会出错。
    改进的方法,一:直接用SQL语句汇总:slect sum(取款)as 取款总数 from ... where ...
                二:do while的条件分两行写:
                      do while not db_r.eof 
                         if  db_r.fields("日期").value<=cdate(text2.text) then
                           number=number+db_r.fields("取款").value   '求和
                         end if
                         db_r.movenext
                      loop
      

  3.   

    victorycyz(中海) 说得对,我也遇到过,应该是这个问题。
      

  4.   

    在not db_r.eof两边加括号试试
      

  5.   

    还是sum()来的省事,效率不知道高了多少倍。
      

  6.   

    victorycyz(中海) 说的对!!果然是这个问题,谢谢了!!!
    你在哪里?请你恰饭!!!!!!!!!!!!!!
      

  7.   

    hawkxjy(基本不会): 江西人吗?