access数据库的记录如何锁定
在录入时,“是否型”字段只需点击鼠标即可,录入速度明显快于“文本型”,很快完成了“表”、“窗体”、“查询”。
建库完成后,使用中问题就来了:
打开“表”、“窗体”、“查询”后,查看相关记录时,随着鼠标在界面上的的移动,不经意间就把原有的“√”抹掉了,不经意间就把原有的空白“□”点上了“√”,原有的记录总是被自己无意地改动,造成统计数字不准确。
请问每条记录的“是否型”的空白“□”和“√”如何才能锁定?
请高手指点,谢谢。 展开
当年我在这里也走了不少弯路,查了很多资料才发现问题很简单,下面就轻松实现锁定与解锁.
在窗体页眉中新建一个复选框或单选框,这里我用的是复选框(我取的名叫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 切换按钮
楼上的高招我一时间没有看完。
如果我做,对于窗体:我会分两种窗体,一种是录入窗体,另一种是查看窗体。
这里就说查看窗体,如果该字段不想被修改,就将这个字段的控件(一般是文本框)的属性→数据→ 是否锁定,选择“是”。
对于查询:如果是在查询中不想被无意修改,请参考连接地址:
http://zhidao.baidu.com/question/134471481.html
选择有方框的控件才有这个选项的,详见图。
另外,对于表的建立,不建议像你这样的建立方式,是否小学、是否初中等其实是文化程度一个字段的派生项,这样建立字段不利于数据库的维护和更新。如果这个人文化程度从小学提高到初中,就要修改是否小学和是否初中两个字段。
参考资料: http://zhidao.baidu.com/question/134471481.html