VBA尝试在访问时为查询设置QueryDefs参数时出错

时间:2013-09-16 05:34:25

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

我有这个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] & "*"

我是否需要设置该参数的所有内容?

3 个答案:

答案 0 :(得分:3)

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

'或

DoCmd.SetParameter "Parameter1", 33
DoCmd.SetParameter "Parameter2", 2
DoCmd.OpenQuery MyQryDef.Name

见这里: https://msdn.microsoft.com/en-us/library/office/ff194182(v=office.14).aspx

哈维

答案 1 :(得分:1)

Access Query的parameters属性是只读的。

你基本上有两种选择我可以想到。

首先,每次需要使用它时,只需完全重写已保存查询的SQL。您可以在此处查看此示例:How to change querydef sql programmatically in MS Access

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

MS Access允许您以此处尝试的方式使用参数化查询(不是您拥有的相同代码),但据我所知,它将要求您在MS SQL Server或MySQL中使用存储过程然后你需要使用ADO。一个很大的缺点是Access报告不能绑定到ADO记录集,因此对于您在此特定实例中尝试执行的操作,这不是一个真正的选项。

答案 2 :(得分:1)

看起来像错字。您正在创建名为“ qfd”的对象,并尝试使用名为“ qdf”的对象 Set qfd = ... 接着 qdf.Para ...

我喜欢在模块中加入Option Explicit,以帮助我发现这些类型的问题。