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方法后才锁定记录。
当不需要改动任何记录时,应该使用只读的记录集,这样提供者不用做任何检测。
对于一般的使用,乐观的锁定可能是最好的选择,因为记录只被锁定一小段时间,
数据在这段时间被更新。这减少了资源的使用。
当年我在这里也走了不少弯路,查了很多资料才发现问题很简单,下面就轻松实现锁定与解锁.
在窗体页眉中新建一个复选框或单选框,这里我用的是复选框(我取的名叫ChkLock),下面是这个复选框的单击事件
Private Sub ChkLock_Click()
Dim ctl As Control
For Each ctl In Me.Section(0).Controls 'Section(0)是主体的意思
If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox Or ctl.ControlType = acCheckBox Then
'或用类似下面这句
'If ctl.Name <> "ChkLock" And ctl.Name <> "TxtFind" And ctl.ControlType <> acLabel Then
ctl.Locked = Me.ChkLock '这里就是实现锁定或解锁
End If
Next
End Sub
上面实现锁定的代码,下面实现自动锁定,不管你有没有忘记.利用窗体的Current事件(成为当前事件),如果要新建记录要自动解锁
Private Sub Form_Current()
'检查是否要锁定
If Me.NewRecord Then '如果是新建状态就可以编辑(将勾取消)
Me.ChkLock = False
Else
Me.ChkLock = True
End If
Call ChkLock_Click '调用复选框的单击事件,在这里变成子程序
End Sub
最好把这个控制锁定的复选框放在窗体页眉上,不然连它都锁定了就没法解锁了.
附:
'Section(0)是主体的意思,这里就是指循环主体上的控件,页脚页眉上的控件就影响不到了,如你要,Section(1)表示是窗体页眉Section(2)表示是窗体页脚
ControlType 属性是用于指定控件类型的固有常量。
常量 控件
acBoundObjectFrame 绑定对象框
acCheckBox 复选框
acComboBox 组合框
acCommandButton 命令按钮
acCustomControl ActiveX(自定义)控件
acImage 图像
acLabel 标签
acLine 线条
acListBox 列表框
acObjectFrame 未绑定对象框或图表
acOptionButton 选项按钮
acOptionGroup 选项组
acPage 页
acPageBreak 分页符
acRectangle 矩形
acSubform 子窗体/子报表
acTabCtl 选项卡
acTextBox 文本框
acToggleButton 切换按钮
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)