以下两种关闭记录集的方式哪种更好一些呀?(用 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上的代码应是很经典的呀.
我是初学者,请给明示.
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上的代码应是很经典的呀.
我是初学者,请给明示.
=================
可是第一种写法有不好的地方呀?因为如果当时记录集不处于打开状态,比如处于连接状态中,那么
就不会被关闭呀?这样就会出现资料无法释放有问题呀!
终止有人回贴了.可是我就是不明白,msdn的编者难道连这么简单的情况都考虑不到吗?还是我的理解不对呀?
如:dim i as boolean
if i=true then ...
写成 if i<>flase then ...
你认为是不是一样呢?
如:dim i as boolean
if i=true then ...
写成 if i<>flase then ...
你认为是不是一样呢?
-----------------------
不对吧.你的例子不太好,因为boonean值只有两种可能,可是记录集的状态有多种状态呀?
所以你的例子不对呀.不过还是谢谢.探讨吗!
我们都是这样写的.
if rs.state=1 then rs.close
set rs =northing
if(rs->State & adStateOpen)
{
rs->Close();
}
==========================
谢谢,不仅你是这样用的,我也是这样用的.而且msdn上的示例代码也是这样写的.
可是我不明白的核心问题是,这样写真的对吗?如果当时这个记录集的状态不是adstateopen ,而是其他几种状态呢?
adStateConnecting 2 指示对象正在连接。
adStateExecuting 4 指示对象正在执行命令。
adStateFetching 8 指示正在检索对象的行。
如果按你的代码,这种情况下就不会执行记录集的关闭操作,而实际上开发者的本意也是希望执行close的,但却执行不到close.这个问题如何办呢?
adStateExecuting 4 指示对象正在执行命令。
adStateFetching 8 指示正在检索对象的行。
这些好像很少用,是不是对象的打开与关闭跟我们
想象中的不一样,有其他另外的深层意思.
adStateExecuting 4 指示对象正在执行命令。
adStateFetching 8 指示正在检索对象的行。
这些好像很少用,是不是对象的打开与关闭跟我们
想象中的不一样,有其他另外的深层意思.
========================
已经有红角星的人关注了,继续.
如:dim i as boolean
if i=true then ...
写成 if i<>flase then ...
你认为是不是一样呢?
-----------------------
不对吧.你的例子不太好,因为boonean值只有两种可能,可是记录集的状态有多种状态呀?
所以你的例子不对呀.不过还是谢谢.探讨吗!
-----------------------
其实我认为我说的没有错,只是有点太形象了,我想说的是真与假是一种状态,而不是操作过程,就像开关一样,只有开与关,那怎么开和关呢,那当然要一些达到开与关的过程,这个过程就是你上面说的
adStateConnecting 2 指示对象正在连接。
adStateExecuting 4 指示对象正在执行命令。
adStateFetching 8 指示正在检索对象的行。
我好像在一本书上看到过,记录集操作他分三个层次,记得也不太清楚,好像是对象连接->打开->执行三个层次.
好像是这样的:)
adStateExecuting 4 指示对象正在执行命令。
adStateFetching 8 指示正在检索对象的行。
---------------------
谢谢西门吹雪热情回复,具体到一个具体问题,我们探讨一下,比如某一个瞬间,记录集的状态是:
adStateExecuting (指示对象正在执行命令)
此时正好运行到代码:[比如正在执行关闭窗体的操作,在窗体unload事件中有以下的代码]
if rs.state = adstateopen then
rs.close
end if
set rs = nothing
你说这个记录集能被正常的关闭吗?因为这个记录集的状态不是adstateopen呀?所以rs.close这一句根本得不到执行呀.也就是说无法close,.
因为记录集的各种状态不可能同时存在呀.如既是adstateopen状态,又是adstateexecuting状态,你说我讲的对吗?
再次谢谢你对我贴子的支持.