将子窗体链接到主窗体上的组合框时出现问题

Posted

技术标签:

【中文标题】将子窗体链接到主窗体上的组合框时出现问题【英文标题】:Problems linking a subform to a combobox on the main form 【发布时间】:2010-09-21 16:23:15 【问题描述】:

在访问 ADP 中的表单上有一个未绑定的组合框,显示公司列表(显示名称,id 是绑定字段)。选择公司后,我想在该公司的子表单(其数据源是 companySubscription 视图)中显示订阅信息。我将子表单的链接主字段和链接子字段属性设置为 companyId。基本上,我将其设置为this。

理论上,我认为这意味着当我更改组合框中的值时,子表单应显示该公司的订阅信息。但它不起作用 - 子表单始终显示 companySubscription 视图中的所有数据,无论组合框设置为什么。

救命!

【问题讨论】:

你知道如何根据组合框中选择的内容来切换父窗体的当前记录吗? @Hansup 链接主字段不一定是字段,可以是控件,控件甚至可以保存纯文本。我经常用这个。 我怀疑问题可能出在绑定列上。 【参考方案1】:

找到答案 - 有一些来自另一个项目的代码有帮助:

Private Sub cmbSub_AfterUpdate()
    ' Find the record that matches the control.
    Dim rs As Object

    Set rs = Me.Recordset.Clone
    rs.FindFirst "[subID] = " & str(Nz(Me![cmbSub], 0))
    If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub

并且不得不为 ADP 修改它(感谢this 帖子!)

Private Sub ChooseCo_AfterUpdate()
    ' Find the record that matches the control.
    Dim rs As ADODB.Recordset

    Set rs = Me.Recordset.Clone
    rs.Find "[companyId] = " & Str(Nz(Me![ChooseCo], 0))
    If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub

【讨论】:

这是您选择创建 FIND 组合框时组合框向导生成的代码。我不知道 ADP 版本,但第一个版本是现有的最糟糕的自动生成代码之一。我在这篇文章中将其撕成碎片:***.com/questions/3401645/…——在那篇文章中,我发现“每行代码创建的错误率至少为 2.5 个问题”。我的批评是针对 MDB/ACCDB 中的代码,但 75% 的批评也适用于 ADP——这真的是糟糕的代码。

以上是关于将子窗体链接到主窗体上的组合框时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

Microsoft Access - 子窗体中的组合框基于主窗体组合框

组合框未准确获取数据库值

VB 组合框的问题,在当前的窗体中有很多个combobox,想在加载当前窗体时对这每个组合框添加同样的下拉内容

访问组合框和子窗体

Windows 窗体中的多级组合框

C# Windows 窗体组合框显示错误的“显示值”