rs.open sql,conn,1,1和rs.open sql,conn,1.3还有rs.open
|
admin
2011年7月19日 22:1
本文热度 7258
|
rs.open sql,conn,1,1和rs.open sql,conn,1.3还有rs.open sql,conn,3,2区别
Rs.Open语法如下:rs.Open Source,ActiveConnection,CursorType,LockType
Source为sql语句,ActiveConnection为数据库连接,CursorType是游标,LockType是数据锁定类型.
CursorType
常量 说明
adOpenForwardOnly(值为0) (默认值)打开仅向前类型游标。
adOpenKeyset(值为1) 打开键集类型游标。
adOpenDynamic(值为2) 打开动态类型游标。
adOpenStatic(值为3) 打开静态类型游标。
-----------------------
LockType
常量 说明
adLockReadOnly (值为1) (默认值)只读 — 不能改变数据。
adLockPessimistic(值为2) 保守式锁定(逐个) — 提供者完成确保成功编辑记录所需的工作,通常通过在编辑时立即锁定数据源的记录来完成。
adLockOptimistic(值为3) 开放式锁定(逐个) — 提供者使用开放式锁定,只在调用 Update 方法时才锁定记录。
adLockBatchOptimistic(值为4) 开放式批更新 — 用于批更新模式(与立即更新模式相对)。
CursorType
0 仅向前游标,只能向前浏览记录,不支持分页、Recordset、BookMark
1 键集游标,其他用户对记录所做的修改将反映到记录集中,但其他用户增加或删除记录不会反映到记录集中。支持分页、Recordset、BookMark
2 动态游标功能最强,但耗资源也最多。用户对记录所做的修改,增加或删除记录都将反映到记录集中。支持全功能浏览。
3 静态游标,只是数据的一个快照,用户对记录所做的修改,增加或删除记录都不会反映到记录集中。支持向前或向后移动
LockType
LockType为记录集的锁定类型,其取值为:
1 锁定类型,默认的,只读,不能作任何修改
2 当编辑时立即锁定记录,最安全的方式
3 只有在调用Update方法时才锁定记录集,而在此前的其他操作仍可对当前记录进行更改、插入和删除等
4 当编辑时记录不会被锁定,而更改、插入和删
该文章在 2011/7/19 22:03:40 编辑过
| |
全部评论4 |
|
admin
2011年7月19日 22:2
rs.Open sql,conn,1,1和rs.Open sql,conn,1,3有什么区别?
rs.Open sql,conn,1,1本文中大量使用的方式。无法看到其他用户添加的新数据,但被其他用户删除的数据将变为不可访问,同时可以看到其他用户所作的修改。
rs.Open sql,conn,1,3静态打开方式。在你使用数据是其他用户无法访问该数据
rs.Open sql,conn,1,2动态的数据库打开方式,其他用户所进行的修改、删除和新建等工作都会立即在数据对象中体现出来,并且支持全部类型的数据移动方式,除非提供者不支持,否则也可以进行书签操作
rs.Open sql,conn,-1不指定打开方式
该评论在 2011/7/19 22:02:37 编辑过
|
|
admin
2011年7月19日 22:3
rs.open sql,conn,1,1给解释下,详细点
就是执行sql语句把数据记录查询到存储到一个记录集里面
其中1,1表示此记录集的属性是只读向前地不断查询,而不能对数据集中的数据进行删除、修改等,一搬用作把数据库里面的数据查询出来的时候就最好用这个属性,他的小率最高
那对应着,如果你要修改、删除数据的话应该用1,3了
该评论在 2011/7/19 22:03:57 编辑过
|
|
admin
2011年7月19日 22:6
RS.OPEN SQL,CONN,A,B
A:
ADOPENFORWARDONLY(=0)
只读,且当前数据记录只能向下移动
ADOPENKEYSET(=1)
只读,当前数据记录可自由移动
ADOPENDYNAMIC(=2)
可读写,当前数据记录可自由移动
ADOPENSTATIC(=3)
可读写,当前数据记录可自由移动,可看到新增记录
B:
ADLOCKREADONLY(=1)
缺省锁定类型,记录集是只读的,不能修改记录
ADLOCKPESSIMISTIC(=2)
悲观锁定,当修改记录时,数据提供者将尝试锁定记录以确保成功地编辑记录。只要编辑一开始,则立即锁住记录。
ADLOCKOPTIMISTIC(=3)
乐观锁定 ,直到用Update方法提交更新记录时才锁定记录。
ADLOCKBATCHOPTIMISTIC(=4)
批量乐观锁定,允许修改多个记录,只有调用UpdateBatch方法后才锁定记录。
当不需要改动任何记录时,应该使用只读的记录集,这样提供者不用做任何检测。
对于一般的使用,乐观的锁定可能是最好的选择,因为记录只被锁定一小段时间,
数据在这段时间被更新。这减少了资源的使用。
该评论在 2011/7/19 22:06:07 编辑过
|
|
admin
2011年7月19日 22:9
今天,在一个asp技术群里一个朋友问了这么一个问题:rs.recordcount为什么返回值总是-1呢?以前在asp编程的过程中也碰到过相同的问题,于是就告诉他方法,但是,无论怎么改总是不可以。最后发现,他连接的是mysql数据库,而我做过的那些是access数据库。因此,问题也就出来了。怎么解决呢?
他的原本语句:rs.open select A_name from area where A_state='1' order by A_id asc,conn,1,1。然后输出rs.recordcount的值是-1.怎么改?
1).为了书写简便,我写成这样:rs.open sql,conn,3,1.我让他改成这样,结果还是返回-1.纳闷,曾经在access数据库编程中,只要改了这个参数,一切ok.看来,还有问题。难道是数据库问题?
2).在rs.open sql,conn,1,1之前添加一句:rs.cursorlocation = 3。结果,还是不可以。
3).改成:rs.cursorlocation = 3 rs.open sql,conn,3,1.ok.成功!
下面解释一下:rs.open sql,conn,3,1。这句中两个参数分别表示游标类型和锁定类型。什么是游标类型?
游标类型:
Const adOpenForwardOnly = 0
前向游标,为缺省游标,提供最快的运行性能。用它打开recordset,从对至尾顺序取得所有结果。它不支持向后滚动,只允许在结果间单向移动。
Const adOpenKeyset = 1
静态游标,反映第一次打开游标时表中数据的状态,游标无法查明底层表中的数据行是否更新过、删除过或添加了新的数据。不过与只能前移的洲标不同,静态游标可以在结果间前后滚动。
Const adOpenDynamic = 2
键盘驱动的游标,可以查询表中底层数据行的某些变化,但不是全部。它特别是可以准确反映数据是否更新过。但它不能查明其它用户是否曾删除过数据行(删除掉的数据行在recordset中会留下空洞)。键盘驱动的游标支持在结果间前后滚动。
Const adOpenStatic = 3
动态游标,是最丰富的游标类型。游标打开时可以查询其他用户对表的任何改动,而且支持滚动。
什么是锁定类型?
Const adLockReadOnly = 1
缺省的上锁类型,只读方式上锁允许多个用户同时读取同样的数据,但不能改变数据。
Const adLockPessimistic = 2
以悲观上锁方式打开数据对象。该方式假定在你编辑记录时会有其它用户访问数据。此时一旦你开始编辑记录,其它用户就不能访问该数据。
Const adLockOptimistic = 3
以乐观上锁方式打开数据对象。该方式假定在你编辑记录时不会有其它用户访问数据。在完成改变之前,其它用户不能访问该记录。
Const adLockBatchOptimistic = 4
执行多行批处理更新时使用这种类型
那么rs.cursorlocation = 3又是什么意思呢?就是代表使用客户端光标,也就是rs.CursorLocation = adUseClient。对应的是 rs.CursorLocation = adUseServer 服务端光标。
看看下面更详细的解释:
CursorLocation 属性
设置或返回游标服务的位置。
设置和返回值
设置或返回可设置为以下某个常量的长整型值。
常量 说明
adUseNone 没有使用游标服务。(该常量已过时并且只为了向后兼容才出现)。
adUseClient 使用由本地游标库提供的客户端游标。本地游标服务通常允许使用的许多功能可能是驱动程序提供的游标无法使用的,因此使用该设置对于那些将要启用的功能是有 好处的。AdUseClient 具有向后兼容性,也支持同义的 adUseClientBatch。
adUseServer 默认值。使用数据提供者的或驱动程序提供的游标。这些游标有时非常灵活,对于其他用户对数据源所作的更改具有额外的敏感性。但是,Microsoft Client Cursor Provider(如已断开关联的记录集)的某些功能无法由服务器端游标模拟,通过该设置将无法使用这些功能。
说明
该属性允许在可用于提供者的各种游标库中进行选择。通常,可以选择使用客户端游标库或位于服务器上的某个游标库。
该属性设置仅对属性已经设置后才建立的连接有影响。更改 CursorLocation 属性不会影响现有的连接。
对于 Connection 或关闭的 Recordset 该属性为读/写,而对打开的 Recordset 该属性为只读。
由 Execute 方法返回的游标继承该设置。Recordset 将自动从与之关联的连接中继承该设置。
远程数据服务用法 当用于客户端 (ADOR) Recordset 或 Connection 对象时,只能将 CursorLocation 属性设置为 adUseClient.
该评论在 2011/7/19 22:09:39 编辑过
|
|
|