在窗体关闭时,如何关闭记录集呢?(很难保证记录指针在bof和eof)
在窗体关闭时,肯定要关闭记录集,然后set nothing ,可是有时记录指针处于bof或eof,或者有可能该记录集在datagrid中改过但没有用代码进行更新(或指针没移到另一行,这时如果close肯定不行的。)
问题是如何在关闭时判断一下呢?根据记录集情况进行处理,然后close和setnothing,
是不是要:
if rs.state= adstateopen then
    rs.movefirst
    rs.cancelupdate
    rs.close
endif
set rs = nothing

解决方案 »

  1.   

    bof eof 可以直接nothing 的而且好象有很多东西你想复杂了
      

  2.   

    谢谢指教,我知道可以直接nothing的,可是如果不close,实际在内存中并没有释放呀!
    该对象的引用没有了,可是还占着内存。所以要先close一下,可是在某些情况下,是不让close的。
    不知我的理解对否?再次请教。
      

  3.   

    "可是在某些情况下,是不让close的"只要是打开了,就可以Close的啊
      

  4.   

    只要是打开了,就可以Close的啊
    ---------------------------------
    好象不是呀?
    比如这个记录集在datagrid中修改了,可是没有发送更新。关闭时就会报错。
    为什么呀?
    我也不明白,我开始也认为只要是打开的就能关闭。如果是这样的,那么何时关闭就不应报错呀?
    为何有时执行close时会报错呢?
      

  5.   

    所以当记录集有修改的时候,程序最后面都应该Updata
    以避免出错如果没有更新,数据库会认为你当前操作还没有执行完毕,
    期待你的更新,不过有些数据库又没有这个方面的安全性检测。
      

  6.   

    如果不Close,它的内存就不会释放吗?学习...不过,楼主可以试下以下代码来关闭集合If rs.state=adstateopen then 
       if rs.editmode=adeditInProgress then
          rs.update
       endif
       rs.close
    end if
    set rs=nothing
      

  7.   

    你担心recordset bof 或者eof,到这地步会出错,你担心什么
    关闭的时候直接写
    rs.close
    set rs=nothing不是很清楚么
      

  8.   

    再次谢谢楼上三位老师,我查了一下msdn,在记录集是立即更新模式下,如果有没有完成的更新是不能关闭的。这可能就是我关闭时报错的原因吧。
    我把记录集取到datagrid中,可以在表格中对数据进行修改。如果修改后下移一条记录指针,那么这次修改就提交了。如果这时关闭没有问题的。可是如果虽然进行了修改,但是没有下移指针,那么此时关闭就会报错。(我已经试验过了。)
    我现在的实现办法是将on error goto lineno 改为:on error resume next ,
    就不会报这个错了。
    我不知这种办法可行否?
    我看到很多示例代码在关闭记录集时就用两条语句:1。rs.close,2.set rs = nothing,
    并没有判断是否处理修改模式。是不是要向师铭老师那样:
     if rs.editmode=adeditInProgress then
    rs.update
    endif    呢?
    谢谢。
      

  9.   

    这样不会丢失更改结果:
    On Error Goto EH
    rs.close
    set rs = nothingexit subEH:
    On Error Resume Next
    rs.update
    rs.close
    set rs = nothing