Ms access 尝试为access中的查询设置QueryDefs参数时发生VBA错误

Ms access 尝试为access中的查询设置QueryDefs参数时发生VBA错误,ms-access,vba,ms-access-2010,Ms Access,Vba,Ms Access 2010,我在access中有这个qry,如果我进入它的设计,它有一个标准(据我所知,这是一个参数) 本qry基于的报告效果很好,点击它会弹出一个小东西,询问所需信息,然后关闭它。在代码中,我试图这样做,并得到一个 Run-time error '424' Object Required 冒犯的界线是: qdf.Parameters("Insurance Name").Value = inputStr 前几行: Set qfd = CurrentDb.QueryDefs("qryInsGrpRost

我在access中有这个qry,如果我进入它的设计,它有一个标准(据我所知,这是一个参数)

本qry基于的报告效果很好,点击它会弹出一个小东西,询问所需信息,然后关闭它。在代码中,我试图这样做,并得到一个

Run-time error '424'
Object Required
冒犯的界线是:

 qdf.Parameters("Insurance Name").Value = inputStr
前几行:

Set qfd = CurrentDb.QueryDefs("qryInsGrpRoster")

 Dim inputStr As String
 inputStr = InputBox("Enter Insurance")
 'Supply the parameter value
 qdf.Parameters("Insurance Name").Value = inputStr
inputStr
肯定等于该值,但它失败了

qry中的标准行为:

Like "*" & [Insurance Name] & "*"

我需要类似的东西来设置参数吗

访问查询的parameters属性是只读的

这里基本上有两种选择,我可以马上想到

第一种方法是在每次需要使用时完全重写已保存查询的SQL。您可以在此处看到这样一个示例:

第二个选项是在每次打开报告时手动设置报告的RecordSource。使用此方法,您根本不会使用已保存的查询。当报表打开时,您需要在代码中设置/存储整个SQL语句,请求用户提供任何输入,并将获得的输入附加到SQL语句中。您可以设置一个系统,将基本SQL存储在一个表中,但为了简单起见,这并不是实现您在这里尝试的操作所必需的


MS Access确实允许您以这里尝试的方式使用参数化查询(与代码不同),但据我所知,它需要您在MS SQL Server或MySQL中使用存储过程,然后需要使用ADO。一个很大的缺点是Access报告无法绑定到ADO记录集,因此这实际上不是您在这个特定实例中尝试执行的操作的选项。

Access查询的parameters属性是只读的

这里基本上有两种选择,我可以马上想到

第一种方法是在每次需要使用时完全重写已保存查询的SQL。您可以在此处看到这样一个示例:

第二个选项是在每次打开报告时手动设置报告的RecordSource。使用此方法,您根本不会使用已保存的查询。当报表打开时,您需要在代码中设置/存储整个SQL语句,请求用户提供任何输入,并将获得的输入附加到SQL语句中。您可以设置一个系统,将基本SQL存储在一个表中,但为了简单起见,这并不是实现您在这里尝试的操作所必需的


MS Access确实允许您以这里尝试的方式使用参数化查询(与代码不同),但据我所知,它需要您在MS SQL Server或MySQL中使用存储过程,然后需要使用ADO。一个很大的缺点是Access报告无法绑定到ADO记录集,因此这实际上不是您在这个特定实例中尝试执行的选项。

在Access 2010和2013中

这使用DAO,可能会引起兴趣

DIM MyQryDef as querydef
Dim a as string 

a = ""

a = a & "PARAMETERS Parameter1 INT, Parameter2 INT; "

a = a & "SELECT f1, f2 FROM atable WHERE "
a = a & "f3 = [Parameter1] AND f4 = [Parameter2] "
a = a & ";"

Set MyQryDef = currentdb().CreateQueryDef("MyQueryName", a)

MyQryDef.Parameters("Parameter1").Value = 33
MyQryDef.Parameters("Parameter2").Value = 2

' You could now use MyQryDef with DAO recordsets

' to use it with any of OpenQuery, BrowseTo , OpenForm, OpenQuery, OpenReport, or RunDataMacro


DoCmd.SetParameter "Parameter1", 33
DoCmd.SetParameter "Parameter2", 2
DoCmd.Form YourFormName
”“或者

请看这里:


哈维在Access 2010和2013中

这使用DAO,可能会引起兴趣

DIM MyQryDef as querydef
Dim a as string 

a = ""

a = a & "PARAMETERS Parameter1 INT, Parameter2 INT; "

a = a & "SELECT f1, f2 FROM atable WHERE "
a = a & "f3 = [Parameter1] AND f4 = [Parameter2] "
a = a & ";"

Set MyQryDef = currentdb().CreateQueryDef("MyQueryName", a)

MyQryDef.Parameters("Parameter1").Value = 33
MyQryDef.Parameters("Parameter2").Value = 2

' You could now use MyQryDef with DAO recordsets

' to use it with any of OpenQuery, BrowseTo , OpenForm, OpenQuery, OpenReport, or RunDataMacro


DoCmd.SetParameter "Parameter1", 33
DoCmd.SetParameter "Parameter2", 2
DoCmd.Form YourFormName
”“或者

请看这里:


哈维似乎是个打字错误。您正在创建名为“qfd”的对象,并尝试使用名为“qdf”的对象
设置qfd=
。。。 然后
qdf.Para


我喜欢在我的模块中加入
选项Explicit
,以帮助我找到这些类型的问题。

看起来像是打字错误。您正在创建名为“qfd”的对象,并尝试使用名为“qdf”的对象
设置qfd=
。。。 然后
qdf.Para


我喜欢在我的模块中加入
选项Explicit
,以帮助我找到这些类型的问题。

Ty你证实了我的恐惧。Ty你证实了我的恐惧。