Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.01.02;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.037 c
1-1103198145
Roadstar
2004-12-16 14:55
2005.01.02
ListView


14-1102770444
БезОбид
2004-12-11 16:07
2005.01.02
Мануал для "автошемы"


3-1102403008
Mitrofan
2004-12-07 10:03
2005.01.02
Чем подключаться к Sybase


1-1103400620
Алексей
2004-12-18 23:10
2005.01.02
буфер обмена


3-1102021579
ali_t
2004-12-03 00:06
2005.01.02
sql запрос в TQuery





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский