我遇到的问题是当用户查看/编辑数据时,在未绑定表单上的组合框中显示正确的信息 .
填充组合框的表格:
tblLocation
idLocation
Location
Location Description
在tblPerson表中,有一个名为idLocation的FK字段 . 我有一个表单,允许用户从列表框中选择一个人,并在文本框和组合框中显示信息 .
使用以下项目设置组合框:
idLocation <--- column width set to 0
Location
我遇到的问题是当我查看/编辑新人时,数据在comobox中正确显示 .
从ListBox中选择一个人时,来自tblPerson的信息应显示在文本框和组合框中 . 文本框工作得很好 . 但是,我正在与组合框架斗争 . 请记住所有字段
我的研究发现只有两种解决这个问题的方法:
-
DLOOKUP
-
手动检查并设置
如果我使用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
再次,这是有效的 - 但我必须认为我做错了 - 可能是显而易见的事情 .
有一个更好的方法吗?
2 回答
您可以动态更改组合框中显示的数据 . 在您的方案中,我建议您使用列表框的OnClick事件(一旦选中此人) . 添加以下代码:
YourComboBoxName.RowSource =“SELECT * FROM tblLocation WHERE idLocation =”&FK
如果单击一个人后,组合框中的数据没有变化,则可能需要Me.Refresh
将表单基于将连接保留在位置列中的查询 .
然后,当绑定到文本框时,该字段将自动显示,没有任何代码 . 更好的是,如果实际位置值发生变化,则不需要更新代码等 . 事实上,这是关系数据库的整体美!