2017-05-22 78 views
2

我正在使用MS-Access 2007開發的一箇舊的大規模系統,我負責維護(包括更改的實現)。Ms-Access - 調用返回記錄集的存儲過程

系統與SQL-Server(2012)進行交互。

目前,我需要實現一個更改,其中需要調用一個新的存儲過程,它返回一個簡單的記錄集,每個記錄都是一個字符串。

我試圖用於調用應用程序中已存在的一些代碼(使用ADO並複製到我正在處理的表單中),但沒有任何我嘗試過的方法。

這裏是代碼我試圖使用方法:

glblsqlstrToLabels = "EXEC p_Labels_Print 1 , 2878954 , 'OC9991' , '89029' , 4 , 1 , 'dummy'" 

雖然我使用完全相同的連接字符串,因爲它正在使用的所有在應用程序中,有一個錯誤執行上述語句返回消息(類似...未打開...)。

我開始懷疑我調用函數的方式有錯誤(例如,沒有爲它定義任何參數,並期望類似於select語句的行爲)。

任何幫助將不勝感激。

編輯

以下是的代碼片段說明什麼,我需要有工作:

 Dim RS As Recordset 

     ' Connection string is: Provider=Microsoft.Access.OLEDB.10.0;Persist Security Info=True;Data Source=****;User ID=****;Password=****;Initial Catalog=***;Data Provider=SQLOLEDB.1 

     MyCommand = "EXEC p_Labels_Print 1 , 2878954 , 'OC9991' , '89029' , 4 , 1 , 'asdasd'" 

     RS.Open MyCommand, CurrentProject.Connection 

     Do Until RS.EOF 
      Print <record retrieved> 
     Loop 

     RS.Close 
     Set RS = Nothing 

我得到的錯誤是:Error: Operation is not allowed when the object is closed.

+0

請編輯你的問題,幷包括**完整**代碼,調用過程,以及完整的+確切的錯誤信息。謝謝。 – Andre

+0

您是否在SQL Management Studio中測試過該命令? – Kris

+0

查看示例代碼https://support.microsoft.com/zh-CN/help/185125/how-to-invoke-a-stored-procedure-with-ado-query-using-vba-c-java,實施它,並告訴我們你遇到的任何錯誤 –

回答

1

您需要正確的使用ADO和命令,你不能只是rs.Open一個存儲過程。

使用下面的Microsoft樣板代碼:

Set Cmd1 = New ADODB.Command 
    Cmd1.ActiveConnection = Conn1 
    Cmd1.CommandText = "sp_AdoTest" 
    Cmd1.CommandType = adCmdStoredProc 
    Cmd1.Parameters.Refresh 
    Cmd1.Parameters(1).Value = 10 
    Set Rs1 = Cmd1.Execute() 

哪裏Conn1是你ADODB連接,並填寫您的參數和存儲過程的名稱。

+0

謝謝你,Erik。我建議,現在我沒有得到錯誤。我如何從記錄集中獲取記錄? – Idan

相關問題