Ошибка проверки уникальности Rails SQL3

Чтобы бесстыдно спрятать @Erik, вы хотите создать новый класс, который будет обрабатывать вашу обработку. Что-то вроде cProcedureHandler. В этом классе вам нужно объявить объект ADODB.Connection с помощью ключевого слова WithEvents:

Dim WithEvents cn As ADODB.Connection

. Затем вам нужно написать обработчик событий InfoMessage, который позаботится о многократной печати заявления. Информацию о событии InfoMessage можно найти здесь здесь , а с помощью коллекции Errors соединения можно найти здесь здесь . Итак, вы получите что-то вроде этого:

  Private Sub cn_InfoMessage(ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pConnection As ADODB.Connection)
     Dim err As ADODB.Error

     Debug.Print cn.Errors.Count & " errors"

     For Each err In cn.Errors
        ' handle each error/message the way you need to.
        Debug.Print err.Description
     Next err
  End Sub

Поскольку вы позаботились о том, чтобы код обрабатывал несколько сообщений, теперь вам просто нужно обрабатывать несколько наборов записей, что объясняется довольно хорошо в указанной вами ссылке. Одна вещь, которую я заметил, это то, что ссылка на пример использовалась rs is nothing как проверка, когда не было больше наборов записей, что не сработало для меня. Мне пришлось использовать свойство rs State. Итак, я закончил с этим:

  Public Sub testProcedure()
     Dim cmd As ADODB.Command
     Dim rs As ADODB.Recordset
     Dim recordSetIndex As Integer

     Set cn = modData.getConnection

     Set cmd = New ADODB.Command
     cmd.ActiveConnection = cn
     cmd.CommandType = adCmdStoredProc
     cmd.CommandText = "dbo.sp_foo"

     Set rs = cmd.Execute

     recordSetIndex = 1

     Do Until rs.State = ObjectStateEnum.adStateClosed
        Debug.Print "contents of rs #" & recordIndex
        Do Until rs.EOF
           Debug.Print rs.Fields(0) & rs.Fields(1)
           rs.MoveNext
        Loop

        Set rs = rs.NextRecordset
        recordSetIndex = recordIndex + 1
     Loop

     cn.Close
     Set rs = Nothing
     Set cn = Nothing
     Set cmd = Nothing

  End Sub

Затем, когда вы готовы запустить свой SP из VBA, просто сделайте что-то вроде этого:

set obj = new cProcedureHandler
obj.testFooProcedure

Другое дело ( вы, наверное, уже это сделали): Убедитесь, что ваша фактическая хранимая процедура в SQL Server устанавливает nocount.

0
задан mu is too short 19 January 2019 в 03:16
поделиться