在数据表视图中打开父窗体时,我不能引用子窗体控件的窗体对象,直到扩展父窗体的第一行 .
我想知道一个很好的解决方法 . 即使父表单数据表的第一行尚未展开,我也需要能够重新查询这种子表单 .
重现问题的步骤:
创建两个表:
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 回答
不确定这是否正确,但我认为这是由重复
SubForm
控件引起的 . 它们中的每一个都是不同的Form
对象,尽管它们具有相同的名称 .第一个和第二个记录之间的差异是
Focus
. 如果展开第一个记录,SubForm
的第一个控件将获得焦点 . 对于第二条记录,您必须自己设置焦点 . 如果单击第二条记录的记录Subform
.Requery
有效 . 如果在此之后单击第一条记录(不展开),:Requery
也会失败 .另一件事要尝试 . 展开第一个记录子表单后,展开第二个记录子表单(不将焦点设置为控件) . 现在添加一个记录到表
Sub
,其中B
为FK
,然后是.Requery
. 您将看到第二个记录子表单未被重新获取,只是第一个!Solution: 重新查询控件而不是表单
这会影响所有记录 .