我坚持这个问题,我认为可能只是因为我看不到树林(即我错过了明显的树林)。
这是我的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
字段有两列:ID
和Model
。 Model
是绑定列,当我运行查询时,这显示正常 - 它在其他地方没有问题被引用,但是当我在这里检索记录集时,我只得到数字ID
值,而不是来自第二个(绑定)列的文本值。这是出于某些原因在VBA中无法实现吗?我专门为此函数创建了查询,因此查询中是否有属性设置,我可以告诉它只检索Model
值并忽略ID
?
我希望我已经说清楚了。如果有人有任何想法,我们将非常感谢您的帮助,以便继续前进。
答案 0 :(得分:1)
您需要在查询中加入ModelList.Model
,并返回DLookUp
,而不是通常返回的模型。
查找字段纯粹是GUI的东西。底层数据将始终包含存储在表中的值,而不是查找的值。如果要返回查找的值,则始终必须在查询中加入查找表。
(当然有source.trigger("selected", old, selected)
,但使用它会对性能产生重大影响)