如何在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 有别名 - 保存的值不是显示的值。当列表被过滤时,显示别名将不可用于具有已被过滤掉的保存值的记录。这是级联组合框的一个众所周知的问题。处理选项:
对于任何表单样式,仅过滤列表以获取新记录或更改主值时,然后重置为现有记录的完整列表
对于连续或数据表视图中的表单,在表单 RecordSource 中包含查找 table,将文本框绑定到查找 table 中的描述性字段,将文本框放在组合框的顶部,将文本框设置为 Locked Yes 和 TabStop No
我在 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 有别名 - 保存的值不是显示的值。当列表被过滤时,显示别名将不可用于具有已被过滤掉的保存值的记录。这是级联组合框的一个众所周知的问题。处理选项:
对于任何表单样式,仅过滤列表以获取新记录或更改主值时,然后重置为现有记录的完整列表
对于连续或数据表视图中的表单,在表单 RecordSource 中包含查找 table,将文本框绑定到查找 table 中的描述性字段,将文本框放在组合框的顶部,将文本框设置为 Locked Yes 和 TabStop No