同一个表格中有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。
感谢您的协助!
答案 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)