Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.01.27;
Скачать: CL | DM;

Вниз

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

 
Kolan ©   (2007-12-25 15:42) [0]

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


 
Palladin ©   (2007-12-25 16:07) [1]

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


 
Kolan ©   (2007-12-25 16:26) [2]

> ну да&#133 есть&#133 называется CommandTimeout

Что-то не так млин, с DBE работало&#133:

Сократил код до минимума для отладки:

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


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

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

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


 
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, с ожиданием
> подтверждения?

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


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

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

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


 
sniknik ©   (2007-12-25 21:29) [11]

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


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

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

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


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

С BDE оно меня и не беспокоило&#133


 
ЮЮ ©   (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]

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

Наследство &#133


 
bvz   (2007-12-28 12:27) [18]

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


 
Ega23 ©   (2007-12-28 12:31) [19]


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


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



Страницы: 1 вся ветка

Текущий архив: 2008.01.27;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.015 c
15-1197969826
RUYurik
2007-12-18 12:23
2008.01.27
Добавление функции преобразования суммы прописью в FastReport 4


15-1198078285
Dmitry S
2007-12-19 18:31
2008.01.27
Рисование


2-1198511187
@!!ex
2007-12-24 18:46
2008.01.27
Вопрос про многопоточность.


15-1198069445
oldman
2007-12-19 16:04
2008.01.27
Поймал себя на мысли, что пишу на Дельфи, как на Бейсике...


2-1198255037
savyhinst
2007-12-21 19:37
2008.01.27
STRING DLL