使用 Connection 对象的 Execute 方法,可执行任何在指定连接的 CommandText 参数中传送给方法的查询。如果 CommandText 参数指定按行返回的查询,执行产生的任何结果将存储在新的 Recordset 对象中。如果命令不是按行返回的查询,则提供者返回关闭的 Recordset 对象。返回的 Recordset 对象始终为只读、仅向前的游标。如需要具有更多功能的 Recordset 对象,应首先用所需的属性设置创建 Recordset 对象,然后使用 Recordset 对象的 Open 方法执行查询并返回所需游标类型。
adoRs.CursorType = adOpenForwardOnly '只向前游标
'用键击游标
adoRs.CursorType = adOpenKeyset
的RECORDSET对象是只读、仅向前的。
因此,不能MOVEPREVIOUS,只能MOVENEXT。如果你非要使用EXECUTE方法来返回结果集,那么是无法设置其游标属性的。
说得很清楚了!
来慢了~~~~~~~~~~~
execute执行的recordset是forwardonly的还有关于取 recordcount属性,如果你的连接的 cursorloction是服务端
或者recordset 的cursortype是 服务端游标类型的那么recordcount=-1
这个也要注意的
If adoRs.EOF then
For Tag=0 to 100
Array(Tag)=" " & adoRs(0) & " "
adoRs.MovePrevious
Next
End if
我觉得你的代码有两个问题:
1,记录集循环之前应该先进行指位.(movefirst/movelast).
2,你不知道记录集中有多少记录时,循环100次是不是正确??
你试试看了!
Set adoRs = adoCon.Execute("select * from Table")
adoRs.LockType = adLockOptimistic
adoRs.CursorType = adOpenKeyset
Tag=0
do while not adoRs.EoF
Array(Tag)=" " & adoRs(0) & " "
Tag=Tag+1
adoRs.MoveNext
loopTag=0
do while not adoRs.BOF then
Array(Tag)=" " & adoRs(0) & " "
Tag=Tag+1
adoRs.MovePrevious
loop
只要把
Set adoRs = Nothing
Set adoRs = adoCon.Execute("select * from Table")
改为
Set adoRs = Nothing
adoRs.Open "select * from Table", adoCon, adOpenDynamic, adLockOptimistic
或者
Set adoRs = Nothing
adoRs.Open "select * from Table", adoCon, adLockOptimistic
或者
Set adoRs = Nothing
adoRs.Open "select * from Table", adoCon, adOpenDynamic
都可以
在此要感谢junglerover(灌木丛)提醒的用open方法而不是execute,还要感谢fuxc(Michael)告知的adoRs.CursorType = AdOpenDynamic即把CursorType属性改为AdOpenDynamic,还有gxingmin(小高)提醒的adoRs.LockType = adLockOptimistic。虽然你们没有一个人直接回答了我的问题(可以是在下天生愚蠢:),但是在综合了你们的方法之后还是解决了我的问题,因此给你们每人加15分。
此外还要感谢Quady515(柱子)的注释(给你一分)和ferrytang(ferry)的提醒(给你两分);此外还要感谢wangchong(网虫)仔细分析了我的代码(给你两分),在这里我要解释的是那个循环并没有其他用处,只是我用在这里来说明问题的,以后在编程过程中我一定会注意的。
不知你们对我的散分结果有什么意见吗?最后再次谢谢大家的帮助!!!