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

Ms access 如果另一个组合框也匹配,MS Access组合框将匹配现有记录,ms-access,Ms Access,同一个表中有一个StreetNumber字段和一个StreetName字段。我想让用户开始键入其中一个字段,当他们在组合框下拉列表中看到一条现有记录时,他们可以选择我目前所能做的。然后,当他们单击另一个组合框时,它将显示在第一个组合框中共享相同信息的所有现有记录 例如,对于这些记录: -------------------------------------- ID |StreetNumber |StreetName |Category 1 |10 |Main Stre

同一个表中有一个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
-----------------------------------
在StreetNumber组合框中,当用户键入1时,它将显示10和11。用户点击10。在StreetName中,用户单击组合框下拉箭头,它只显示Main Street和King Street。也希望但可选它以另一种方式工作;如果用户首先在Main Street中键入,则StreetNumber应在下拉列表中显示10和20

额外:如果他们随后在组合框中选择Main Street,则会选择ID=1,类别字段会自动填充House,并在保存时更新ID=1,而不是创建新的ID=1。如何做到这一点

这似乎是以前可能做过的事情,但要么我没有使用正确的搜索词,要么没有人使用Access


谢谢你的帮助

这通常是在组合框的AfterUpdate事件中完成的。更新框后,它将发出一个命令,更新以下组合框的源

理论上,您可以使用某种If/Then语句来检查另一个combobox值是否为空,并更新源代码。问题是,如果您不使用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
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
对于cboStreetName_,更新后请输入以下内容:

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
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