在另一个文本字段更改Microsoft Access中的值后立即重新查询文本字段

问题描述 投票:0回答:1

我正在创建一个包含多个子表单的表单。它的工作方式是:

  1. 用户在顶部选择BASIC
  2. 这使得文本字段MACHINE NAMETOOL SEQUENCE NO.TOOL NO.TOOL DESCRIPTION发生了变化。
  3. 底部的文本字段MACHINE DESCRIPTIONMACHINE TYPE取决于MACHINE NAME,这意味着
  4. 一旦机器名称更改,机器描述和类型应立即更改。

我用查询来描述BASICMACHINE NAME之间以及MACHINE NAMEMACHINE DESCRIPTION之间的关系。

最终发生的事情是,当我改变BASIC时,MACHINE NAME会发生变化,但MACHINE DESCRIPTION不会立即改变。 MACHINE DESCRIPTION仅在我第二次改变BASIC之后发生变化(并且它变为与之前选择的MACHINE DESCRIPTION相匹配的MACHINE NAME)。

我相信这是因为MACHINE DESCRIPTION等到MACHINE NAME被更改为重新查询数据,这可以解释为什么机器描述的值被“延迟”一次点击。

一旦MACHINE DESCRIPTION改变,我如何使MACHINE NAME改变?

如果需要,我愿意使用VBA代码。

database vba ms-access access-vba
1个回答
0
投票

VBA通常被称为触发语言,因为它通常用于响应应用程序中的事件,MS Access对象库中的事件包括表格和报告等GUI对象中的AfterUpdateOnOpenButtonClick等,甚至可以扩展到在宏和模块中调用函数。

因为您有子窗体显示“快照”结果集到屏幕派生的参数指向表单值的查询,所以在使用Form.Requery保存用户条目以获取更新的“快照”之后,请考虑实际重新检查子表单。事实上,没有Form.Requery更新任何子表单是一个奇迹!

将以下VBA代码放在BASIC文本框后面的AfterUpdate事件中。不要重复Public SubEnd Sub。在更新BASIC条目中的值后,这将使用主窗体的Forms.Controls属性循环遍历所有子窗体。

Private Sub BASIC_AfterUpdate()
     Dim ctrl As Control

     ' SAVE CURRENT RECORD
     DoCmd.RunCommand acCmdSaveRecord 

     ' REQUERY ALL SUBFORMS
     For Each ctrl in Me.Form.Controls
          If ctrl.Type = acSubform Then
              Me.Form.Controls(ctrl.Name).Form.Requery
          End If
     Next ctrl

     Set ctrl = Nothing
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.