如何在ms访问中部分清除userform

时间:2017-12-06 22:52:36

标签: ms-access userform

我有一个包含很多字段的绑定用户表单,我使用提交按钮让用户以共享形式输入。但是每当用户点击提交按钮时,它都会重新查询整个表单。但是,有大约4-5个字段不应在提交按钮上清除,它们应保留该值,其余字段应在每次提交按钮单击时清除。

这可以在访问中完成吗?下面是用于提交和重新查询记录的简单代码。

Private Sub SaveBtn_Click()
 RunCommand acCmdSaveRecord
 Me.Requery
 Me.DataForm.Requery
End Sub

1 个答案:

答案 0 :(得分:1)

如果在Access中有“绑定表单”,则表示“访问表单”与基础数据源相关联,该数据源由表单的“记录源”属性指定并存储在其中。在上面提供的“SaveBtn_Click()”方法中,此代码执行以下操作:

  1. RunCommand acCmdSaveRecord - 将当前记录保存在表单中。
  2. Me.Requery - 重新查询整个表单。
  3. Me.DataForm.Requery - 在主窗体上重新查询名为“DataForm”的子窗体。
  4. 因此,当您“重新查询”整个表单时(取决于“记录源”和其他表单属性设置的设置方式),在某些情况下,重新查询操作会将光标移动到数据源中的新记录(.. 。在更高版本的Access中拖放表单设计器工具的默认设置),我怀疑这就是为什么当你调用“Requery”时你看到表单被“清除”的原因。我想指出的几个项目,只是为了清晰起见:

    注1:“Requery”实际上保存了记录,因此如果您要调用“Requery”,则不需要显式调用“RunCommand acCmdSaveRecord”。

    注意2:根据Record Source(和其他)表单属性的设置方式,Requery在某些情况下只保存和刷​​新当前选定的记录,但听起来不像表单的工作方式(基于关于你上面所说的,所以我假设你的形式不是这样。

    注3:当您为主窗体调用“Requery”时,也会重新获取子窗体,因此这段代码也可能是多余的。调用“Me.DataForm.Requery”的原因是,如果您只想重新查询子表单而不是重新查询整个主表单。

    注4:“DataForm”子窗体(在主窗体上)将有一个单独的数据源,用于它自己的“Record Source”属性,该属性与父(主)窗体分开,因此要注意这一事实,取决于您要保存的字段值。

    那就是说,我可能会建议一些选项,具体取决于您希望表单的行为方式:

    1. 如果要保留一些字段值并在按下requery按钮时将其用于NEW RECORD,则可以始终将它们保存在变量中,然后在从变量中重新查询后再次设置这些控件。只需为要保存的每个值创建一个单独的变量,分别将TextBox控件值复制到每个变量中,在表单上调用requery,然后在重新查询后将这些值复制回TextBox控件。该代码将类似于以下内容(取决于TextBox控件的确切名称,我在此示例中使用了虚构名称“txtMyTextBox”): Private Sub SaveBtn_Click() Dim vValue1 as Variant vValue1 = txtMyTextBox Me.Requery txtMyTextBox = vValue1 End Sub

    2. 或者,如果您只是尝试为某些控件创建“默认值”,则TextBox控件具有“DefaultValue”属性,您可以将其设置为您要用于默认值的任何值。当在设计模式或布局模式下打开表单并选择TextBox控件时,可以从Access窗口右侧的属性表设置这些。 (按F4打开属性表,如果它尚未打开)。

    3. 但是,如果您真的想要Requery然后返回到之前的相同记录,您可以尝试以下代码: Private Sub SaveBtn_Click() Dim iRecord as Integer iRecord = Me.CurrentRecord Me.Requery DoCmd.GoToRecord , , acGoTo, iRecord End Sub

    4. 无论如何,我希望这一切都有意义,你会觉得它很有帮助。如果您对此答案有任何疑问,请与我们联系。