2017-05-22 62 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

相关问题