Как прервать длительный запрос

Виталик
Дата: 19.10.2000 13:11:30
Добрый день всем.

Такой вопрос :
Стоит сервер MSSQL 7.0, клиент написан на Delphi5
Если клиент выполняет длительный запрос, не могу показать пользователю
индикатор выполнения запроса, или хотябы дать ему возможность прервать этот затянувшийся
запрос.
Буду благодарен всем, кто может подсказать, как решить данную проблему, или
Хотя бы подскажет, как ее обойти.

С уважением Виталий.
e-mail: drVik@mail.ru
VadimB
Дата: 19.10.2000 14:44:38
Можно использовать асинхронное или пакетное выполнение запроса.
Если такой возможности нет или не знаешь, то можно поступить так:
Заранее создать таблицу очередь запросов и таблицу результатов запроса.
Для связи запроса и ответа необходимо в этих таблицах предусмотреть специальное поле.

Выполнение запроса разделить на три чести:
1. Клиент помещает текст запроса в очередь запросов и переходит в режим ожидания (см. пункт 3)
2. Сервер периодически опрашивает очередь. Если в очереди есть текст запроса, то сервер удаляет этот запрос из очереди, выполняет и помещает результат в таблицу результатов.
3. Клиент периодически опрашивает таблицу результатов, и если результат есть, то забирает его и удаляет результат из таблицы результатов.
Oleg+F
Дата: 19.10.2000 15:44:44
Попробуйте поэкспериментировать с потоками (класс TThread в Delphi). Иными словами, можно попытаться пустить запрос на выполнение в отдельном потоке программы и в случае большой задержки уничтожить этот поток. Правда скажу честно, что сам этого делать не пробовал. Но видел похожие примеры в каких-то книжках по Delphi (правда не помню в каких).
Виталик
Дата: 23.10.2000 13:01:16
Не совсем понял, как все же прервать запрос, но попробую..
Спасибо за советы.
Виталик.
Fompro
Дата: 02.12.2000 10:43:12
Если Вы используете DB-LIBRARY, то Вы можете использовать dbcancel или dbcanquery (если Вы знаете указатель PDBPROCESS). Для ODBC Вы можете использовать SQLFreeStmt. (Подробности в BO)
AndyMandy
Дата: 05.12.2000 03:49:12
Однозначно!
Прервать запрос как и получить состяние запроса можно используя DB-Library, прерываение как в предыдущем послании, а состояние с помощью callback-функций, к сожалению нет SQL-book под рукой, но по моему dbresults.