除非首先打开表单A,否则无法从单独的子表单B中重新查询具有源对象表单A的子表单A

时间:2014-11-22 20:06:57

标签: ms-access access-vba ms-access-2010

我在网上做了很多搜索,但似乎无法解决这个问题,所以我想我会问这里。我在SO上找到的最接近的问题是How to requery a subform from another form?,但使用该答案并没有帮助(也许提问者的子表单不是基于另一种形式)。

在一行中,我的问题最好描述为:子表单A不能成功重新查询,除非表单A(它是源对象)是手动打开并首先被重新获取

所以这是相关对象的结构:

  • 选项卡式控件'ComboForm'
    • 子表单A
    • 子表格B
  • 表格A
  • 表A

子表单A将表单A作为其“源对象”(在将其作为子表单与其他表单一起放入此选项卡式控件之前,它曾经是一个独立的表单)。表格A依次将表A作为其“记录来源”。

子窗体B上有一个按钮,用于执行以下的VBA代码:

  • 根据子表单中当前打开的记录分配一些变量
  • 根据这些变量
  • 在表A中创建新记录
  • 更新并关闭记录集
  • 重新查询子表单A和ComboForm
  • 将焦点设置为子表单A
  • 转到子表单A的最后一条记录(应该是我可以编辑的新添加的记录)

但是,这本身并不会产生所需的行为:当我按下按钮时子窗体A没有成功重新查询,因此它不会带我到新添加的记录来编辑它。在我关闭并重新打开Comboform之前,新添加的记录不会显示在子表单A中。

我最初认为问题是我需要在重新查询子表单A之前重新查询表单A,因为子表单A将表单A作为其源对象。这有效 - 但只有在首先打开Comboform之前手动打开表格A 。所以这是有效的(其中'F'是子表单B):

Forms![FormA].Requery
F.Parent![SubformA].Requery
F.Parent.Requery

F.Parent.SetFocus
F.Parent![SubformA].SetFocus

DoCmd.GoToRecord , Record:=acLast

但是如果表单A尚未打开则会抛出错误。这不起作用:

DoCmd.OpenForm "TransFormTest"
Forms![TransFormTest].Requery
F.Parent![Trans].Requery
F.Parent.Requery




F.Parent.SetFocus
F.Parent![Trans].SetFocus

DoCmd.GoToRecord , Record:=acLast

以上执行时没有错误,但子表单A无法成功重新查询,除非首先手动打开表单A

任何帮助都会非常感激 - 我最好不要记得每次都打开表格。

0 个答案:

没有答案