我正在努力应对在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.
答案 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连接,并填写您的参数和存储过程名称。