Главная страница
    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.031 c
14-1102941844
IllusoryOrion
2004-12-13 15:44
2005.01.02
Что бы вы хотели видеть в...


9-1094802793
WondeRu
2004-09-10 11:53
2005.01.02
Какие видеокарты для OpenGL 2.0?


4-1100783516
Balkon
2004-11-18 16:11
2005.01.02
Проблема с организацией работы с железкой через Com-порт...


14-1102824935
AlterEgo of WondeRu
2004-12-12 07:15
2005.01.02
Почему флуд живет и процветает?


3-1102347922
забияка
2004-12-06 18:45
2005.01.02
Проблема с QuickReport





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский