![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как заставить recordset в ADO открывать запрос с таймаутом ?
Rule © (2006-03-29 12:20:00)Ситуация такая, есть адошный рекордсет, у него есть метод OPEN типа такого
FrecordSet.Open(FTableName, FConnection, RSCursor, RSLock, RSComandType);
Вопрос, если АДОдрайвер долго не отвечает (он же является драйвером железяки которая в виде таблиц возвращает данные), то эта фигня зависает намертво. Как сделать так, чтобы рекордсет пробовал открыться некоторое время, а потом продолжалось выполнение программы дальше ?
Спасибо всем за внимание ...
Rule (2006-04-03 13:19:00) [1]sniknik © (31.03.06 8:21) [3]
а ассинхронное выполнение должно поддерживаться провайдером, или это заложено в самом механизме АДО ???
Rule (2006-04-03 13:18:00) [2]sniknik © (31.03.06 8:21) [3]
но вообще, если время критично, переходи на асинхронное выполнение и событийность... т.е. послал запрос прога сразу продолжила выполнятся. данные потребовались (прошло время) читаеш статус, если еще не выполнилось делаеш ему Cansel
Санцел виснет до конца выполнения опена, а если опен завис то и кенцел висит, правда при синхронном выполнении если задать команду из другого потока
Rule (2006-04-03 13:17:00) [3]sniknik © (31.03.06 8:21) [3]
зачем сложности с приведением? свойство достутно и в самом TADODataSet
а я работаю с рекордсетами а не датасетами ... и вобщем надо чтоб провайдер это поддерживал, а у мня не поддерживается ... это я знаю потомучто там по дефалту вроде стоит 30 секунд, а у меня может висеть до бесконечности
sniknik (2006-03-31 08:21:00) [4]Дырчик © (31.03.06 05:58) [2]
зачем сложности с приведением? свойство достутно и в самом TADODataSet
> прибить єто исполнение ?
можеш попробовать сделать Close конекту.
лучше поставить таймаут (up), сам будет "прибиваться".
но вообще, если время критично, переходи на асинхронное выполнение и событийность... т.е. послал запрос прога сразу продолжила выполнятся. данные потребовались (прошло время) читаеш статус, если еще не выполнилось делаеш ему Cansel, ну и продолжаеш дальше, что там у тебя намечено.
и никаких задержек вообще.
Дырчик (2006-03-31 05:58:00) [5]TCustomADODataSet(TADODataSet).CommandTimeout := ...
Rule (2006-03-29 12:48:00) [6]хорошо ещё пославлю вопрос под другим углом, у меня есьт переменная RecordSet:_Recordset; как мне из другого потока во время выполнения команды FrecordSet.Open прибить єто исполнение ?