我有这个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] & "*"
我是否需要设置该参数的所有内容?
答案 0 :(得分:3)
这使用了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
,以帮助我发现这些类型的问题。