jsSessionThreadQry component:
The jsSessionThreadQry component runs threaded queries (automatically detecting whether to use the dataset's .Open or .ExecSQL method). Dbl click on the component at design time for instructions for its use.
Instructions for use:
Drop a TDatabase, TQuery, and TjsSessionThreadQry onto a form.
Set the following properties:
TDatabase.SessionName = TjsSessionThreadQry.SessionName,
TQuery.SessionName = TjsSessionThreadQry.SessionName,
TQuery.DatabaseName = TDatabase.DatabaseName.
At run time, set TjsSessionThreadQry.QueryEnabled := True to run the threaded query.
Important: Do NOT connect the query to a datasource.
Class Definitions:
type TjsSessionThreadQryAboutBoxComponentEditor =
class(TComponentEditor)
private
{ Private declarations }
protected
{ Protected declarations }
public
function GetVerbCount : Integer; override;
function GetVerb(Index : Integer) : String; override;
procedure ExecuteVerb(Index : Integer); override;
published
{ Published declarations }
end;
type TQryThread = class(TThread)
private
FQuery : TQuery;
protected
procedure Execute; override;
public
constructor Create(bCreateSuspended : Boolean; Query : TQuery);
end;
type TjsSessionThreadQry = class(TSession)
private
FQueryActive : Boolean;
FQueryEnabled : Boolean;
FQuery : TQuery;
FQryThread : TQryThread;
FOnThreadDone : TNotifyEvent;
function GetQuery : TQuery;
procedure SetQuery(Value : TQuery);
protected
procedure Loaded; override;
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
procedure ThreadDone(Sender : TObject); virtual;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
property QueryActive : Boolean read FQueryActive;
procedure Execute;
published
property Query : TQuery read GetQuery write SetQuery;
property OnThreadDone : TNotifyEvent read FOnThreadDone write
FOnThreadDone;
end;