主题:  请教:关于rs.open 的参数问题

XFOREVER

职务:普通成员
等级:1
金币:0.0
发贴:17
#12004/5/20 17:29:25
打开数据库中的记录集,如:
rs.open sql,conn,1,1
rs.open sql,conn,3,2
这两个语句有什么区别?
还想请教一下,打开数据库记录的参数究竟有哪些,请不吝赐教。



大当家

职务:普通成员
等级:3
金币:1.0
发贴:767
#22004/5/20 19:48:01
Recordset对象的Open函数参数

我们来谈谈Recordset对象的Open函数参数的意义,参数一是数据表名或者Select指令;参数二为Connection对象,我们着重分析一下参数三和参数四的意义。参数三:Recordset类型。

它含有以下四种设置值
Recordset类型的设置值 意义
AdOpenForwardOnly(=0) 只读,且当前数据记录只能向下移动
AdOpenStaqtic(=3) 只读,当前数据记录可自由移动
AdOpenKeyset(=1) 可读写,当前数据记录可自由移动
AdOpenDynamic(=2) 可读写,当前数据记录可自由移动
注:AdOpenKeyset及AdOpenDynamic的差别只表现在多人共用数据库时,若以AdOpenKeyset模式打开数据表,则无法看到其他人新增的数据记录(除非重新启动),若以AdOpenDynamic模式打开数据表,则可以看到其他人新增的数据记录
参数四:锁定类型。含有以下四种设置值

锁定类型的设置值 意义
AdLockReadOnly(=1) 默认值,用来打开只读的数据记录
AdLockPessimistic(=2) 悲观锁定
AdLockOptimistic(=3) 乐观锁定
AdLockBatchOptimistic(=40 批次乐观锁定
AdLockReadOnly:故名思义,就是只对数据读取数据,而不能对数据库的记录进行有变更的数据操作。
AdLockPessimistic:它指的是当任何两个程序同时更新同一条记录的时候,只能允许唯一一个程序进行数据更新。例如:
rs("loginnum")=rs("loginnum")+1
rs.update

如果使用了这种模式的模型方式,当程序利用rs("loginnum")=数值语句开始改变数据记录的时候,数据记录就进入了记录锁定状态。

AdLockOptimistic:它指的是两个程序对同一条记录进行更新的情况几乎不可能发生,因此它只是在数据写入数据的时候暂时锁定数据记录。例如:
rs("loginnum")=rs("loginnum")+1
rs.update

也就是说只有在rs.update执行的时候才开始锁定记录,语句完成后才解锁,这样就有可能发生某一程序对数据记录的更新是不完成的。

AdLockBatchOptimistic:它在更改数据记录的过程中,暂时不将更新的结果写入数据库,直到调用updatebatch函数时才将整批更新的数据写入数据库,而且也只在在这个时候才锁定欲更新的数据记录。例如:
while not rs.eof
rs("loginnum")=rs("loginnum")+1
rs("applynum")=rs("applynum")+1
rs.movenext
rs.updatebatch
wend

注意,如果使用这种模式,更新的函数就是updatebatch而不是update了。

通过以上的介绍,当语句写成:rs.open sql,conn,1,1的时候,其真正意义就是:

rs.open sql,conn,adopenkeyset,adlockreadonly



今晚在线

职务:普通成员
等级:3
金币:1.0
发贴:761
#32004/5/20 22:19:36
www.gamvan.com/bbs/ltPages.asp?lsID=6&id=8606

差不多就是这个意思,这里也有篇,说法有点区别,大体一样~



今晚在线

职务:普通成员
等级:3
金币:1.0
发贴:761
#42004/5/20 22:33:36
扬扬在上个帖子中说
引用:
Recordset对象的Open函数参数

通过以上的介绍,当语句写成:rs.open sql,conn,1,1的时候,其真正意义就是:

rs.open sql,conn,adopenkeyset,adlockreadonly


rs.open sql,conn,adopenkeyset,adlockreadonly 这样的写法如果语句在
function 或者 sub 过程里面好像行不通
应该写成
    rs.cursortype = adopenkeyset
    rs.locktype = adlockreadonly
    rs.Open sql, conn



janlay

职务:管理员
等级:7
金币:28.0
发贴:7244
#52004/5/21 8:49:47
今晚在线在上个帖子中说
引用:
rs.open sql,conn,adopenkeyset,adlockreadonly 这样的写法如果语句在
function 或者 sub 过程里面好像行不通
应该写成
    rs.cursortype = adopenkeyset
    rs.locktype = adlockreadonly
    rs.Open sql, conn
没听说过这个问题,事实上两种写法都可以。我写的代码中,rs.open大部分都在过程里,也没你说的问题



x5k

职务:普通成员
等级:1
金币:0.0
发贴:31
#62004/5/22 20:27:20
又学到不了!