我有一个问题,我完全被难住了。或者更确切地说,我有一个混乱的解决方法,我不明白为什么我想做的事情不起作用:
我有一个主窗体/子窗体嵌套。子表单由主/子字段链接(两种表单都不可编辑 - 所以我直接使用记录源字段而不是单独的控件)。子窗体是连续窗体;所以当当前记录发生变化时,子窗体会在主窗体中显示与主窗体相关的记录。子表单基于查询——没有应用参数或过滤器——查询完全根据需要显示记录集。这一切都很完美(因为当主窗体的记录发生变化时,相关的子窗体记录也是如此)。
当我希望子表单基于不同的查询(即基于不同的表)但具有与原始查询相同的唯一键(“ID”)和字段时,就会出现问题。查询都可以正常工作,并且在表单中显示它们也可以正常工作。
当我更改子表单的记录源(从 QueryA 到 QueryB)时,就会出现问题。子表单的记录是正确的(即查询结果按预期显示)-但 LinkChildFields 不再起作用:子表单不再显示查询中的相关记录-它全部显示。换句话说,表单显示整个记录集,就好像我没有设置 LinkChild / LinkMaster 一样。
因此,MainForm 中切换控件的 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 记录)......即使我只是将属性设置为我的调试告诉我它已经设置为。就好像它不再燃烧一样。
很困惑。