您没有提及该查询在 SQL 服务器上的保存位置/方式/时间。说明您有大型查询但忽略此查询所在的位置是很详细的。
但是,您问是否可以在不使用任何代码的情况下将值传递给 SQL Server?答案是肯定的,但这意味着您最好的方法是创建 + 将大型查询服务器端保存为 VIEW。您将不需要任何参数。
然后,您在访问中启动表单(或报告)时,只需附加一个 where 子句:
MyDate is Between Forms!ReportPrompt!startDate and forms!ReportPrompt!EndDate
上面的意思是没有 VBA,没有参数,如果查询有 100 万行但只有一行符合您的条件,那么只有一行会从网络管道中下来。您可以在报告过滤器中键入以上内容,然后将报告设置为在加载属性 = 是时进行过滤。
但是,如前所述,您并没有提供太多关于您的查询在服务器端的保存位置或方式的信息。如果您谈论的是存储过程(要省略的大量细节),那么您可以通过这种方式传递参数:
Dim qdfPass As DAO.QueryDef
Dim rst As DAO.Recordset
Set qdfPass = CurrentDb.QueryDefs("MyPass")
qdfPass.SQL = "exec sp_myProc " & MyP1Var & "," & MyP2Var
qdfPass.Execute
以上假设您保存了一个名为 MyPass 的直通查询客户端。
事实上,有十几种方法可以将值传递给 SQL 服务器,但是如果没有更多关于查询数据将在何处/如何/何时/何时以及在什么上下文中使用的信息,那么我们只会面临狂野和推测性的猜测。
如果将生成的数据用于报告,那么如上所述,您实际上不需要(也不会受益)存储过程,并且使用“where”子句作为打开报告命令的一部分就足够了。如果您希望将此数据返回到表单,同样的建议也适用。
如果查询和存储过程只是做服务器端处理,那么上面调用存储过程并传递参数的代码就足够了。