我有一个SQL Server存储过程,它接受一些参数并返回记录。前端应用程序是MS Access 2003.我有一个带有一些过滤器控件和一个执行按钮的表单。
当用户点击该按钮时,我希望我的VBA代码使用提供的参数调用存储过程,然后使用Docmd.OpenQuery
或Docmd.OpenTable
在网格中显示结果。
目前,我使用传递查询打开包含存储过程结果的记录集,然后循环遍历记录集以将每个记录插入临时表,然后使用{{1 }}
这似乎不必要地复杂化。我想完全避免临时表,如果可能的话,只需使用DoCmd.OpenTable
在网格中显示记录。如果那是不可能的,我想找到一种方法将记录集中的记录一步插入临时表,而不是循环记录集。
编辑: 我以前曾尝试使用DoCmd.OpenQuery打开传递查询,但已收到"运行时错误3270 - 未找到属性"当DoCmd.OpenQuery行被执行时。这让我相信直接打开通行证是不可能的。以下是我的代码版本的片段:
DoCmd.OpenQuery
编辑: 我终于能够让这种方法起作用了。代码很好。问题是我没有在后端正确设置存储过程的权限。谢谢你的帮助!
答案 0 :(得分:2)
您应该可以使用DoCmd.OpenQuery
打开已保存的传递查询。如果您需要在打开查询之前指定参数值,则可以修改其QueryDef对象的.SQL
属性,例如,类似这样的内容(未经测试):
Set cdb = CurrentDb
Set qdf = cdb.QueryDefs("yourPassThroughQuery")
qdf.SQL = "EXEC yourStoredProcedure " & yourParameterValue
Set qdf = Nothing
DoCmd.OpenQuery "yourPassThroughQuery"
答案 1 :(得分:0)
为什么不用docmd.openquery
打开passthru?我经常使用它。您还可以将passthru设置为表单或报表的来源。在调用之前,您可以更改其.SQL
以符合您的条件。