MS Access组合框以匹配现有记录,如果另一个组合框也匹配

时间:2015-09-25 04:35:27

标签: ms-access

同一个表格中有StreetNumber字段和StreetName字段。我想让用户开始在其中一个字段中输入,当他们在组合框下拉列表中看到现有记录时,他们可以选择它(我可以做到这一点)。然后,当他们点击另一个组合框时,它将显示在第一个组合框中也共享相同信息的所有现有记录。

例如,有了这些记录:

--------------------------------------
ID |StreetNumber |StreetName   |Category
1  |10           |Main Street  |House
2  |20           |Main Street  |Apartment
3  |10           |King Street  |Store
4  |11           |Queen Street |Factory
-----------------------------------

当用户输入" 1"时,在StreetNumber组合框中,它将显示" 10"和" 11"。用户点击10.在StreetName中,用户点击组合框下拉箭头,它显示" Main Street"和#34; King Street"只要。也希望(但可选)它以其他方式工作;如果用户键入" Main Street"首先,StreetNumber应显示" 10"和" 20"在下拉。

额外:如果他们然后选择"主街"在组合框中,选择ID = 1,类别字段自动用" House"填充自身,并在保存而不是创建新ID时更新ID = 1。如何实现这一目标?

这似乎是以前可能已经完成的事情,但要么我没有使用正确的搜索字词,要么没有人使用Access。

感谢您的协助!

1 个答案:

答案 0 :(得分:0)

通常这样做的方法是在组合框的AfterUpdate事件中。更新框后,它将触发一个更新以下组合框源的命令。

理论中,您可以使用某种If / Then语句来检查并查看其他组合框值是否为空,并且是否更新源。问题是,如果你没有使用If / Then语句,那么每次你从任一组合中选择一些东西时,它都会刷新另一个组合,你将失去你选择的值。

所以,让我们假设2个组合; cboStreetNumber和cboStreetName。在Form_Load()事件中,您将加载两个组合:

cboStreetNumber.RowSource = "SELECT distinct StreetNumber FROM MyTable ORDER BY StreetNumber"
cboStreetNumber.Requery
cboStreetName.RowSource = "SELECT distinct StreetName FROM MyTable ORDER BY StreetName"
cboStreetName.Requery

然后,对于cboStreetNumber_AfterUpdate(),请输入:

If IsNull(cboStreetName.Value) Then
    cboStreetName.RowSource = "SELECT distinct StreetName FROM MyTable WHERE StreetNumber = '" & Me.cboStreetNumber.Value & "' ORDER BY StreetName"
    cboStreetName.Requery  
Else
    'No need to change the other combo, it's already been selected.
End If

并且对于cboStreetName_AfterUpdate()放了这个:

If IsNull(cboStreetNumber.Value) Then
    cboStreetNumber.RowSource = "SELECT distinct StreetNumber FROM MyTable WHERE StreetName = '" & Me.cboStreetName.Value & "' ORDER BY StreetNumber"
    cboStreetNumber.Requery  
Else
    'No need to change the other combo, it's already been selected.
End If

现在,这完全是" aircode"并且可能需要一些调整,但它应该非常接近。我唯一指出的是,如果你的街道号码没有作为文字存储,你就不需要变量Me.StreetNumber周围的单引号。

缺点是,如果您选择了其中一个,则无法更改或无法更新其他框。您需要一个重置按钮或其他东西,这有点笨重。这就是为什么级联下拉列表通常不会在两个方向上起作用的原因。 ; O)