在数据表视图中打开父窗体时,在展开父窗体的第一行之前,我无法引用子窗体控件的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对象在父窗体的第一行展开之前是不可引用的。
答案 0 :(得分:1)
不知道这是否正确,但是我认为这是由重复的SubForm
控件引起的。尽管它们具有相同的名称,但它们每个都是不同的Form
对象。
第一条记录和第二条记录之间的区别是Focus
。如果展开第一条记录,则SubForm
的第一条控件将成为焦点。对于第二张唱片,您必须集中精力。如果单击第二条记录Subform
的记录,则.Requery
起作用。如果您在此之后(未展开)单击第一条记录,您的:Requery
也会失败。
另一种尝试。展开第一个记录子窗体后,展开第二个(不将焦点设置到控件)。现在,将一条记录添加到表Sub
中,其中B
为FK
,然后为.Requery
。您将看到第二个记录子表单不会被查询,只是第一个!
解决方案:重新查询控件而不是表单
Forms!Parent!child.Requery
这会影响所有记录。