访问:使用VBA将值传递给参数查询?

时间:2016-02-28 22:29:19

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

我有一个带有参数查询的Access表单(粉红色)。这是我的表格:

enter image description here

当用户选择物种时,Access使用选项组生成的数字(称为“speciesSelection”)来查找表中的物种名称,并且它可以正常工作。但是,我想将种类名称传递给参数查询,以便记录集可以是突出显示的组合框(Combo12)的数据源。但是,当我选择一个物种时,组合框是空白的。这是我的代码:

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

我使用向导创建了我的查询。这是一个快照:

enter image description here

在标准部分,我可以在提示时手动输入物种(例如“猫”),并且它有效。但不是我的VBA代码...

有明显的错误吗?似乎Combo12不被认可。

编辑:

这是我的新代码。实际上,Combo12在一个名为observationSubform的子表单中。这是我的代码和新表单。如您所见,下拉菜单,但选项不可见:

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()

enter image description here

1 个答案:

答案 0 :(得分:0)

组合框的RowSource是一个字符串属性,因此您无法为其分配Recordset个对象。将您的Recordset分配给组合的Recordset媒体资源。

由于这是对象分配,请使用Set关键字。

Set Forms!inputForm!Combo12.Recordset = qdf.OpenRecordset()

如果Combo12speciesSelection都包含在同一表单(inputForm)中,则可以使用此代码...

Set Me!Combo12.Recordset = qdf.OpenRecordset()