![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ADOConnection [D6, MSSQL]
Осирис © (2002-09-20 13:58:00)Выполняю сложный запрос к серверу. Кроме того что запрос сложный (со множеством группировок и join-ов) он еще и возвращает много данных. Где-то секунд через тридцать после query.open появляется сообщение, что время истекло.
Я всегда считал, что за это дело отвечает свойство CommandTimeout. Выставил его значение в 120. Запустил запрос - тоже самое - 30 секунд и все. В чем дело ?
И еще - свойства Mode и CursorLocation. Каким образом лучше их выставить с тем условем, что запросы только на выборку ?
Где нибудь можно найти информацию по сравнению зависимости времени выполнения запросов от этих свойств ?
sniknik (2002-09-21 23:28:00) [1]Да у меня тоже сейчас работает. Но в 5 дельфи было отказавалось менятся. Честное пречестное слово!!!
wicked (2002-09-21 21:15:00) [2]странно....
у меня win98 se, delphi 5 sp2, mssql 7... свойство commandtimeout устанавливаю в 0 (ждать "вечно"), и всё работает...
testpu (2002-09-21 20:33:00) [3]Аналогичная проблема у меня. Если на локальном компьютере стоит MS SQL, то все чики - пуки, а если на удаленном то та же ерунда.
Причем если после генерации исключения тут же попытаться еще раз законнектиться (не завершая программы), то коннектится с полпинка. Еще пробовал вместо имени сервера писать его Ip - шник. Тогда работает с первого раза.
Так что я думаю это проблемы с Windows овским DNS. Он почему- то не отрабатывает как нужно с первого раза.
BlackTiger (2002-09-21 15:38:00) [4]У меня D6 - все таймауты вполне работают. Ставишь
CommandTimeout & ConnectionTimeout (оба!) в 0 и ждешь до опупения.
sniknik (2002-09-21 12:22:00) [5]вот вот про что я и говорил. не верят что это не всегда срабатывает. (глюк ADO? без апдейта) Balu © см. вопрос.
Balu (2002-09-21 10:29:00) [6]Берешь TADOCommand.
Настраиваешь ему ConnectionString
Provider=SQLOLEDB.1;....
CommandTimeout := 180;3-и минуты
CommandText := "Твой запрос"
Execute;
Получаешь 3-и минуты (или сколько тебе надо) на выполнение запроса, без всяких "хакерских" штучек.
sniknik (2002-09-20 17:32:00) [7]подключаеш его в проект
и везде
меняеш
property CommandTimeout: Integer read GetCommandTimeout write SetCommandTimeout default 60;
дефаулт, кстати похоже это у меня тоже изменено 30сек было в оригинале или чтото с памятью моей стало?
можно просто переприсвоить перед подключением.
но здесь говорят это хакерские методы не рекомендуемые к использованию :-))
Осирис (2002-09-20 17:24:00) [8]>>
в MS SQL имеется пираметр, плохо искал правда по умолчанию 600сек. должно хватать, переустановить на 800
EXEC sp_configure "remote query timeout", "800"
go
RECONFIGURE
go
Это я уже нашел. Можно сделать и так: щелкаем на сервер в EM, Свойства, Connections. По моему, это тоже самое.
Но как я уже сказал: это не выход, так как этот период нужно увеличить лишь для конкретной проги, а не для всех, кто коннектится к серверу.
>> Приходилось модуль править ADODB.
Не помнишь где и что ?
sniknik (2002-09-20 17:13:00) [9]в MS SQL имеется пираметр, плохо искал правда по умолчанию 600сек. должно хватать, переустановить на 800
EXEC sp_configure "remote query timeout", "800"
go
RECONFIGURE
go
Осирис (2002-09-20 15:50:00) [10]>> Наверняка в MS SQL имеется пираметр аналогичный CommandTimeout.
В MSSQL не нашел. Есть в QueryAnalizer (утилита для отладки запросов) - тут можно установить значение для текужего коннекта. Даже если бы это и бало в SQL - это не выход, так как этот период нужно увеличить лишь для конкретной проги, а не для всех, кто коннектится к серверу.
>> можно попытатся в строке параметры прописать, не знаю получися ли но попробуй
Provider=SQLOLEDB.1;Persist Security Info=False;General Timeout=60;Connect Timeout=60;User ID=sa;Initial Catalog=345;Data Source=NIKS
Не получается. Вписываю в ConnectionString вышеуказанную строку, говорю Connection:=true; Затем читаю ConnectionString - там осталось все кроме General Timeout=60;Connect Timeout=60;
PS. апдейтов ADO нету. Дома есть Delphi7 - приду проверю, как там с этим обстоят дела.
sniknik (2002-09-20 14:34:00) [11]можно попытатся в строке параметры прописать, не знаю получися ли но попробуй
Provider=SQLOLEDB.1;Persist Security Info=False;General Timeout=60;Connect Timeout=60;User ID=sa;Initial Catalog=345;Data Source=NIKS
Осирис (2002-09-20 14:19:00) [12]Delphi 6.
>> Наверняка в MS SQL имеется пираметр аналогичный CommandTimeout.
Попробуй поискать там.
Сейчас попробую.
sniknik (2002-09-20 14:17:00) [13]Дельфи 5й? поставь 6й и все апдейты ADO, тут уже проскакивало в старых версиях не устанавливался таймаут. Приходилось модуль править ADODB.
passm (2002-09-20 14:02:00) [14]Наверняка в MS SQL имеется пираметр аналогичный CommandTimeout.
Попробуй поискать там.