MSACCESS:在子窗体记录源变化引起链接子字段的损失结合(MSAccess: Change in

2019-10-18 04:15发布

我有林通过完全难住了一个问题。 或者说,我有一个变通是凌乱的,我不明白为什么我想要做的不工作:

我有一个的MainForm /子窗体窝。 子窗体由主/子字段连接(均未形式editable-因此Im使用记录源字段直接而不是单独的控制)。 子窗体是连续形式; 这样子窗体显示在MainForm中在当前记录更改相关的主记录。 子窗体是基于查询 - 没有参数或过滤器被运用于─查询需要精确地呈现记录。 这一切都完美地工作(在当的MainForm的变化的记录,所以做了相关的子窗体记录)。

问题出现了,当我想根据不同的不同的查询(即基于不同的表)子窗体 - 但具有相同的唯一密钥(以下简称“ID”)和原始查询的字段。 的查询都是做工精细,并在窗体显示它们工作正常。

当我改变了窗体(所以从QueryA到QueryB)的记录源的问题就出现了。 该记录的子窗体是正确的(即查询结果显示为预期) - 但链接子字段不再工作:子窗体不再显示了它显示他们所有的查询 - 相关记录。 换言之,所述表格显示整个记录集,如同我没有LinkChild / LinkMaster集。

所以,在MainForm中是肘节控制的更新后事件的代码;

Private Sub optActRep_AfterUpdate()

Select Case Me.optActRep
    Case 1
        MainFormSubFormControl.Form.RecordSource = "QueryA"
    Case 2
        MainFormSubFormControl.Form.RecordSource = "QueryB"
End Select

IVE调试和属性“linkchldfields”仍设置正确(“ID”)。 我用尽记录源更新之前,这些设置为vbNullString和记录源更新(同样的问题)后复位。 奇怪的是,如果我更新在MainForm中的linkchildfield属性(在当前事件) - 那么它的工作原理,似乎火。 所以,

Debug.print Me!Subform.LinkChildFields

正确返回“ID”。 我可以把它开火的唯一途径是通过编码;

Me!Subform.LinkChildFields = "ID"

到MainForm中的Current事件(即,使得每次的MainForm记录更改,显示正确的QueryB记录)......虽然我只是在设定的财产,以什么我调试告诉我它已经被设置为。 它仿佛它不再火灾。

很迷茫。

Answer 1:

访问继续做daftest事情。

与表单设置无关的。 基础查询(QueryB)是基于交叉表查询。 虽然查询工作的形式(当直接使用查询作为形式记录源包括)的罚款独立,这显然不喜欢使用字段作为唯一键的一个(即使它是相同的格式类型和分组的产品/列而不是一个交叉表字段)。

我改变了查询的交叉部分(IIF使用和点心手动创建交叉等价字段值)分组查询和形式,现在工作得很好。

我的教训learnt-不使用交叉表查询! 道歉红鲱鱼。



Answer 2:

Surferosa道歉这么晚才回复,我只找到这个线程当我遇到你类似的问题。 我不知道该交叉表查询是你的问题的原因。 我可以设置链接主是无论是列名或控件名称。 我只能设置链接子字段是列名,将其设置为一个控件名称不起作用。 哎哟。 您可以更改链接子字段中无论是在设计视图或通过VBA子窗体控件,但在许多情况下,接入继续使用,即使它显示的新值前值。 这是分的形式,其记录源是一个表或简单的两个表查询真实。 我没有时间或耐心任何进一步的表征这个问题。 对不起! 我的解决方案是在子形式的控制链接子字段设置为一个值,例如“ID”,然后创建与每个该名称和通过我的不同子形式使用的每一个记录源的别名。 那么你只需要当您切换子的形式来改变源对象。 希望这可以帮助 ! HB



文章来源: MSAccess: Change in subform recordsource causes loss of LinkChildFields binding