【发布时间】:2013-05-20 08:58:09
【问题描述】:
我有一个完全被我难住的问题。或者更确切地说,我有一个混乱的解决方法,我不明白为什么我想做的事情不起作用:
我有一个主窗体/子窗体嵌套。子表单由主/子字段链接(两种表单都不可编辑 - 所以我直接使用记录源字段而不是单独的控件)。子窗体是连续窗体;所以当当前记录发生变化时,子窗体会在主窗体中显示与主窗体相关的记录。该子表单基于一个查询——没有应用参数或过滤器——查询完全根据需要呈现记录集。这一切都很完美(因为当主窗体的记录发生变化时,相关的子窗体记录也是如此)。
当我希望子表单基于不同的查询(即基于不同的表)但具有与原始查询相同的唯一键(“ID”)和字段时,就会出现问题。查询都可以正常工作,并且在表单中显示它们也可以正常工作。
当我更改子表单的记录源(从 QueryA 到 QueryB)时,问题就出现了。子表单的记录是正确的(即查询结果按预期显示)-但 LinkChildFields 不再起作用:子表单不再显示查询中的相关记录-它全部显示。换句话说,表单显示整个记录集,就好像我没有设置 LinkChild / LinkMaster。
所以,MainForm中toggle控件的AfterUpdate事件中的代码是;
Private Sub optActRep_AfterUpdate()
Select Case Me.optActRep
Case 1
MainFormSubFormControl.Form.RecordSource = "QueryA"
Case 2
MainFormSubFormControl.Form.RecordSource = "QueryB"
End Select
我已调试并且属性“linkchldfields”仍然设置正确(“ID”)。我尝试在记录源更新之前将这些设置为 vbNullString 并在记录源更新之后重置(同样的问题)。奇怪的是,如果我更新主窗体中的 linkchildfield 属性(在当前事件中),那么它会起作用并且似乎会触发。所以,
Debug.print Me!Subform.LinkChildFields
正确返回“ID”。我可以让它着火的唯一方法是编码;
Me!Subform.LinkChildFields = "ID"
进入 Mainform 的 Current 事件(即,每次 MainForm 记录更改时,都会显示正确的 QueryB 记录)......即使我只是将属性设置为我的调试告诉我它已经设置为.好像它不再开火了。
很困惑。
【问题讨论】:
-
您是否尝试过在您的 VBA 代码中更新
Form.RecordSource后立即重新设置LinkChildFields的值? -
是的。我什至尝试为每个查询(比如 IDa 和 IDb)添加一个额外的不同字段,并将它们用作案例的部分链接(以排除它保留原始查询中的某些内容)。它只是停止射击。
标签: vba ms-access-2010