如何在Access数据输入表单中查询只有当前record/row的组合框?

How to query combo box of only current record/row in Access data entry form?

我在 Access 中创建了一个数据输入表单,该表单使用组合框输入农民姓名。使用组合框是为了方便并确保只输入列表中的农民。为了方便组合框在您输入时重新查询。 组合框对于第一个条目效果很好,但在查询下一行时,以前农民的名字会消失。我认为,Access 正在重新查询所有下拉菜单而不是当前的 drop-down/combo-box.

查询下拉列表的VBA如下:

 Public Sub FilterComboAsYouType(combo As ComboBox, defaultSQL As String, 
   lookupField As String)
   Dim strSQL As String
     If Len(combo.Text) > 0 Then
    strSQL = defaultSQL & " AND " & lookupField & " LIKE '*" & combo.Text & 
   "*'"
    Else
       strSQL = defaultSQL   'This is the default row source of combo box
   End If
    combo.RowSource = strSQL
    combo.Dropdown

  End Sub

Private Sub Combo137_Change()
    FilterComboAsYouType Me.Combo137, "SELECT  farmer.name,farmer.ID FROM farms INNER JOIN farmer ON 
 farms.ID = farmer.farm_id where farms.ID LIKE" & "'" & Form_Name & "*'", "farmer.name"
 End Sub

Private Sub Combo137_GotFocus()
If Form_Name <> "" Then
FilterComboAsYouType Me.Combo137, "SELECT  farmer.name,farmer.ID FROM farms INNER JOIN farmer ON 
farms.ID = farmer.farm_id where farms.ID LIKE" & "'" & Form_Name & "*'", "farmer.name"
Else
FilterComboAsYouType Me.Combo137, "SELECT  farmer.name,farmer.ID FROM farms INNER JOIN farmer ON 
  farms.ID = farmer.farm_id where farms.ID LIKE" & "'" & "NONE" & "*'", "farmer.name"
End If
End Sub

是的,所有记录都将显示相同的筛选列表,因为只有一个组合框并且 属性 设置反映在所有实例中。根据另一个 field/control 中的值过滤组合框 RowSource 被称为“级联”或“依赖”。此外,您的 RowSource 有别名 - 保存的值不是显示的值。当列表被过滤时,显示别名将不可用于具有已被过滤掉的保存值的记录。这是级联组合框的一个众所周知的问题。处理选项:

  1. 对于任何表单样式,仅过滤列表以获取新记录或更改主值时,然后重置为现有记录的完整列表

  2. 对于连续或数据表视图中的表单,在表单 RecordSource 中包含查找 table,将文本框绑定到查找 table 中的描述性字段,将文本框放在组合框的顶部,将文本框设置为 Locked Yes 和 TabStop No