首页 > 解决方案 > 选择第一条记录而不是定义的记录的组合框

问题描述

第一次在这里问,因为我很难过!

我有一个带有 2 个组合框的 MS Access 表单:第一个组合框 (cboPub) 选择一个发布者,然后过滤第二个组合框 (cboTitle),这工作正常,但是拉出的记录是第一个记录,而不是符合条件的记录.

下面的代码:

Private Sub cboPub_AfterUpdate()
cboTitle = Null
cboTitle.Requery
End Sub

Sub cboTitle_AfterUpdate()
    ' Find the record that matches the control.
    Me.RecordsetClone.FindFirst "[Supplier] = """ & Me![cboTitle] & """"

    Me.Bookmark = Me.RecordsetClone.Bookmark

End Sub

我怀疑这是因为这里的行:

Me.RecordsetClone.FindFirst "[Supplier] = """ & Me![cboTitle] & """" 

但我不知道要改变什么让它选择正确的记录。

标签: vbams-access

解决方案


一个常见的任务是从表单标题部分中未绑定的组合框中过滤表单详细信息部分中的数据。(不要设置组合框的数据源)我认为这就是你想要做的,因为我在 afterupdate 事件中指的是表单。如果是这样,请设置表单过滤器,而不是弄乱表单记录源。您的第二个问题是当 cbotitle 的值通过 vba 代码更改时,cboTitle 的 afterupdate 事件不会触发。所以把所有的代码放在cboPub中。

Private Sub cboPub_AfterUpdate()
'cboTitle = dlookup("Title", "SomeTable", "SupplierID = " & cboPub.value) 'how I filtered cboTitle
Me.Filter = "SupplierID = " & cboPub.Value 
Me.FilterOn = True
End Sub

Private Sub cboTitle_AfterUpdate()
Debug.Print "check the immediate window for how cboTitle's after update event does not fire when cboTitle is updated with VBA"
End Sub

警告:将此视为伪代码;确切的过滤器取决于供应商、出版商和标题在表格和组合框中的关联方式。

解释:我认为 access 背后的程序员故意强迫我们完全在设计时设置表单。无论我尝试了什么,Access 都不会以任何可接受的方式显示对其记录源的运行时更改。它是访问方式或高速公路。在设计时链接你的记录源和表单变量然后过滤是我发现的唯一有效的方法。我认为您无法通过代码触发更新后事件的原因是相似的。


推荐阅读