Асинхронное выполнение запросов MS SQL

Обсуждение возникших проблем, предложений и ошибок UniDAC компонентов
Ответить
denzay.dp
Сообщения: 10
Зарегистрирован: Пт 11 апр 2014 15:14

Асинхронное выполнение запросов MS SQL

Сообщение denzay.dp » Ср 02 мар 2016 12:46

Добрый день.

в TUniQuery в SpecificOptions для провайдера SQL Server можно указать параметр NonBlocking. Но почему-то эта опция не работает.
Тестовая ХП в SQL

Код: Выделить всё

create procedure TestWait
as
begin
  WAITFOR DELAY '00:10:01';
  SELECT 1
end
Код в тестовом приложении:

Код: Выделить всё

  UniQuery1.SpecificOptions.Values['SQL Server.NonBlocking']:= 'True';
  UniQuery1.SQL.Text:= 'exec TestWait';
  UniQuery1.Open;
В модуле UniProvider.pas метод TOptionsList.ImportOptions опция NonBlocking для InternalClass = 'TOLEDBCommand' установлена в False. Далее в DBAccess.pas в методе TCustomDADataSet.OpenCursor поле FNonBlocking имеет значение False.

Как можно заставить запрос выполняться асинхронно, чтоб пользователь мог его прервать в любой момент? Возможно есть какой-то альтернативный способ прерывания выполнения запроса или установлены не все свойства для TUniConnection\TUniQuery?

Окружение: Delphi Seattle 10, MS SQL Server 2008 R2, UniDAC 6.2.9

Alexp
Devart Team
Сообщения: 349
Зарегистрирован: Пн 27 дек 2010 10:34

Re: Асинхронное выполнение запросов MS SQL

Сообщение Alexp » Чт 03 мар 2016 12:12

Добрый день,

NonBlocking режим подразумевает под собой получение данных в отдельном потоке, а не само выполнение запроса. Так как в вашей процедуре вы используете "паузу", то процесс выполнения (execute) не закончиться пока не пройдет указанное время.

Ответить