Форум: "Начинающим";
Текущий архив: 2008.01.27;
Скачать: [xml.tar.bz2];
ВнизЗапуск долгой операции через ADO, ошибка «Время ожидания вышло»&#133 Найти похожие ветки
← →
Kolan © (2007-12-25 15:42) [0]Здравствуйте,
запускаю хрон проц, которая работает долго(несколько минут) через ADO. Не дождавшись результата получаю исключение «Время ожидания вышшло». Видимо где-то есть этот time out, и не его надо изменить… Но как и где?
← →
Palladin © (2007-12-25 16:07) [1]ну да... есть... называется CommandTimeout
← →
Kolan © (2007-12-25 16:26) [2]> ну да… есть… называется CommandTimeout
Что-то не так млин, с DBE работало…:
Сократил код до минимума для отладки:
var
Query: TADOCommand;
TempTimeOut: Integer;
begin
Query := TADOCommand.Create(nil);
TempTimeOut := DBConnection.CommandTimeout;
DBConnection.CommandTimeout := 300;
try
Query.Connection := DBConnection;
Query.CommandText := "EXECUTE dbo.FILLECO 1401, ""2006-06-10"", ""2006-07-25"", 0, 0, NULL";
Query.Execute;
finally
Query.Free;
DBConnection.CommandTimeout := TempTimeOut;
end;
end;
При запуске получаю саюжевое сообщение.
В Query Analyzer"e это эело выполняестя 60-80 секунд. Куда копать?
← →
Kolan © (2007-12-25 16:27) [3]
> DBE работало
BDE
← →
Правильный_Вася (2007-12-25 16:40) [4]
> хрон проц
хроническая?
← →
Kolan © (2007-12-25 16:42) [5]> хроническая?
пока только хранимая :)
← →
sniknik © (2007-12-25 18:11) [6]в D5, и D6 без апдейтов(SP) c CommandTimeout были проблемы, новое значение не устанавливалось, приходилось править генофонд.
> это эело выполняестя 60-80 секунд. Куда копать?
откопай, неважно откуда, чтонибудь тяжелое бить того кто это писал...
← →
Kolan © (2007-12-25 18:14) [7]> в D5, и D6 без апдейтов(SP) c CommandTimeout были проблемы,
> новое значение не устанавливалось, приходилось править
> генофонд.
Пользую DBS 2006
Перевожу проект с D7 + DBE на DBS 2006 + ADO
> чтонибудь тяжелое бить того кто это писал…
Что это? [2] ? Писал я.
Если имелся ввиду работник Borland, то как обойти тогда? Надо запустить хранимку …
← →
Anatoly Podgoretsky © (2007-12-25 20:10) [8]
DBConnection.CommandTimeout := 300;
Это относится к DBConnection, смотри свойство у TADOCommand
Кроме того надобность в TADOCommand весьма сомнительна, поскольку метод у самого TAdoConnection есть Execute - вот на него и влияет это свойство, а не на TADOCommand
← →
sniknik © (2007-12-25 21:08) [9]> Что это? [2] ? Писал я.
не [2], а процедуру выполняющуюся 80с на "чистом MSSQL" (у нас даже 1С-ники считают подобное неприемлимым...)
или у тебя там массовая рассылка писем через MSSQL, с ожиданием подтверждения?
← →
Kolan © (2007-12-25 21:15) [10]> или у тебя там массовая рассылка писем через MSSQL, с ожиданием
> подтверждения?
Там жуткая, много экранная много экранная хранимка, которую писал не я. И струдом не то что понял, ели ели отформатировал её… Она собирает данные. И запускаться будет раз в месяц.
> Кроме того надобность в TADOCommand весьма сомнительна
Мне там параметры надо подставлять…
Завтра буду пробовать.
← →
sniknik © (2007-12-25 21:29) [11]> И запускаться будет раз в месяц.
тогда ее стоит "запускать" не тебе, а серверу MSSQL в job-е. плюс ко всем преимуществам что это дает (не надо ничего делать например), и время ее работы тебя перестанет беспокоить.
← →
Kolan © (2007-12-25 21:41) [12]> тогда ее стоит «запускать» не тебе, а серверу MSSQL в job-
> е.
Нет. Надо запускать программой. «Раз в месяц» — это административная штука. Пользователь это делает из программы, но примерно раз в месяц…
> и время ее работы тебя перестанет беспокоить
С BDE оно меня и не беспокоило…
← →
ЮЮ © (2007-12-26 12:06) [13]
> Query := TADOCommand.Create(nil);
> TempTimeOut := DBConnection.CommandTimeout;
> DBConnection.CommandTimeout := 300;
почкму бы CommandTimeout не установить у Query? Ты ведб запрос не через DBConnection.Exec выполняешь
← →
Kolan © (2007-12-26 12:13) [14]Установил тайм аут у запроса — получилось. Благодарю.
Интересно а в BDE есть такое понятие как тайм аут? И почему он не ругался?
← →
Shamansky_ne (2007-12-26 15:14) [15]Ты еще поиграй с параметром Prepared должно увеличить скорость обработки
← →
sniknik © (2007-12-26 16:11) [16]> Ты еще поиграй с параметром Prepared должно увеличить скорость обработки
вот это врядли...
если бы был множественный вызов одного и того же "легкого по времени" запроса, то еще может быть. в одном, даже не таком "тяжелом" доля времени в "неподготовленном" запросе невелика. и для одного одна подготовка будет всегда, раньше, позже, какая разнице? сумма времен все равно не изменится.
тут бы другое сильно помогло (если бы не странное желание создать компонент в котором запрос выполняется), выполнение в асинхронном режиме с не-ожиданием результата... пусть сервер его бы и "мусолил" 80сек, для клиента время бы стремилось к 0.
← →
Kolan © (2007-12-26 16:33) [17]> если бы не странное желание создать компонент в котором
> запрос выполняется
Наследство …
← →
bvz (2007-12-28 12:27) [18]Если результат не важен можеш запустить асинхронный вызов хранимки
← →
Ega23 © (2007-12-28 12:31) [19]
> Нет. Надо запускать программой. «Раз в месяц» — это административная
> штука. Пользователь это делает из программы, но примерно
> раз в месяц…
А может пользователь раз в месяц стартует джоб, который, в свою очередь, запускает эту хранимку?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.01.27;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.007 c