Выполнение SQL-запросов в асинхронном режиме

Асинхронное выполнение позволяет, не дожидаясь результата выполнения SQL-запроса, продолжить работу в приложении. Для этого предварительно должно быть создано специализированное соединение. В рамках этого соединения, используя метод IDalConnection.CreateCommand необходимо создать команду и настроить ее параметры. В рамках специализированного соединения не поддерживается выполнение команд с помощью метода IDalCommand.Execute или IDalCommand.ExecuteWithoutLast. Выполнение команд осуществляется в виде отдельных задач. Работа с задачами в языке Fore производится с помощью свойств и методов интерфейса ITask. Задачу выполнения SQL-запросов в асинхронном режиме описывает интерфейс IDalCommandTask. Для создания задачи необходимо созданную команду привести к типу IDalCommand2 и вызвать метод IDalCommand2.CreateTask:

Var
    //...
    ORCLAsyncConnect: IDalConnection;
    Command: IDalCommand;
    CmdParams: IDalCommandParams;
    Param: IDalCommandParam;
    TaskCommand: IDalCommandTask;
    //...   
Begin
    //...
    Command := ORCLAsyncConnect.CreateCommand;
    Command.SQL := "insert into Table1(Code) values(:ParamArray)";
    Command.Parse;
    CmdParams := Command.Params;
    CmdParams.Item(0).DataType := DbDataType.Integer;
    Command.MaxParamsRows := 10000;
    //Установка значений параметра
    //...
    //Создание задачи выполнения SQL-запроса в асинхронном режиме
    TaskCommand := (Command As IDalCommand2).CreateTask(DalCommandExecuteType.Execute);

Для выполнения задачи необходимо привести ее к типу ITask и вызвать метод ITask.Start.

Var
    //...
    TaskCommand: IDalCommandTask;
    //...
Begin
    //...
    (TaskCommand As ITask).Start;

После этого SQL-запрос будет выполняться параллельно текущему приложению. Используя свойство ITask.State можно отслеживать состояние выполнения задачи. Результат выполнения SQL-запроса можно получить в свойстве IDalCommandTask.Result.

См. также:

Введение