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

Вниз

ADO [eoAsyncExecute] при выполнении хранимых процедур   Найти похожие ветки 

 
Санёк   (2004-12-03 18:14) [0]

Нужно иметь возможность прерывать выполнение хранимой процедуры с клиента, для этого выполняю процедуру в ассинхронном режиме:

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, Grids, DBGrids, DB, ADODB;

type
 TForm1 = class(TForm)
   ADOConnection: TADOConnection;
   ADODataSet: TADODataSet;
   DataSource: TDataSource;
   DBGrid: TDBGrid;
   ButtonStart: TButton;
   ButtonStop: TButton;
   Memo: TMemo;
   procedure ButtonStartClick(Sender: TObject);
   procedure ADOConnectionExecuteComplete(Connection: TADOConnection;
     RecordsAffected: Integer; const Error: Error;
     var EventStatus: TEventStatus; const Command: _Command;
     const Recordset: _Recordset);
   procedure ADOConnectionWillExecute(Connection: TADOConnection;
     var CommandText: WideString; var CursorType: TCursorType;
     var LockType: TADOLockType; var CommandType: TCommandType;
     var ExecuteOptions: TExecuteOptions; var EventStatus: TEventStatus;
     const Command: _Command; const Recordset: _Recordset);
 private
 public
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ButtonStartClick(Sender: TObject);
begin
 ADODataSet.CommandText := Memo.Text;
 ADODataSet.ExecuteOptions := [eoAsyncExecute]; // (1)
 ADODataSet.Open;
end;

procedure TForm1.ADOConnectionExecuteComplete(Connection: TADOConnection;
 RecordsAffected: Integer; const Error: Error;
 var EventStatus: TEventStatus; const Command: _Command;
 const Recordset: _Recordset);
begin
 ADODataSet.EnableControls;
end;

procedure TForm1.ADOConnectionWillExecute(Connection: TADOConnection;
 var CommandText: WideString; var CursorType: TCursorType;
 var LockType: TADOLockType; var CommandType: TCommandType;
 var ExecuteOptions: TExecuteOptions; var EventStatus: TEventStatus;
 const Command: _Command; const Recordset: _Recordset);
begin
 ADODataSet.DisableControls;
end;
end.


Но она не возращает записи, если убираю (1) то всё нормально. Подскажите как правильно использовать [eoAsyncExecute]???


 
tERRORist ©   (2004-12-03 18:19) [1]

Если в ХП есть несколько SQL-конструкций, а не просто один SELECT то надо все до этого поледнего селекта заключить в

set nocount on
...
set nocount off


 
Санёк   (2004-12-03 18:22) [2]

Нет, у меня один select...


 
tERRORist ©   (2004-12-03 18:24) [3]

Еще можно попробовать добавить eoAsyncFetch,eoAsyncFetchNonBlocking и делать EnableControls по событию OnFetchComplete датасета


 
sniknik ©   (2004-12-03 19:54) [4]

> Подскажите как правильно использовать [eoAsyncExecute]???
получать рекордсет в событии onExecuteComplete (заметь там рекордсет в параметрах, вот он тебе и нужен)
а сразу после ADODataSet.Open; с этим параметром рекордсет так и должен быть пустым, т.к. ты же ему сам этим параметром говориш - выполнять (вернее получать данные) асинхронно, в паралельном потоке...
EnableControls/DisableControls в этом случае довольно бессмысленны...
если только так
procedure TForm1.ADOConnectionExecuteComplete(Connection: TADOConnection;
RecordsAffected: Integer; const Error: Error;
var EventStatus: TEventStatus; const Command: _Command;
const Recordset: _Recordset);
begin
 ADODataSet.DisableControls;
 ADODataSet.Recordset:= Recordset;
 ADODataSet.EnableControls;
end;


 
Санёк   (2004-12-06 09:24) [5]

2 sniknik:
> ADODataSet.Recordset:= Recordset;
 При данной операции выводиться ошибка : Recordeset is not open
Может еще нужно что то сделать???


 
tERRORist ©   (2004-12-06 09:50) [6]

Проверяй
if Error = nil then  ADODataSet.Recordset := Recordset;
else
ADODataSet.Recordset := nil;


 
tERRORist ©   (2004-12-06 09:58) [7]

Я щас компоненту допишу ADOAsyncDataSet, могу послать на мыло потестить.


 
Санёк   (2004-12-06 09:59) [8]

:) Буду очень благодарен.


 
Санёк   (2004-12-06 10:05) [9]

чуть не забыл... Tualan@yandex.ru плз...



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

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

Наверх




Память: 0.49 MB
Время: 0.042 c
3-1101997033
zunder
2004-12-02 17:17
2005.01.02
обновление detail - таблицы


1-1103129408
tazik
2004-12-15 19:50
2005.01.02
Введение своего языка в программу


14-1103011442
Gero
2004-12-14 11:04
2005.01.02
Аудио кассеты


14-1103130556
Lancelot
2004-12-15 20:09
2005.01.02
Игры с пингвинами


9-1093526452
Creep
2004-08-26 17:20
2005.01.02
OpenGL в 2D