簡體   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