我有一个包含很多字段的绑定用户表单,我使用提交按钮让用户以共享形式输入。但是每当用户点击提交按钮时,它都会重新查询整个表单。但是,有大约4-5个字段不应在提交按钮上清除,它们应保留该值,其余字段应在每次提交按钮单击时清除。
这可以在访问中完成吗?下面是用于提交和重新查询记录的简单代码。
Private Sub SaveBtn_Click()
RunCommand acCmdSaveRecord
Me.Requery
Me.DataForm.Requery
End Sub
答案 0 :(得分:1)
如果在Access中有“绑定表单”,则表示“访问表单”与基础数据源相关联,该数据源由表单的“记录源”属性指定并存储在其中。在上面提供的“SaveBtn_Click()”方法中,此代码执行以下操作:
因此,当您“重新查询”整个表单时(取决于“记录源”和其他表单属性设置的设置方式),在某些情况下,重新查询操作会将光标移动到数据源中的新记录(.. 。在更高版本的Access中拖放表单设计器工具的默认设置),我怀疑这就是为什么当你调用“Requery”时你看到表单被“清除”的原因。我想指出的几个项目,只是为了清晰起见:
注1:“Requery”实际上保存了记录,因此如果您要调用“Requery”,则不需要显式调用“RunCommand acCmdSaveRecord”。
注意2:根据Record Source(和其他)表单属性的设置方式,Requery在某些情况下只保存和刷新当前选定的记录,但听起来不像表单的工作方式(基于关于你上面所说的,所以我假设你的形式不是这样。
注3:当您为主窗体调用“Requery”时,也会重新获取子窗体,因此这段代码也可能是多余的。调用“Me.DataForm.Requery”的原因是,如果您只想重新查询子表单而不是重新查询整个主表单。
注4:“DataForm”子窗体(在主窗体上)将有一个单独的数据源,用于它自己的“Record Source”属性,该属性与父(主)窗体分开,因此要注意这一事实,取决于您要保存的字段值。
那就是说,我可能会建议一些选项,具体取决于您希望表单的行为方式:
如果要保留一些字段值并在按下requery按钮时将其用于NEW RECORD,则可以始终将它们保存在变量中,然后在从变量中重新查询后再次设置这些控件。只需为要保存的每个值创建一个单独的变量,分别将TextBox控件值复制到每个变量中,在表单上调用requery,然后在重新查询后将这些值复制回TextBox控件。该代码将类似于以下内容(取决于TextBox控件的确切名称,我在此示例中使用了虚构名称“txtMyTextBox”):
Private Sub SaveBtn_Click()
Dim vValue1 as Variant
vValue1 = txtMyTextBox
Me.Requery
txtMyTextBox = vValue1
End Sub
或者,如果您只是尝试为某些控件创建“默认值”,则TextBox控件具有“DefaultValue”属性,您可以将其设置为您要用于默认值的任何值。当在设计模式或布局模式下打开表单并选择TextBox控件时,可以从Access窗口右侧的属性表设置这些。 (按F4打开属性表,如果它尚未打开)。
但是,如果您真的想要Requery然后返回到之前的相同记录,您可以尝试以下代码:
Private Sub SaveBtn_Click()
Dim iRecord as Integer
iRecord = Me.CurrentRecord
Me.Requery
DoCmd.GoToRecord , , acGoTo, iRecord
End Sub
无论如何,我希望这一切都有意义,你会觉得它很有帮助。如果您对此答案有任何疑问,请与我们联系。