Ms access 如何在ms access中部分清除用户窗体

Ms access 如何在ms access中部分清除用户窗体,ms-access,userform,Ms Access,Userform,我有一个绑定的userform,其中有很多字段,我使用submit按钮让用户在共享表单中创建条目。但每当用户点击提交按钮,它就会重新查询整个表单。但是,大约有4-5个字段不应在“提交”按钮上清除,它们应保留值,其余字段应在每次单击“提交”按钮时清除 这可以在access中实现吗?如何实现?下面是用于提交和重新查询记录的简单代码 Private Sub SaveBtn_Click() RunCommand acCmdSaveRecord Me.Requery Me.DataForm.Requ

我有一个绑定的userform,其中有很多字段,我使用submit按钮让用户在共享表单中创建条目。但每当用户点击提交按钮,它就会重新查询整个表单。但是,大约有4-5个字段不应在“提交”按钮上清除,它们应保留值,其余字段应在每次单击“提交”按钮时清除

这可以在access中实现吗?如何实现?下面是用于提交和重新查询记录的简单代码

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

当Access中有绑定表单时,这意味着访问表单绑定到基础数据源,该数据源由表单的记录源属性指定并存储在该属性中。在上面提供的SaveBtn_Click方法中,此代码执行以下操作:

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

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

注2:根据记录源和其他表单属性的设置方式,在某些情况下,Requery只保存和刷新当前选定的记录,但根据您上面所说的,您的表单的工作方式听起来不像这样,因此我假设表单中不是这样

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

注意4:主窗体上的DataForm子窗体将为其自己的Record source属性提供一个单独的数据源,该属性与父主窗体是分开的,因此,根据要保存的字段值,了解这一事实非常重要

因此,也就是说,我可能会建议几个选项,具体取决于您希望表单的行为方式:

如果您想保留一些字段值,并在点击“重新查询”按钮时将其用于新记录,则始终可以将其保存在变量中,然后在从变量重新查询后再次设置这些控件。只需为要保存的每个值创建一个单独的变量,将TextBox控件值分别复制到每个变量中,在窗体上调用requery,然后在重新查询后将这些值复制回TextBox控件中。根据TextBox控件的确切名称,该代码如下所示,我在本例中使用了虚构的名称txtMyTextBox: 私有子存储n_单击 尺寸vValue1作为变量 vValue1=txtMyTextBox 我,再询问 txtMyTextBox=vValue1 端接头

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

但是,如果您确实想重新查询,然后返回到以前的记录,您可以尝试以下代码: 私有子存储n_单击 将iRecord设置为整数 iRecord=Me.CurrentRecord 我,再询问 DoCmd.GoToRecord、acGoTo、iRecord 端接头


无论如何,我希望这一切都是有意义的,你会发现它有帮助。如果您对此答案有任何进一步的问题,请告诉我。

您所说的共享表单是什么意思,静态字段位于哪个表单中?我的意思是access文件位于共享文件夹中,多个用户使用该文件。这是一个表单ManDC,我想在其中实现上述设置,对不起,我不确定静态字段是什么意思谢谢你这么多解释的答案,是的,我现在知道技术,我想我应该在变量中输入值。我使用Me.DataForm.Requery的原因是我。由于某种原因,Requery没有刷新子表单。我将尝试使用方法1,就像我使用第三个选项一样,表单将返回所有值,我只需要少数字段的值。谢谢你的帮助