Проблемы при выполнении ХП

Программирование на Visual Basic for Applications
HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Проблемы при выполнении ХП

Сообщение HandKot » 04.12.2006 (Пн) 12:14

Добрый день
Выполняю ХП в Excell и евенте ExecuteComplete получаю следующую ошибку
Operation has been cancelled by the user.
Что посоветуете?

вот код:

в модуле
Код: Выделить всё
Public Sub RunReport()
    Call rpt.CreateReport(rID)
End Sub


в модуле класса
Код: Выделить всё
Private WithEvents cn As ADODB.Connection

'процедура формирования отчета
Public Sub CreateReport(id As String)
    Dim cmd As ADODB.Command
   
    On Error GoTo EH
   
    'открываем конекшн
    Set cn = New ADODB.Connection
    cn.ConnectionString = "Моя строка подключения" 'строка соединения
    cn.CursorLocation = adUseClient
    cn.CommandTimeout = 0
    cn.Open
   
    Set cmd = New ADODB.Command
    Dim par As ADODB.Parameter
   
    'создаем объект комманд
    Set cmd = New ADODB.Command
    Set cmd.ActiveConnection = cn
    cmd.CommandTimeout = 0
    cmd.CommandType = adCmdStoredProc
   
    'создаем и добавляем параметр
    Set par = cmd.CreateParameter("@id", adVarChar, adParamInput, 100, id)
    'par.Value = id
    cmd.Parameters.Append par

    'запускаем асинхронное выполнение
    cmd.CommandText = "dbo.Моя_ХП"
    cmd.Execute , , adAsyncExecute           'adCmdStoredProc + adAsyncFetch + adAsyncFetchNonBlocking + adAsyncExecute
   
    Exit Sub
EH:
    'обработчик ошибки
    CloseAll
End Sub

'запрос выполнился
Private Sub cn_ExecuteComplete(ByVal RecordsAffected As Long, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pCommand As ADODB.Command, ByVal pRecordset As ADODB.Recordset, ByVal pConnection As ADODB.Connection)
    If pError Is Nothing Then
        MakeReport pRecordset
    Else
        ThisWorkbook.Worksheets(1).Range("A1") = pError
        ThisWorkbook.Worksheets(1).Name = "Done"
        CloseAll
    End If
End Sub

на сервере

Код: Выделить всё
DECLARE PROCEDURE dbo.Моя_ХП() AS
BEGIN
  SET NOCOUNT ON
  SET ANSI_WARNINGS OFF

  ...
  SELECT ...
END
GO
I Have Nine Lives You Have One Only
THINK!

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Сообщение HandKot » 04.12.2006 (Пн) 14:31

Проблема, вроде, оказалась в неправильном определении ADODB.Coomand
надо определять не в процедуре, а в самом модуле
Код: Выделить всё
Private WithEvents cn As ADODB.Connection
Private cmd As ADODB.Command
I Have Nine Lives You Have One Only
THINK!


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 63

    TopList