Запуск хранимой процедуры из Excel - PullRequest
3 голосов
/ 05 мая 2011

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

Sub TestStoredProcedure()

    Dim CServer As String
    Dim CDatabase As String
    Dim CLogon As String
    Dim CPass As String
    Dim StartDate As Date
    Dim EndDate As Date
    Dim TStartDate As String
    Dim TEndDate As String

    CServer = "111111"         ' Your server name here
    CDatabase = "111111"    ' Your  database name here
    CLogon = "11111111"     ' your logon here
    CPass = "111111"             ' your  password here

    Dim Cmd1 As New ADODB.Command
    Dim rs As New ADODB.Recordset
    Dim intTemp As Integer

    Set Cmd1 = New ADODB.Command

    Cmd1.ActiveConnection = cn
    Cmd1.CommandText = "callstatisticsbyQ"
    Cmd1.CommandType = adCmdStoredProc

    Cmd1.Parameters.Refresh
    Cmd1.Parameters(0).Value = Worksheets("Sheet2").Range("A1")
    Cmd1.Parameters(1).Value = Worksheets("Sheet2").Range("A2")
    Cmd1.Parameters(2).Value = Worksheets("Sheet2").Range("A3")

    Set rs = Cmd1.Execute()

    rs.Open Cmd1
    Worksheets("Procedure Export").Range("A1").CopyFromRecordset rs

    Call DumpSP("prcGetData", "", "", Worksheets("Procedure Export").Range("A1"))

End Sub

Я получаю сообщение о том, что определенный пользователем тип не определен .

1 Ответ

4 голосов
/ 05 мая 2011

Чтобы использовать ADO, щелкните Сервис-> ссылки в IDE VBA и отметьте «Объекты данных Microsoft ActiveX» - желательно их наивысшую версию.

Кроме того, вы используете cn в качестве соединения, но оно не определено в этой подпрограмме (при условии, что оно не является глобальным), и вам может понадобиться Set Cmd1.ActiveConnection = cn.

Также взгляните на это , оно заранее определяет входные (adParaminput) параметры вместо использования .Refresh, что довольно неэффективно (отправляется на сервер)

Обновить, например, :

rem for create procedure callstatisticsbyQ (@i int, @c varchar(10)) as select 1234;

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

Set cn = New ADODB.Connection
Set Cmd1 = New ADODB.Command
Set Cmd1 = New ADODB.Command

cn.Open "Provider=SQLNCLI10;Server=1.2.3.4;Database=x;Uid=x; Pwd=x;"

Set Cmd1.ActiveConnection = cn
Cmd1.CommandText = "callstatisticsbyQ"
Cmd1.CommandType = adCmdStoredProc
Cmd1.Parameters.Append Cmd1.CreateParameter("p1", adInteger, adParamInput, , Worksheets("Sheet2").Range("A1"))
Cmd1.Parameters.Append Cmd1.CreateParameter("p2", adVarChar, adParamInput, 20, Worksheets("Sheet2").Range("A2"))

Set rs = Cmd1.Execute()
MsgBox rs(0)

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