在展开父表单的第一行之前,无法引用Access子表单的Form对象。

时间:2018-09-06 16:15:49

标签: vba ms-access

在数据表视图中打开父窗体时,在展开父窗体的第一行之前,我无法引用子窗体控件的Form对象。

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

重现该问题的步骤:

创建两个表:

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表单。
展开数据表的 第一 行,然后将其折叠。
尝试重新查询子窗体,如下所示:

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

关闭并重新打开Parent表单。
展开数据表的 第二 行,然后将其折叠。
尝试使用相同的代码再次查询子表单。

这次失败,并显示以下错误:

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

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

1 个答案:

答案 0 :(得分:1)

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

第一条记录和第二条记录之间的区别是Focus。如果展开第一条记录,则SubForm的第一条控件将成为焦点。对于第二张唱片,您必须集中精力。如果单击第二条记录Subform的记录,则.Requery起作用。如果您在此之后(未展开)单击第一条记录,您的:Requery也会失败。

另一种尝试。展开第一个记录子窗体后,展开第二个(不将焦点设置到控件)。现在,将一条记录添加到表Sub中,其中BFK,然后为.Requery。您将看到第二个记录子表单不会被查询,只是第一个!

解决方案:重新查询控件而不是表单

 Forms!Parent!child.Requery

这会影响所有记录。