【问题标题】:Combo Box selecting First Record and not the defined record选择第一条记录而不是定义的记录的组合框
【发布时间】:2020-08-18 11:27:21
【问题描述】:

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

我有一个带有 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] & """" 

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

【问题讨论】:

  • cboTitle 的 RowSource 是什么?你有没有调试过 - cboTitle 在代码中显示什么值?在引用控件时尝试使用点而不是 bang (!)。
  • 看看.FindFirst,看看如何处理没有找到的东西,用Debug.Print Me.[cboTitle].Value检查combos returnval 我假设框没有绑定到显示的值(显示记录源)!
  • cboTitle 的Row Source 为:SELECT DISTINCTROW [Raw Material Master].PubID, [Raw Material Master].[Raw Material], [Raw Material Master].[CAS Number], [Raw Material Master ].[PRISM CODE] FROM [Raw Material Master] INNER JOIN [Raw Material Details] ON [Raw Material Master].PubID = [Raw Material Details].[Raw Material] ORDER BY [Raw Material Master].[Raw Material] ;

标签: vba ms-access


【解决方案1】:

一个常见的任务是从表单标题部分中未绑定的组合框中过滤表单详细信息部分中的数据。 (不要设置组合框的数据源)我认为这是您正在尝试做的,因为我在 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 都不会以任何可接受的方式显示对其记录源的运行时更改。它是访问方式或高速公路。在设计时链接你的记录源和表单变量然后过滤是我发现的唯一有效的方法。我认为您无法通过代码触发更新后事件的原因是相似的。

【讨论】:

  • 好像你在做某事。错误的。你的问题在哪里,在运行时更改记录源(可能查询字段有不同的名称,所以控制源需要更新)AfterUpdate 不是由代码触发的原因,它旨在通过 gui 捕获更改。如果您想通过代码捕获更改,请使用代码!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-24
  • 2019-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多