Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запуск долгой операции через ADO, ошибка «Время ожидания вышло»&#133


Kolan ©   (2007-12-25 15:42:00) 

Здравствуйте,
 запускаю хрон проц, которая работает долго(несколько минут) через ADO. Не дождавшись результата получаю исключение «Время ожидания вышшло». Видимо где-то есть этот time out, и не его надо изменить… Но как и где?


Ega23   (2007-12-28 12:31:00) [1]


> Нет. Надо запускать программой. «Раз в месяц» — это административная
> штука. Пользователь это делает из программы, но примерно
> раз в месяц…


А может пользователь раз в месяц стартует джоб, который, в свою очередь, запускает эту хранимку?


bvz   (2007-12-28 12:27:00) [2]

Если результат не важен можеш запустить асинхронный вызов хранимки


Kolan   (2007-12-26 16:33:00) [3]

> если бы не странное желание создать компонент в котором
> запрос выполняется

Наследство …


sniknik   (2007-12-26 16:11:00) [4]

> Ты еще поиграй с параметром Prepared должно увеличить скорость обработки
вот это врядли...
если бы был множественный вызов одного и того же "легкого по времени" запроса, то еще может быть. в одном, даже не таком "тяжелом" доля времени в "неподготовленном" запросе невелика. и для одного одна подготовка будет всегда, раньше, позже, какая разнице? сумма времен все равно не изменится.

тут бы другое сильно помогло (если бы не странное желание создать компонент в котором запрос выполняется), выполнение в асинхронном режиме с не-ожиданием результата... пусть сервер его бы и "мусолил" 80сек, для клиента время бы стремилось к 0.


Shamansky_ne   (2007-12-26 15:14:00) [5]

Ты еще поиграй с параметром Prepared должно увеличить скорость обработки


Kolan   (2007-12-26 12:13:00) [6]

Установил тайм аут у запроса — получилось. Благодарю.

Интересно а в BDE есть такое понятие как тайм аут? И почему он не ругался?


ЮЮ   (2007-12-26 12:06:00) [7]


>  Query := TADOCommand.Create(nil);
>  TempTimeOut := DBConnection.CommandTimeout;
>   DBConnection.CommandTimeout := 300;

почкму бы CommandTimeout не установить у  Query? Ты ведб запрос не через  DBConnection.Exec  выполняешь


Kolan   (2007-12-25 21:41:00) [8]

> тогда ее стоит «запускать» не тебе, а серверу MSSQL в job-
> е.

Нет. Надо запускать программой. «Раз в месяц» — это административная штука. Пользователь это делает из программы, но примерно раз в месяц…


> и время ее работы тебя перестанет беспокоить

С BDE оно меня и не беспокоило…


sniknik   (2007-12-25 21:29:00) [9]

> И запускаться будет раз в месяц.
тогда ее стоит "запускать" не тебе, а серверу MSSQL в job-е. плюс ко всем преимуществам что это дает (не надо ничего делать например), и время ее работы тебя перестанет беспокоить.


Kolan   (2007-12-25 21:15:00) [10]

> или у тебя там массовая рассылка писем через MSSQL, с ожиданием
> подтверждения?

Там жуткая, много экранная много экранная хранимка, которую писал не я. И струдом не то что понял, ели ели отформатировал её… Она собирает данные. И запускаться будет раз в месяц.


> Кроме того надобность в TADOCommand весьма сомнительна

Мне там параметры надо подставлять…

Завтра буду пробовать.


sniknik   (2007-12-25 21:08:00) [11]

> Что это? [2] ? Писал я.
не [2], а процедуру выполняющуюся 80с на "чистом MSSQL" (у нас даже 1С-ники считают подобное неприемлимым...)
или у тебя там массовая рассылка писем через MSSQL, с ожиданием подтверждения?


Anatoly Podgoretsky   (2007-12-25 20:10:00) [12]

DBConnection.CommandTimeout := 300;
Это относится к DBConnection, смотри свойство у TADOCommand
Кроме того надобность в TADOCommand весьма сомнительна, поскольку метод у самого TAdoConnection есть Execute - вот на него и влияет это свойство, а не на TADOCommand


Kolan   (2007-12-25 18:14:00) [13]

> в D5, и D6 без апдейтов(SP) c CommandTimeout были проблемы,
>  новое значение не устанавливалось, приходилось править
> генофонд.

Пользую DBS 2006

Перевожу проект с D7 + DBE на DBS 2006  + ADO


> чтонибудь тяжелое бить того кто это писал…

Что это? [2] ? Писал я.

Если имелся ввиду работник Borland, то как обойти тогда? Надо запустить хранимку …


sniknik   (2007-12-25 18:11:00) [14]

в D5, и D6 без апдейтов(SP) c CommandTimeout были проблемы,  новое значение не устанавливалось, приходилось править генофонд.

> это эело выполняестя 60-80 секунд. Куда копать?
откопай, неважно откуда, чтонибудь тяжелое бить того кто это писал...


Kolan   (2007-12-25 16:42:00) [15]

> хроническая?

пока только хранимая :)


Правильный_Вася   (2007-12-25 16:40:00) [16]


>  хрон проц

хроническая?


Kolan   (2007-12-25 16:27:00) [17]


> DBE работало

BDE


Kolan   (2007-12-25 16:26:00) [18]

> ну да… есть… называется 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 секунд. Куда копать?


Palladin   (2007-12-25 16:07:00) [19]

ну да... есть... называется CommandTimeout


Наверх

Титульная страница Поиск, карта сайта Написать письмо