Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Изменить ограничение времени выполнения макроса / 5 сообщений из 5, страница 1 из 1
04.04.2014, 13:38
    #38605451
googlogmob
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить ограничение времени выполнения макроса
Добрый день
Столкнулся с проблемой
При запуске макроса, который выполняет подключение к БД SQL и выгрузку на лист результата запроса, возникла сложность:
если запрос сервером обрабатывается сек 10-15 - макрос завершается без ошибок, заполняя нужный лист результатом запроса
если же запустить трудоемкий запрос к БД, то сек через 15-20 появляется сообщение что время ожидания запроса истекло

Вот сам код


Код: vbnet
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.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
Option Explicit 

Sub RunQuery(SQLString As String, CnnStr As String, Er As Boolean, _
       Optional ResultRange As Range = Nothing, Optional IncludeHdr As Boolean = False)
Dim CN As ADODB.Connection, Cmd As ADODB.Command, Rs As ADODB.Recordset
Dim I As Byte, F As Field
On Error Resume Next
  Er = False
  Set CN = New ADODB.Connection
  CN.ConnectionString = CnnStr
  CN.Open
  If Err.Number <> 0 Then
    MsgBox "Ошибка подключения к базе данных: " & Chr(13) & Chr(13) & Err.Description, vbCritical
    Er = True
    Exit Sub
  End If       

  Set Cmd = New ADODB.Command
  Set Cmd.ActiveConnection = CN
  Cmd.CommandText = SQLString
  Cmd.CommandType = adCmdText
  CN.Errors.Clear
  If ResultRange Is Nothing Then
    Cmd.Execute
    If Err.Number <> 0 Then
   MsgBox "Ошибка при выполнении запроса: " & Chr(13) & Err.Description, vbCritical
      Er = True
    End If
  Else
    Set Rs = New ADODB.Recordset
    Set Rs.Source = Cmd
    Rs.Open
    If Err.Number = 0 Then
   If IncludeHdr Then
     I = 0
     For Each F In Rs.Fields
       ResultRange.Offset(0, I).Value = F.Name
       I = I + 1
    Next F
     With Range(ResultRange, ResultRange.Offset(0, I))
       .HorizontalAlignment = xlCenter
       .Font.Bold = True
     End With
     ResultRange.Offset(1, 0).CopyFromRecordset Rs
   Else
     ResultRange.CopyFromRecordset Rs
   End If
    Else
   MsgBox "Ошибка при выполнении запроса: " & Chr(13) & Err.Description, vbCritical
   Er = True    End If
    Rs.Close
  End If
  CN.Close
  Set F = Nothing
  Set Rs = Nothing
  Set Cmd = Nothing
  Set CN = Nothing
End Sub


...
Рейтинг: 0 / 0
04.04.2014, 13:43
    #38605459
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить ограничение времени выполнения макроса
Надо задать Timeout для Command или Connection
...
Рейтинг: 0 / 0
04.04.2014, 13:45
    #38605462
guest12345
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить ограничение времени выполнения макроса
googlogmob,
CommandTimeout
...
Рейтинг: 0 / 0
04.04.2014, 13:46
    #38605464
guest12345
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить ограничение времени выполнения макроса
Shocker.ProНадо задать Timeout для Command или Connection
В данном случае надо для Cmd
...
Рейтинг: 0 / 0
04.04.2014, 14:47
    #38605547
googlogmob
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить ограничение времени выполнения макроса
Большое Спасибо
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Изменить ограничение времени выполнения макроса / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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