Access 2010 - combobox - 未绑定表单 - 显示现有记录中的数据

时间:2014-08-13 16:41:03

标签: ms-access access-vba ms-access-2010

我遇到的问题是当用户查看/编辑数据时,在未绑定表单的组合框中显示正确的信息。

填充组合框的表格:

tblLocation   
  idLocation  
  Location
  Location Description

在tblPerson表中,有一个名为idLocation的FK字段。我有一个表单,允许用户从列表框中选择一个人,并在文本框和组合框中显示信息。

使用以下项目设置组合框:

idLocation  <--- column width set to 0
Location

我遇到的问题是当我查看/编辑新人时,在comobox中正确显示数据。

当从ListBox中选择一个人时,来自tblPerson的信息应显示在文本框和组合框中。文本框工作得很好。但是,我正在与组合框架挣扎。请记住所有字段

我的研究发现只有两种方法可以解决这个问题:

  1. 使用DLookup
  2. 手动检查并设置
  3. 如果我使用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 个答案:

答案 0 :(得分:0)

您可以动态更改组合框中显示的数据。在您的方案中,我建议您使用列表框的OnClick事件(一旦选中此人)。添加以下代码:

YourComboBoxName.RowSource =&#34; SELECT * FROM tblLocation WHERE idLocation =&#34; &安培; FK

如果点击一个人后,组合框中的数据没有变化,您可能需要一个Me.Refresh

答案 1 :(得分:0)

将表单基于将连接保留在位置列中的查询。

然后该字段绑定到文本框时将自动显示,不带任何代码。更好的是,如果实际位置值发生变化,则不需要更新代码等。事实上,这是关系数据库的整体美!