繁体   English   中英

Ms-Access打开源自SQL Server存储过程的查询

[英]Ms-Access Open a Query Sourced from SQL Server stored procedure

我有一个SQL Server存储过程,它接受一些参数并返回记录。 前端应用程序是MS Access 2003.我有一个带有一些过滤器控件和一个执行按钮的表单。

当用户单击该按钮时,我希望我的VBA代码使用提供的参数调用存储过程,然后使用Docmd.OpenQueryDocmd.OpenTable在网格中显示结果。

目前,我正在使用传递查询来打开包含存储过程结果的记录集,然后循环遍历记录集以将每个记录插入临时表,然后使用DoCmd.OpenTable打开该表。

这似乎不必要地复杂化。 我想完全避免临时表,如果可能的话,只需使用DoCmd.OpenQuery在网格中显示记录。 如果那是不可能的,我想找到一种方法将记录集中的记录一步插入临时表,而不是循环记录集。

编辑:我之前尝试使用DoCmd.OpenQuery按照建议打开传递查询,但在执行DoCmd.OpenQuery行时收到“运行时错误3270 - 找不到属性”。 这让我相信直接打开通行证是不可能的。 这是我的代码版本的片段:

sql = "EXEC dbo.rptContractorBidSummary " & IIf(frmClosedProjectWindow.Value = 1, "1", IIf(frmClosedProjectWindow.Value = 2, "2", "NULL"))
Set qdef = CurrentDb.QueryDefs("qryContractorBidSummary")
qdef.Connect = "ODBC;DRIVER=SQL Server;SERVER=" & Cconst.SERVER_NAME & ";DATABASE=" & stDatabase & ";UID=" & stUsername & ";PWD=" & stPassword
qdef.sql = sql
qdef.ODBCTimeout = 1000
qdef.ReturnsRecords = True
Set qdef = Nothing
DoCmd.OpenQuery "qryContractorBidSummary"

编辑:我终于能够使用这种方法。 代码很好。 问题是我没有在后端正确设置存储过程的权限。 谢谢您的帮助!

您应该能够使用DoCmd.OpenQuery打开已保存的传递查询。 如果你需要在打开查询之前指定参数值,你可以修改其QueryDef对象的.SQL属性,例如,像这样(未经测试):

Set cdb = CurrentDb
Set qdf = cdb.QueryDefs("yourPassThroughQuery")
qdf.SQL = "EXEC yourStoredProcedure " & yourParameterValue
Set qdf = Nothing
DoCmd.OpenQuery "yourPassThroughQuery"

你为什么不用docmd.openquery打开passthru? 我经常使用它。 您还可以将passthru设置为表单或报表的来源。 在调用它之前,你改变它的.SQL以符合你的标准。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM