Возвращать сообщения базы данных об успешном выполнении SQL при использовании ADO - PullRequest
2 голосов
/ 29 апреля 2010

Я работаю над унаследованным приложением VB6 здесь, на работе, и прошло много времени с тех пор, как я смотрел на VB6 или ADO. Приложение выполняет задачи SQL, а затем выводит данные об успехе / неудаче в файл XML. Если есть ошибка, он вставляет текст в узел задачи.

То, что меня попросили сделать, это попытаться сделать то же самое с другими мирскими сообщениями, которые появляются в результате успешно выполненных задач, например (затронуто 323 строк) .

Не используется объект команды, это просто объект ADODB.Connection. Вот суть кода:

Dim sqlStatement As String
Set sqlStatement = /* sql for task */

Dim sqlConn As ADODB.Connection
Set sqlConn = /* connection magic */

sqlConn.Execute sqlStatement, , adExecuteNoRecords

Каков наилучший способ сбора сообщений, не связанных с ошибками, чтобы я мог их выводить? Или это вообще возможно?

Ответы [ 3 ]

4 голосов
/ 29 апреля 2010

Помимо общего обработчика ошибок в ваших подпрограммах, объект подключения ADO имеет коллекцию Ошибки . После выполнения некоторых действий проверьте ошибки на счет> 0, и если это так, вам нужно выполнить итерацию коллекции и записать все ошибки. Существует метод Очистить , если вы хотите продолжить после регистрации.

После создания проекта быстрого тестирования я обнаружил, что объявление моей переменной с помощью WithEvents VB добавляет событие InfoMessage. Я запустил команду DBCC CHECKDB, и событие InfoMessage сработало один раз. Переменная pConnection содержала 284 ошибки со всеми остальными сообщениями.

примечание: коллекция Connection.Errors основана на 0.

4 голосов
/ 29 апреля 2010

Количество затронутых строк возвращается через необязательный второй аргумент объекта Выполнить Выполнить

объекта Connnection.
Dim num As Long    
sqlConn.Execute sqlStatement, num, adExecuteNoRecords     
MsgBox num & " records were affected"
0 голосов
/ 29 апреля 2010

Я думаю, что затронутые строки - это функция Query Analyzer / Enterprise manager, а не что-то, возвращаемое через API.

Если я правильно помню, используя классический ADO, нам пришлось сделать MoveLast, затем MoveFirst, чтобы заставить все записи пройти по проводам, а затем подсчитать набор записей.

Я также помню кое-что о том, какой тип курсора влияет на количество возвращаемых записей.

Кроме этого, вы пытаетесь захватить оператор печати ... Похоже, вы не используете хранимые процедуры, так что помимо подсчета, что вы ожидаете получить?

...