我遇到的问题是当用户查看/编辑数据时,在未绑定表单的组合框中显示正确的信息。
填充组合框的表格:
tblLocation
idLocation
Location
Location Description
在tblPerson表中,有一个名为idLocation的FK字段。我有一个表单,允许用户从列表框中选择一个人,并在文本框和组合框中显示信息。
使用以下项目设置组合框:
idLocation <--- column width set to 0
Location
我遇到的问题是当我查看/编辑新人时,在comobox中正确显示数据。
当从ListBox中选择一个人时,来自tblPerson的信息应显示在文本框和组合框中。文本框工作得很好。但是,我正在与组合框架挣扎。请记住所有字段
我的研究发现只有两种方法可以解决这个问题:
如果我使用DLOOKUP方法:
cmbLocation = (DLookup("Location", "tblLocation", "idLocation=" & .Fields("idLocation")))
问题是msgBox cmbLocation将显示文本而不是FK。如果用户尝试编辑数据但未进行任何更改,则会尝试保存文本而不是FK。
我找到了一种可行的手动方式,但我不确定这是最好的方法:
For i = 0 To (cmbLocation.ListCount - 1)
If Val(cmbLocation.Column(0, i)) = Val(.Fields("idLocation").Value) Then
cmbLocation = cmbLocation.ItemData(i)
Exit For
End If
Next
同样,这也有效 - 但我必须认为我做错了什么 - 可能是显而易见的事情。
有更好的方法吗?
答案 0 :(得分:0)
您可以动态更改组合框中显示的数据。在您的方案中,我建议您使用列表框的OnClick事件(一旦选中此人)。添加以下代码:
YourComboBoxName.RowSource =&#34; SELECT * FROM tblLocation WHERE idLocation =&#34; &安培; FK
如果点击一个人后,组合框中的数据没有变化,您可能需要一个Me.Refresh
答案 1 :(得分:0)
将表单基于将连接保留在位置列中的查询。
然后该字段绑定到文本框时将自动显示,不带任何代码。更好的是,如果实际位置值发生变化,则不需要更新代码等。事实上,这是关系数据库的整体美!