我们在Bytes上有一个非常常见的问题,即当焦点以任何方式从当前记录移到另一个或新记录时,绑定形式如何自动更新记录数据。 在许多情况下,这是必需的行为。 它可以使表单像查看表格网格中的数据一样工作。 但是,有时设计师会感到用户可能在没有适当意识到他们在做什么的情况下对数据棒进行更改(将其保存),因此需要一种通过明确的方式来引导此类决策的方法。
保存按钮。 下面我们将讨论可以提供此功能的方法。 表格设计。在进一步介绍之前,让我们仔细研究一下正在处理的表单类型,并描述如何设置。
首先从绑定形式开始。 出于说明目的,我们可以使用
创建表单向导。 只需选择您感兴趣的表,然后单击“ 新建对象”按钮。 如果当前未选择“ 表单”选项,则使用下拉工具将其选中。在向导中,将所有字段添加到右侧的框中,然后选择默认值,直到在最后一页上提示输入表单名称为止。 不要使用默认名称,因为它将与表相同,这是非常糟糕的策略。 输入名称后,选择以在完成时修改设计。 您会(在完成后)注意到
记录源属性已设置为表的名称。 这使其成为绑定形式。 这是修改表的基本形式。 设计更改以强制使用“保存”按钮。首先要进行的更改是添加
保存按钮本身。 使用“工具箱”轻松完成(可从“ 表单设计”工具栏获得)。 我建议将按钮添加到窗体的页脚部分。 在命令按钮向导中,选择“ 记录操作”并保存“记录” 。 使用默认值或随意更改。 我从不建议保留默认名称,因此我将其称为mine cmdSave 。 不用担心代码,因为我们稍后将对其进行更改。支持此更改的代码是(请确保将其复制并粘贴到当前存在的所有内容上,并保留您用于
保存命令按钮。):Option Compare Database
Option Explicit
Private blnGood As Boolean
Private Sub cmdSave_Click()
blnGood = True
Call DoCmd.RunCommand(acCmdSaveRecord)
blnGood = False
End Sub
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim strMsg As String
If Not blnGood Then
Cancel = True
strMsg = "Please use the Save button to save your changes," & _
vbNewLine & "or Escape to reset them."
Call MsgBox(Prompt:=strMsg, Title:="Before Update")
End If
End Sub
在所有模块中(应该是)前两行(选项)。
第4行设置了一个持久但私有(对表单模块而言)的布尔变量,以指示保存是否是由于来自的调用
cmd保存与否。 cmdSave_Click确保在尝试保存之前将blnGood设置为True,然后再重置为False,以确保没有其他保存被标记为错误。 Form_BeforeUpdate检查,然后再继续blnGood。 如果为True,则保存将正常进行。 否则,“ 取消”设置为“真”(以停止保存),并向操作员发送一条礼貌而翔实的消息,以说明原因以及如何继续。 结论。尽管这是一个普遍的问题,尤其是对于新手,但这很容易解决。 任何人都不应试图通过未绑定的形式提供类似的功能,这将更加困难,并且会导致不必要的复杂项目。 未绑定的表单有其用途,但这不是其中之一。
From: https://bytes.com/topic/access/insights/891249-how-stop-bound-forms-updating-automatically