Ms-Access - 调用返回记录集的存储过程

时间:2017-05-22 05:07:51

标签: sql-server ms-access

我正在努力应对在MS-Access 2007上开发的旧系统,我负责维护(包括实施更改)。

系统与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.

1 个答案:

答案 0 :(得分: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连接,并填写您的参数和存储过程名称。