以下两种关闭记录集的方式哪种更好一些呀?(用 adstateopen 还是用 adstateclosed 属性判断)if rs.state = adstateopen then
    rs.close
end if
set rs=nothing

if rs.state <> adstateclosed then
    rs.close
end if
set rs=nothing
以上两种写法有区别吗?
可是我看到msdn上的代码大多是第一种呀?
有老师告我,用adstateclosed属性判断后关闭较好,因为记录集的属性并不只有 asstateopen和adstateclosed两种,我也同意这种说法.可是为什么msdn,和其他的帮助资料上,关闭记录集时,都是用adstateopen这个属性来判断的呢?
难道是这些设计者们想的不周道吗?按理说msdn上的代码应是很经典的呀.
我是初学者,请给明示.

解决方案 »

  1.   

    可能第一种写法看起来更直观吧,容易被人理解接受
    =================
    可是第一种写法有不好的地方呀?因为如果当时记录集不处于打开状态,比如处于连接状态中,那么
    就不会被关闭呀?这样就会出现资料无法释放有问题呀!
    终止有人回贴了.可是我就是不明白,msdn的编者难道连这么简单的情况都考虑不到吗?还是我的理解不对呀?
      

  2.   

    写法不同而已,
    如:dim i as boolean
    if i=true then ...
    写成 if i<>flase then ...
    你认为是不是一样呢?
      

  3.   

    写法不同而已,
    如:dim i as boolean
    if i=true then ...
    写成 if i<>flase then ...
    你认为是不是一样呢?
    -----------------------
    不对吧.你的例子不太好,因为boonean值只有两种可能,可是记录集的状态有多种状态呀?
    所以你的例子不对呀.不过还是谢谢.探讨吗!
      

  4.   

    第一种方法应该更普遍吧!
    我们都是这样写的.
    if rs.state=1 then rs.close
    set rs =northing
      

  5.   

    我用
    if(rs->State & adStateOpen)
    {
        rs->Close();
    }
    ==========================
    谢谢,不仅你是这样用的,我也是这样用的.而且msdn上的示例代码也是这样写的.
    可是我不明白的核心问题是,这样写真的对吗?如果当时这个记录集的状态不是adstateopen ,而是其他几种状态呢?
    adStateConnecting 2 指示对象正在连接。 
    adStateExecuting 4 指示对象正在执行命令。 
    adStateFetching 8 指示正在检索对象的行。 
    如果按你的代码,这种情况下就不会执行记录集的关闭操作,而实际上开发者的本意也是希望执行close的,但却执行不到close.这个问题如何办呢?
      

  6.   

    好问题.adStateConnecting 2 指示对象正在连接。 
    adStateExecuting 4 指示对象正在执行命令。 
    adStateFetching 8 指示正在检索对象的行。
    这些好像很少用,是不是对象的打开与关闭跟我们
    想象中的不一样,有其他另外的深层意思.
      

  7.   

    好问题.adStateConnecting 2 指示对象正在连接。 
    adStateExecuting 4 指示对象正在执行命令。 
    adStateFetching 8 指示正在检索对象的行。
    这些好像很少用,是不是对象的打开与关闭跟我们
    想象中的不一样,有其他另外的深层意思.
    ========================
    已经有红角星的人关注了,继续.
      

  8.   

    写法不同而已,
    如:dim i as boolean
    if i=true then ...
    写成 if i<>flase then ...
    你认为是不是一样呢?
    -----------------------
    不对吧.你的例子不太好,因为boonean值只有两种可能,可是记录集的状态有多种状态呀?
    所以你的例子不对呀.不过还是谢谢.探讨吗!
    -----------------------
    其实我认为我说的没有错,只是有点太形象了,我想说的是真与假是一种状态,而不是操作过程,就像开关一样,只有开与关,那怎么开和关呢,那当然要一些达到开与关的过程,这个过程就是你上面说的
    adStateConnecting 2 指示对象正在连接。 
    adStateExecuting 4 指示对象正在执行命令。 
    adStateFetching 8 指示正在检索对象的行。
     
    我好像在一本书上看到过,记录集操作他分三个层次,记得也不太清楚,好像是对象连接->打开->执行三个层次.
    好像是这样的:)
      

  9.   

    adStateConnecting 2 指示对象正在连接。 
    adStateExecuting 4 指示对象正在执行命令。 
    adStateFetching 8 指示正在检索对象的行。
    ---------------------
    谢谢西门吹雪热情回复,具体到一个具体问题,我们探讨一下,比如某一个瞬间,记录集的状态是:
    adStateExecuting (指示对象正在执行命令)
    此时正好运行到代码:[比如正在执行关闭窗体的操作,在窗体unload事件中有以下的代码]
    if rs.state = adstateopen then
       rs.close
    end if
    set rs = nothing
    你说这个记录集能被正常的关闭吗?因为这个记录集的状态不是adstateopen呀?所以rs.close这一句根本得不到执行呀.也就是说无法close,.
    因为记录集的各种状态不可能同时存在呀.如既是adstateopen状态,又是adstateexecuting状态,你说我讲的对吗?
    再次谢谢你对我贴子的支持.