【发布时间】:2015-10-28 16:12:40
【问题描述】:
我有一个 SQL Server 存储过程,它接受一些参数并返回记录。前端应用程序是 MS Access 2003。我有一个带有一些过滤器控件和一个执行按钮的表单。
当用户单击按钮时,我希望我的 VBA 代码使用提供的参数调用存储过程,然后使用 Docmd.OpenQuery 或 Docmd.OpenTable 在网格中显示结果。
目前,我正在使用传递查询打开包含存储过程结果的记录集,然后循环通过记录集将每条记录插入到临时表中,然后使用DoCmd.OpenTable 打开该临时表。
这似乎不必要地复杂。我想完全避免使用临时表,如果可能的话,只需使用DoCmd.OpenQuery 在网格中显示记录。如果这不可能,我想找到一种方法将记录集中的记录一步插入到临时表中,而不是循环记录集。
编辑: 我之前曾尝试按照建议使用 DoCmd.OpenQuery 打开传递查询,但在执行 DoCmd.OpenQuery 行时收到“运行时错误 3270 - 未找到属性”。这让我相信直接打开通道是不可能的。这是我的代码版本的 sn-p:
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"
编辑: 我终于能够让这种方法发挥作用。代码很好。问题原来是我没有在后端正确设置存储过程的权限。感谢您的帮助!
【问题讨论】:
标签: sql-server ms-access