powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / как поменять время ожидания ответа от сервера
7 сообщений из 7, страница 1 из 1
как поменять время ожидания ответа от сервера
    #35687210
Имеется хранимая процедура, выполняется достаточно долго (1 - 5 мин.), соответственно через 30 сек. на последней строке вылетает с ошибкой "Время ожидания истекло". Как заставить ждать ответа от сервера дольше?

На данный момент сделано так:

Set LOADING = CreateObject("ADODB.Recordset")
Set cnt = CreateObject("ADODB.Connection")
cnt.Open "Provider=sqloledb;Data Source=" & server & ";Integrated Security=SSPI;Persist Security Info=False; CommandTimeout = 0;General Timeout=0; Initial Catalog=" & database, user, pwd
LOADING.ActiveConnection = cnt
LOADING.Source = sqlstring
LOADING.Open
...
Рейтинг: 0 / 0
как поменять время ожидания ответа от сервера
    #35688784
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
После создания коннекта сделай:
Код: plaintext
cnt.CommandTimeout =  0 
Учти что работать это будет не на всех базах данных.
...
Рейтинг: 0 / 0
как поменять время ожидания ответа от сервера
    #35693041
Решение нашел на сайте майкрософта.
cnt.Open "PROVIDER=SQLOLEDB;Data Source=" & server & ";ConnectionTimeout =0; Integrated Security=SSPI;Persist Security Info=False; Initial Catalog=" & database, user, pwd


Параметр ConnectionTimeout =0 работает только для SQLOLEDB.
...
Рейтинг: 0 / 0
как поменять время ожидания ответа от сервера
    #35694527
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим ЛеонидовичРешение нашел на сайте майкрософта.
cnt.Open "PROVIDER=SQLOLEDB;Data Source=" & server & ";ConnectionTimeout =0; Integrated Security=SSPI;Persist Security Info=False; Initial Catalog=" & database, user, pwd


Параметр ConnectionTimeout =0 работает только для SQLOLEDB.Ты не правильно нашел.
ConnectionTimeout отвечает за время коннекта. То есть сколько секунд ждать ответа от сервера базы данных когда клиент еще только пытается к нему подключиться прежде чем выдать ошибку "сервер недоступен".
А ты искал возможность выключить таймаут на выполнение отдельных команд. За это отвечает CommandTimeout.

В твоем коде:
Код: plaintext
1.
2.
3.
4.
5.
6.
Set LOADING = CreateObject("ADODB.Recordset")
Set cnt = CreateObject("ADODB.Connection")
cnt.Open "...." ' ConnectionTimeout работает здесь
LOADING.ActiveConnection = cnt
LOADING.Source = sqlstring
LOADING.Open ' CommandTimeout работает здесь
...
Рейтинг: 0 / 0
как поменять время ожидания ответа от сервера
    #35695181
White Owl, ну тогда объясни работу этих параметров на двух примерах:

НЕрабочий вариант (ошибка "Время ожидания истекло" вылетает через 30 сек на строке LOADING.Open):

sqlstring = "exec STD_PLAN_PRODUCT_SOLD 4, '" & Beg & "', '" & fin & "', 1"
cnt.Open "Provider=sqloledb;Data Source=" & server & ";Integrated Security=SSPI;Persist Security Info=False; CommandTimeout = 0;General Timeout=0; Initial Catalog=" & database, user, pwd
LOADING.ActiveConnection = cnt
LOADING.Source = sqlstring
LOADING.Open

рабочий вариант (здесь ждет сколько угодно выполнения процедуры):

sqlstring = "exec STD_PLAN_PRODUCT_SOLD 4, '" & Beg & "', '" & fin & "', 1"
cnt.Open "Provider=sqloledb;Data Source=" & server & ";ConnectionTimeout =0; Integrated Security=SSPI;Persist Security Info=False; Initial Catalog=" & database, user, pwd
LOADING.ActiveConnection = cnt
LOADING.Source = sqlstring
LOADING.LockType = 3
LOADING.Open
...
Рейтинг: 0 / 0
как поменять время ожидания ответа от сервера
    #35697035
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим ЛеонидовичWhite Owl, ну тогда объясни работу этих параметров на двух примерах:Все твои проблемы от невнимательности.

В моем первом ответе (второе сообщение топика) я устанавливал проперть CommandTimeout объекта типа ADODB.Connection. Проперть объекта и параметр коннекта это две очень разные вещи.
Класс ADODB.Command имеет свою собственную проперть CommandTimeout которую можно устанавливать разную для разных ADODB.Command объектов. Но так как все ADODB.Command создаются на основе какого-нибудь ADODB.Connection, то можно установить эту проперть для ADODB.Connection и все ADODB.Command будут ее наследовать. В том числе и невидимые ADODB.Command которые ты сам не создаешь, их создает и убиват ADO, когда ты заполняешь ADODB.Recordset напрямую из ADODB.Connection.

Теперь про послдение примеры:
В строке коннекта находятся только параметры коннекта, которые влияют на то как клиент будет подключаться к серверу. CommandTimeout не явлется параметром коннекта (твой не работающий пример). Поэтому он игнорируется и никак не влияет на реальные параметры коннекта и проперти установленного соединения.
Во втором примере, ты устанавливаешь ConnectionTimeout, который является легальным параметром коннекта и работает. Он говорит твоему клиентскому драйверу, что если сервер указаный в Data Source в принципе пингуется и вроде-бы живой, то клиент будет ждать успешного коннекта до скончания веков, даже если сервер базы данных в это время уже мертвенький. До тех пор пока физический компьютер в сети и отвечает на сетевые запросы - клиент будет считать что БД тоже живая, хоть и тормозная.
Почему второй вариант все-же работает? Потому что клиентский драйвер SQLOLEDB устанавливает по умолчанию свой внутренний CommandTimeout равным ConnectionTimeout'у. Но это уникальная особенность SQLOLEDB. И нельзя закладываться на то, что оно будет работать во всех версиях SQLOLEDB. На практике, это означает что если ты отдашь свой Эксель файл клиенту у которого другая версия Windows никто не гарантирует что твой макрос будет работать точно так же как и на твоей собственной машине.

Универсальный способ управлять временем ожидания команды я уже показал - установить проперть CommandTimeout у объекта ADODB.Connection после установления соединения.
...
Рейтинг: 0 / 0
как поменять время ожидания ответа от сервера
    #35699325
White Owl, вполне развернутый и понятный ответ. благодарю.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / как поменять время ожидания ответа от сервера
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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