首页 文章

在扩展父窗体的第一行之前,无法引用Access子窗体Form对象

提问于
浏览
2

在数据表视图中打开父窗体时,我不能引用子窗体控件的窗体对象,直到扩展父窗体的第一行 .

我想知道一个很好的解决方法 . 即使父表单数据表的第一行尚未展开,我也需要能够重新查询这种子表单 .

重现问题的步骤:

创建两个表:

CREATE TABLE Parent (
  PK Text PRIMARY KEY
);

CREATE TABLE Sub (
  PK Text PRIMARY KEY,
  FK Text REFERENCES Parent (PK)
);

插入一些数据:

INSERT INTO Parent (PK) VALUES ('A');
INSERT INTO Parent (PK) VALUES ('B');

INSERT INTO Sub (PK,FK) VALUES ('AA','A');
INSERT INTO Sub (PK,FK) VALUES ('BB','B');

根据这些表创建两个表单,并将默认视图设置为 Datasheet .
Sub 表单添加到 Parent 表单并链接到 sub.FK=parent.PK .
为子窗体容器控件提供名称 child .
打开 Parent 表单 .
展开数据表的 first 行,然后折叠它 .
尝试按如下方式重新查询子表单:

Forms!Parent!child.Form.Requery  'This succeeds.

关闭并重新打开 Parent 表单 .
展开数据表的 second 行,然后折叠它 .
尝试使用相同的代码重新查询子窗体 .

这次它失败并出现以下错误:

Run-time error '2455':
You entered an expression that has an invalid reference to the property Form/Report.

由此,我必须得出结论,在数据表视图中,在扩展父窗体的第一行之前,子窗体Form对象是不可引用的 .

1 回答

  • 1

    不确定这是否正确,但我认为这是由重复 SubForm 控件引起的 . 它们中的每一个都是不同的 Form 对象,尽管它们具有相同的名称 .

    第一个和第二个记录之间的差异是 Focus . 如果展开第一个记录, SubForm 的第一个控件将获得焦点 . 对于第二条记录,您必须自己设置焦点 . 如果单击第二条记录的记录 Subform .Requery 有效 . 如果在此之后单击第一条记录(不展开), :Requery 也会失败 .

    另一件事要尝试 . 展开第一个记录子表单后,展开第二个记录子表单(不将焦点设置为控件) . 现在添加一个记录到表 Sub ,其中 BFK ,然后是 .Requery . 您将看到第二个记录子表单未被重新获取,只是第一个!

    Solution: 重新查询控件而不是表单

    Forms!Parent!child.Requery
    

    这会影响所有记录 .

相关问题