访问:使用 VBA 将值传递给参数查询?
Access: passing value to a parameter query using VBA?
我有一个带参数查询的 Access 表单(粉红色)。这是我的表格:
当用户 select 是一个物种时,Access 使用选项组(称为 "speciesSelection")生成的数字在 table 中查找物种名称,它起作用了。但是,我想将物种名称传递给参数查询,以便记录集可以作为突出显示的组合框 (Combo12) 的数据源。但是,当我select一个品种时,组合框是空白的。这是我的代码:
Private Sub speciesSelection_AfterUpdate()
Dim dbs As Database
Dim qdf As QueryDef
Dim rst As Recordset
Set dbs = CurrentDb
'Get species name of the current Cases instance'
Dim speciesChosen As String
speciesChosen = DLookup("Species", "tblSpeciesList", "ID=" & speciesSelection)
'Get the parameter query
Set qdf = dbs.QueryDefs("qryClinicalObservations")
'Supply the parameter value
qdf.Parameters("enterSpecies") = speciesChosen
'Open a Recordset based on the parameter query
Forms!inputForm.Controls!Combo12.RowSource = qdf.OpenRecordset()
End Sub
我使用向导创建了查询。这是快照:
在标准部分,我可以在出现提示时手动输入一个物种(例如 "cat"),而且它有效。但不是我的 VBA 代码...
有明显错误吗?好像没识别到Combo12
编辑:
这是我的新代码。实际上,Combo12 在一个名为 observationsSubform 的子窗体中。这是我的代码和新表格。如您所见,下拉菜单,但选项不可见:
Private Sub speciesSelection_AfterUpdate()
Dim dbs As Database
Dim qdf As QueryDef
Dim rst As Recordset
Set dbs = CurrentDb
'Get species name of the current Cases instance'
Dim speciesChosen As String
speciesChosen = DLookup("Species", "tblSpeciesList", "ID=" & speciesSelection)
MsgBox (speciesChosen)
'Get the parameter query
Set qdf = dbs.QueryDefs("qryClinicalObservations")
'Supply the parameter value
qdf!enterSpecies = speciesChosen
Set Me!observationsSubform!Combo12.Recordset = qdf.OpenRecordset()
组合框的 RowSource
是一个字符串 属性,因此您不能将 Recordset
对象分配给它。将您的 Recordset
分配给组合的 Recordset
属性。
因为这是一个对象赋值,所以使用 Set
关键字。
Set Forms!inputForm!Combo12.Recordset = qdf.OpenRecordset()
如果 Combo12
和 speciesSelection
都包含在相同的表单中 (inputForm
),您可以使用此代替...
Set Me!Combo12.Recordset = qdf.OpenRecordset()
我有一个带参数查询的 Access 表单(粉红色)。这是我的表格:
当用户 select 是一个物种时,Access 使用选项组(称为 "speciesSelection")生成的数字在 table 中查找物种名称,它起作用了。但是,我想将物种名称传递给参数查询,以便记录集可以作为突出显示的组合框 (Combo12) 的数据源。但是,当我select一个品种时,组合框是空白的。这是我的代码:
Private Sub speciesSelection_AfterUpdate()
Dim dbs As Database
Dim qdf As QueryDef
Dim rst As Recordset
Set dbs = CurrentDb
'Get species name of the current Cases instance'
Dim speciesChosen As String
speciesChosen = DLookup("Species", "tblSpeciesList", "ID=" & speciesSelection)
'Get the parameter query
Set qdf = dbs.QueryDefs("qryClinicalObservations")
'Supply the parameter value
qdf.Parameters("enterSpecies") = speciesChosen
'Open a Recordset based on the parameter query
Forms!inputForm.Controls!Combo12.RowSource = qdf.OpenRecordset()
End Sub
我使用向导创建了查询。这是快照:
在标准部分,我可以在出现提示时手动输入一个物种(例如 "cat"),而且它有效。但不是我的 VBA 代码...
有明显错误吗?好像没识别到Combo12
编辑:
这是我的新代码。实际上,Combo12 在一个名为 observationsSubform 的子窗体中。这是我的代码和新表格。如您所见,下拉菜单,但选项不可见:
Private Sub speciesSelection_AfterUpdate()
Dim dbs As Database
Dim qdf As QueryDef
Dim rst As Recordset
Set dbs = CurrentDb
'Get species name of the current Cases instance'
Dim speciesChosen As String
speciesChosen = DLookup("Species", "tblSpeciesList", "ID=" & speciesSelection)
MsgBox (speciesChosen)
'Get the parameter query
Set qdf = dbs.QueryDefs("qryClinicalObservations")
'Supply the parameter value
qdf!enterSpecies = speciesChosen
Set Me!observationsSubform!Combo12.Recordset = qdf.OpenRecordset()
组合框的 RowSource
是一个字符串 属性,因此您不能将 Recordset
对象分配给它。将您的 Recordset
分配给组合的 Recordset
属性。
因为这是一个对象赋值,所以使用 Set
关键字。
Set Forms!inputForm!Combo12.Recordset = qdf.OpenRecordset()
如果 Combo12
和 speciesSelection
都包含在相同的表单中 (inputForm
),您可以使用此代替...
Set Me!Combo12.Recordset = qdf.OpenRecordset()