如何在VBA OpenRecordSet中返回绑定列值?

时间:2017-08-10 09:46:25

标签: ms-access access-vba

我坚持这个问题,我认为可能只是因为我看不到树林(即我错过了明显的树林)。

这是我的MS Access VBA函数中代码的相关部分:

'...some setup stuff previously
Dim db As DAO.Database
Dim cp_qry As DAO.QueryDef
Dim cp_rst As DAO.Recordset

'Customer & Product collection
Dim cp_info As Collection
Set cp_info = New Collection

Set db = CurrentDb
'Query
Set cp_qry = db.QueryDefs("CPDetails_ProductQuery")
'Parameters
cp_qry.Parameters("input_id") = cForm.ProductID
'Open recordset
Set cp_rst = cp_qry.OpenRecordset()

If cp_rst.EOF Then GoTo Err_NoDetails

For Each x In cp_rst.Fields
    'next line for testing purposes
    If x.Name = "Model" Then MsgBox x.Value(0)
    If IsNull(x.Value) Then
        cp_info.Add "", x.Name
    Else
        'MsgBox (x.Name & ": " & x.Value)
        cp_info.Add x.Value, x.Name
    End If
    Next

cp_rst.Close
Set cp_rst = Nothing

MsgBox cp_info.Item("Model")

db.Close
'...more stuff dealing with results afterwards

这会运行并几乎完全返回我想要的内容。

我的问题是,在CPDetails_ProductQuery查询的表格中(为了方便起见,我将相关问题的客户和产品详细信息结合在一起)有一个产品Model字段,是一个查询ModelList表的组合框。因此Model字段有两列:IDModelModel是绑定列,当我运行查询时,这显示正常 - 它在其他地方没有问题被引用,但是当我在这里检索记录集时,我只得到数字ID值,而不是来自第二个(绑定)列的文本值。这是出于某些原因在VBA中无法实现吗?我专门为此函数创建了查询,因此查询中是否有属性设置,我可以告诉它只检索Model值并忽略ID

我希望我已经说清楚了。如果有人有任何想法,我们将非常感谢您的帮助,以便继续前进。

1 个答案:

答案 0 :(得分:1)

您需要在查询中加入ModelList.Model,并返回DLookUp,而不是通常返回的模型。

查找字段纯粹是GUI的东西。底层数据将始终包含存储在表中的值,而不是查找的值。如果要返回查找的值,则始终必须在查询中加入查找表。

(当然有source.trigger("selected", old, selected) ,但使用它会对性能产生重大影响)