Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Ассинхронные запросы и InfoMessage в ADO / 10 сообщений из 10, страница 1 из 1
08.07.2003, 12:23
    #32201831
Ассинхронные запросы и InfoMessage в ADO
Работаю с SQL Server 2000, Access XP и ADO

Необходимо отлавливать сообщения, которые может посылать хранимая процедура (RAISERROR, PRINT).

Знаю, что они должны ловиться в событии InfoMessage объекта Connection, но у меня это событие никогда не срабатывает:-(

Код такой:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Dim WithEvents rs As ADODB.Recordset
Dim WithEvents conn As ADODB.Connection
Dim cmd As ADODB.Command
Dim prm As ADODB.Parameter

Private Sub cmdMonth_Click()
Set conn = CurrentProject.Connection
Set rs = New ADODB.Recordset
Set cmd = New ADODB.Command
cmd.ActiveConnection = conn
cmd.CommandText =  "sp_GosKomStat" 
cmd.CommandType = adCmdStoredProc
cmd.CommandTimeout =  600 
Set prm = New ADODB.Parameter
prm.Type = adInteger
prm.Value =  200301 
cmd.Parameters.Append prm
rs.Open cmd, , adOpenStatic, adLockReadOnly, adAsyncExecute + adAsyncFetch
End Sub

Private Sub conn_InfoMessage(ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pConnection As ADODB.Connection)
MsgBox pError.Description
End Sub


Кто-нибудь такое делал, расскажите как? Пробовал как на VB6, так и на Access. Все последние сервис-паки установлены! Поиском обпользовался, форумов обчитался:-(
...
Рейтинг: 0 / 0
08.07.2003, 14:51
    #32202096
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ассинхронные запросы и InfoMessage в ADO
У Гетц во 2 томе сказано что print поймать нельзя.
здесь пытались отловить для индикации выполнения ХП но по-моему без результатно.
...
Рейтинг: 0 / 0
08.07.2003, 16:13
    #32202252
Ассинхронные запросы и InfoMessage в ADO
Хорошо, фиг с ним с print'ом, а RAISERROR можно? Как?
...
Рейтинг: 0 / 0
08.07.2003, 16:40
    #32202319
VIG
VIG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ассинхронные запросы и InfoMessage в ADO
Вот Пример из нелпа-поиграйся
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
Public Sub DescriptionX()

   Dim cnn1 As ADODB.Connection
   Dim errLoop As ADODB.Error
   Dim strError As String

   On Error GoTo ErrorHandler
   
   ' Intentionally trigger an error.
   Set cnn1 = New ADODB.Connection
   cnn1.Open "nothing"
   
   Exit Sub

ErrorHandler:

   ' Enumerate Errors collection and display 
   ' properties of each Error object.
   For Each errLoop In cnn1.Errors
      strError =  "Error #"  & errLoop.Number & vbCr & _
          "   "  & errLoop.Description & vbCr & _
          "   (Source: "  & errLoop.Source &  ")"  & vbCr & _
          "   (SQL State: "  & errLoop.SQLState &  ")"  & vbCr & _
          "   (NativeError: "  & errLoop.NativeError &  ")"  & vbCr
      If errLoop.HelpFile =  "" Then
         strError = strError & _
            "    No Help file available " & _
            vbCr & vbCr
      Else
         strError = strError & _
            "    (HelpFile:  " & errLoop.HelpFile & " ) " & vbCr & _
            "    (HelpContext:  " & errLoop.HelpContext & " )" & _
            vbCr & vbCr
      End If
         

   Debug.Print strError
   Next

   Resume Next

End Sub
...
Рейтинг: 0 / 0
08.07.2003, 17:04
    #32202368
Ассинхронные запросы и InfoMessage в ADO
К сожалению, в коллекции ADODB.Errors ничего нет, было бы вынул. Асинхронные запросы вообще на VB ничего туда не пишут - коллекция всегда пуста при любых ошибках. Единственный вариант отлавливать их в событиях объекта Connection.
ExecuteComplete отлавливает ошибки или RAISERROR > 10, но мне хочется генерить ошибки, чтобы иметь представлении о ходе выполнения процедуры.
...
Рейтинг: 0 / 0
08.07.2003, 18:12
    #32202468
incold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ассинхронные запросы и InfoMessage в ADO
Обсуждалось здесь
...
Рейтинг: 0 / 0
08.07.2003, 18:42
    #32202494
Ассинхронные запросы и InfoMessage в ADO
Читал я это!
Но проблемму там не решили, сколько ни спрашивал автор темы:-(
...
Рейтинг: 0 / 0
08.07.2003, 18:55
    #32202500
incold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ассинхронные запросы и InfoMessage в ADO
Значит нужно идти в обход.
...
Рейтинг: 0 / 0
08.07.2003, 20:50
    #32202524
Senin Viktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ассинхронные запросы и InfoMessage в ADO
>Значит нужно идти в обход.

Второй набор (рекодсет)?
OutPut-параметры?
...
Рейтинг: 0 / 0
09.07.2003, 10:27
    #32202777
incold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ассинхронные запросы и InfoMessage в ADO
2 Senin Viktor
В обход - значит устранить причины проблемы, а не бороться с последствиями.

Проблема: процедура выполняется слишком медленно, необходимо показывать пользователю процесс ее выполнения, чтобы он не подумал, что компьютер завис.
Варианты решений (предлагались в указанной выше ссылке):
- оптимизировать код процедуры
- вынести выполнение процедуры в задания на сервере
- показывать юзеру мультики
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Ассинхронные запросы и InfoMessage в ADO / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]