Нужно ли определять переменную таблицы в хранимых процедурах MSQL, если я хочу вызвать хранимую процедуру из Excel VBA? - PullRequest
1 голос
/ 01 марта 2012

Я пытаюсь вызвать хранимую процедуру из Excel 2007 VBA.Я хотел бы получить возврат из хранимой процедуры в лист Excel.Но я получаю «Операция 3074 во время выполнения не разрешена, когда объект закрыт» на рабочих листах («Лист1»). Диапазон («А1»). CopyFromRecordset objMyRecordset.

Я выполняю большой поиск беззаключение.Я просто хочу знать, нужно ли мне сначала определить переменную таблицы в хранимой процедуре MSSQL, а затем вставить в нее.

ниже приведены коды, которые я пишу:

****** хранимая процедура sp_weekly ****

select [field1], [field2] into mytable_2 from mytable_1

select a.*, b.field4 from mytable_2 a
inner mytable_3 b on join a.field1 = b.field3

******* в Excel Маркос

Option Explicit

Sub OpenConnection()

Dim objMyConn As ADODB.Connection
Dim objMyCmd As ADODB.Command
Dim objMyRecordset As ADODB.Recordset
Dim ConnectionString As String
Dim CommandText As String

Set objMyConn = CreateObject("ADODB.Connection")
Set objMyCmd = New ADODB.Command
Set objMyRecordset = New ADODB.Recordset



ConnectionString = "Provider=sqloledb;Data Source=abcsql,1433;Initial Catalog=admin;User Id=sa;Password=1234abcd;"
objMyConn.Open ConnectionString


Set objMyCmd.ActiveConnection = objMyConn
CommandText = "exec [admin].[dbo].[sp_weekly]"
objMyCmd.CommandType = adCmdText

Set objMyRecordset.Source = objMyCmd
objMyRecordset.Open 

Worksheets("Sheet1").Range("A1").CopyFromRecordset objMyRecordset

end

1 Ответ

0 голосов
/ 01 марта 2012

Вы получаете сообщение об ошибке, так как запрос не возвращает результатов.Чтобы выполнить сохраненный процесс, вам нужно сделать что-то вроде:

Sub PullFromStoredProc()

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim cmd As ADODB.Command

Set cn = New ADODB.Connection
cn.Open _
            "Provider=sqloledb;" & _
            "Data Source=abcsql,1433;" & _
            "Initial Catalog=admin;" & _
            "User Id=sa;" & _
            "Password=1234abcd;"

Set cmd = New ADODB.Command

With cmd
    .CommandType = adCmdStoredProc
    .CommandText = "[admin].[dbo].[sp_weekly]"
    .ActiveConnection = cn
    Set rs = .Execute
End With

Sheet1.Range("A1").CopyFromRecordset rs


rs.Close
cn.Close

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...