git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.jvcl@19 7f62d464-2af8-f54e-996c-e91b33f51cbe
1353 lines
39 KiB
ObjectPascal
1353 lines
39 KiB
ObjectPascal
{-----------------------------------------------------------------------------
|
|
The contents of this file are subject to the Mozilla Public License
|
|
Version 1.1 (the "License"); you may not use this file except in compliance
|
|
with the License. You may obtain a copy of the License at
|
|
http://www.mozilla.org/MPL/MPL-1.1.html
|
|
|
|
Software distributed under the License is distributed on an "AS IS" basis,
|
|
WITHOUT WARRANTY OF ANY KIND, either expressed or implied. See the License for
|
|
the specific language governing rights and limitations under the License.
|
|
|
|
The Original Code is: JvOdacSmartQuery.PAS, released on 2002-05-26.
|
|
|
|
The Initial Developer of the Original Code is Jens Fudickar
|
|
All Rights Reserved.
|
|
|
|
Contributor(s):
|
|
|
|
You may retrieve the latest version of this file at the Project JEDI's JVCL home page,
|
|
located at http://jvcl.delphi-jedi.org
|
|
|
|
Description:
|
|
Oracle Dataset with Threaded Functions
|
|
|
|
Known Issues:
|
|
-----------------------------------------------------------------------------}
|
|
// $Id: JvOdacSmartQuery.pas 12461 2009-08-14 17:21:33Z obones $
|
|
|
|
unit JvOdacSmartQuery;
|
|
|
|
{$I jvcl.inc}
|
|
|
|
interface
|
|
|
|
uses
|
|
{$IFDEF UNITVERSIONING}
|
|
JclUnitVersioning,
|
|
{$ENDIF UNITVERSIONING}
|
|
SysUtils, Classes, StdCtrls, ExtCtrls, Forms, Controls,
|
|
DB,
|
|
OraSmart, Ora, DBaccess,
|
|
JvThread, JvThreadDialog, JvDynControlEngine,
|
|
JvBaseDBThreadedDataset;
|
|
|
|
type
|
|
TJvOdacThreadedDatasetAllowedContinueRecordFetchOptions =
|
|
class(TJvBaseThreadedDatasetAllowedContinueRecordFetchOptions)
|
|
public
|
|
constructor Create; override;
|
|
published
|
|
property All;
|
|
End;
|
|
|
|
TJvOdacThreadedDatasetEnhancedOptions = Class(TJvBaseThreadedDatasetEnhancedOptions)
|
|
private
|
|
function GetAllowedContinueRecordFetchOptions: TJvOdacThreadedDatasetAllowedContinueRecordFetchOptions;
|
|
procedure SetAllowedContinueRecordFetchOptions(
|
|
const Value: TJvOdacThreadedDatasetAllowedContinueRecordFetchOptions);
|
|
protected
|
|
function CreateAllowedContinueRecordFetchOptions: TJvBaseThreadedDatasetAllowedContinueRecordFetchOptions;
|
|
override;
|
|
published
|
|
property AllowedContinueRecordFetchOptions: TJvOdacThreadedDatasetAllowedContinueRecordFetchOptions read
|
|
GetAllowedContinueRecordFetchOptions write SetAllowedContinueRecordFetchOptions;
|
|
end;
|
|
|
|
TJvOdacDatasetThreadHandler = class(TJvBaseDatasetThreadHandler)
|
|
private
|
|
FRefreshKeyFields: string;
|
|
FRefreshKeyValues: Variant;
|
|
protected
|
|
function CreateEnhancedOptions: TJvBaseThreadedDatasetEnhancedOptions; override;
|
|
property RefreshKeyFields: string read FRefreshKeyFields write
|
|
FRefreshKeyFields;
|
|
property RefreshKeyValues: Variant read FRefreshKeyValues write
|
|
FRefreshKeyValues;
|
|
public
|
|
constructor Create(AOwner: TComponent; ADataset: TDataSet); reintroduce;
|
|
override;
|
|
procedure AfterRefresh; override;
|
|
procedure BeforeRefresh; override;
|
|
procedure RestoreRefreshKeyFields;
|
|
procedure SaveRefreshKeyFields;
|
|
End;
|
|
|
|
TJvOdacSmartQuery = class(TSmartQuery, IJvThreadedDatasetInterface)
|
|
procedure BreakExecution;
|
|
function DoGetInheritedNextRecord: Boolean;
|
|
procedure DoInheritedAfterOpen;
|
|
procedure DoInheritedAfterRefresh;
|
|
procedure DoInheritedAfterScroll;
|
|
procedure DoInheritedBeforeOpen;
|
|
procedure DoInheritedBeforeRefresh;
|
|
procedure DoInheritedInternalLast;
|
|
procedure DoInheritedInternalRefresh;
|
|
procedure DoInheritedSetActive(Active: Boolean);
|
|
procedure DoInternalOpen;
|
|
function GetDatasetFetchAllRecords: Boolean;
|
|
function IsThreadAllowed: Boolean;
|
|
procedure SetDatasetFetchAllRecords(const Value: Boolean);
|
|
private
|
|
FBeforeFetch: TBeforeFetchEvent;
|
|
FThreadHandler: TJvBaseDatasetThreadHandler;
|
|
function GetAfterOpenFetch: TDataSetNotifyEvent;
|
|
function GetAfterThreadExecution: TJvThreadedDatasetThreadEvent;
|
|
function GetBeforeThreadExecution: TJvThreadedDatasetThreadEvent;
|
|
function GetDialogOptions: TJvThreadedDatasetDialogOptions;
|
|
function GetEnhancedOptions: TJvOdacThreadedDatasetEnhancedOptions;
|
|
function GetThreadOptions: TJvThreadedDatasetThreadOptions;
|
|
procedure SetAfterOpenFetch(const Value: TDataSetNotifyEvent);
|
|
procedure SetAfterThreadExecution(const Value: TJvThreadedDatasetThreadEvent);
|
|
procedure SetBeforeThreadExecution(const Value: TJvThreadedDatasetThreadEvent);
|
|
procedure SetDialogOptions(Value: TJvThreadedDatasetDialogOptions);
|
|
procedure SetEnhancedOptions(const Value:
|
|
TJvOdacThreadedDatasetEnhancedOptions);
|
|
procedure SetThreadOptions(const Value: TJvThreadedDatasetThreadOptions);
|
|
property ThreadHandler: TJvBaseDatasetThreadHandler read FThreadHandler;
|
|
protected
|
|
procedure DoAfterOpen; override;
|
|
procedure DoAfterRefresh; override;
|
|
procedure DoAfterScroll; override;
|
|
procedure DoBeforeOpen; override;
|
|
procedure DoBeforeRefresh; override;
|
|
function GetNextRecord: Boolean; override;
|
|
function GetOnThreadException: TJvThreadedDatasetThreadExceptionEvent;
|
|
procedure InternalLast; override;
|
|
procedure InternalRefresh; override;
|
|
procedure ReplaceBeforeFetch(Dataset: TCustomDADataSet; var Cancel: Boolean);
|
|
procedure SetActive(Value: Boolean); override;
|
|
procedure SetOnThreadException(const Value:
|
|
TJvThreadedDatasetThreadExceptionEvent);
|
|
public
|
|
constructor Create(AOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
function CurrentFetchDuration: TDateTime;
|
|
function CurrentOpenDuration: TDateTime;
|
|
function EofReached: Boolean;
|
|
function ErrorException: Exception;
|
|
function ErrorMessage: string;
|
|
function ThreadIsActive: Boolean;
|
|
published
|
|
property AfterOpenFetch: TDataSetNotifyEvent read GetAfterOpenFetch write
|
|
SetAfterOpenFetch;
|
|
property AfterThreadExecution: TJvThreadedDatasetThreadEvent read
|
|
GetAfterThreadExecution write SetAfterThreadExecution;
|
|
property BeforeFetch: TBeforeFetchEvent read FBeforeFetch write FBeforeFetch;
|
|
property BeforeThreadExecution: TJvThreadedDatasetThreadEvent read
|
|
GetBeforeThreadExecution write SetBeforeThreadExecution;
|
|
property DialogOptions: TJvThreadedDatasetDialogOptions read GetDialogOptions write SetDialogOptions;
|
|
property EnhancedOptions: TJvOdacThreadedDatasetEnhancedOptions read GetEnhancedOptions write SetEnhancedOptions;
|
|
property ThreadOptions: TJvThreadedDatasetThreadOptions read GetThreadOptions write SetThreadOptions;
|
|
property OnThreadException: TJvThreadedDatasetThreadExceptionEvent read
|
|
GetOnThreadException write SetOnThreadException;
|
|
end;
|
|
|
|
TJvOdacOraQuery = class(TOraQuery, IJvThreadedDatasetInterface)
|
|
procedure BreakExecution;
|
|
function DoGetInheritedNextRecord: Boolean;
|
|
procedure DoInheritedAfterOpen;
|
|
procedure DoInheritedAfterRefresh;
|
|
procedure DoInheritedAfterScroll;
|
|
procedure DoInheritedBeforeOpen;
|
|
procedure DoInheritedBeforeRefresh;
|
|
procedure DoInheritedInternalLast;
|
|
procedure DoInheritedInternalRefresh;
|
|
procedure DoInheritedSetActive(Active: Boolean);
|
|
procedure DoInternalOpen;
|
|
function GetDatasetFetchAllRecords: Boolean;
|
|
function IsThreadAllowed: Boolean;
|
|
procedure SetDatasetFetchAllRecords(const Value: Boolean);
|
|
strict private
|
|
private
|
|
FBeforeFetch: TBeforeFetchEvent;
|
|
FThreadHandler: TJvBaseDatasetThreadHandler;
|
|
function GetAfterOpenFetch: TDataSetNotifyEvent;
|
|
function GetAfterOpenFetch1: TDataSetNotifyEvent;
|
|
function GetAfterThreadExecution: TJvThreadedDatasetThreadEvent;
|
|
function GetBeforeThreadExecution: TJvThreadedDatasetThreadEvent;
|
|
function GetDialogOptions: TJvThreadedDatasetDialogOptions;
|
|
function GetEnhancedOptions: TJvOdacThreadedDatasetEnhancedOptions;
|
|
function GetThreadOptions: TJvThreadedDatasetThreadOptions;
|
|
procedure SetAfterOpenFetch(const Value: TDataSetNotifyEvent);
|
|
procedure SetAfterOpenFetch1(const Value: TDataSetNotifyEvent);
|
|
procedure SetAfterThreadExecution(const Value: TJvThreadedDatasetThreadEvent);
|
|
procedure SetBeforeThreadExecution(const Value: TJvThreadedDatasetThreadEvent);
|
|
procedure SetDialogOptions(Value: TJvThreadedDatasetDialogOptions);
|
|
procedure SetEnhancedOptions(const Value:
|
|
TJvOdacThreadedDatasetEnhancedOptions);
|
|
procedure SetThreadOptions(const Value: TJvThreadedDatasetThreadOptions);
|
|
property ThreadHandler: TJvBaseDatasetThreadHandler read FThreadHandler;
|
|
protected
|
|
procedure DoAfterOpen; override;
|
|
procedure DoAfterRefresh; override;
|
|
procedure DoAfterScroll; override;
|
|
procedure DoBeforeOpen; override;
|
|
procedure DoBeforeRefresh; override;
|
|
function GetNextRecord: Boolean; override;
|
|
function GetOnThreadException: TJvThreadedDatasetThreadExceptionEvent;
|
|
procedure InternalLast; override;
|
|
procedure InternalRefresh; override;
|
|
procedure ReplaceBeforeFetch(Dataset: TCustomDADataSet; var Cancel: Boolean);
|
|
procedure SetActive(Value: Boolean); override;
|
|
procedure SetOnThreadException(const Value:
|
|
TJvThreadedDatasetThreadExceptionEvent);
|
|
public
|
|
constructor Create(AOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
function CurrentFetchDuration: TDateTime;
|
|
function CurrentOpenDuration: TDateTime;
|
|
function EofReached: Boolean;
|
|
function ErrorException: Exception;
|
|
function ErrorMessage: string;
|
|
function ThreadIsActive: Boolean;
|
|
published
|
|
property AfterOpenFetch: TDataSetNotifyEvent read GetAfterOpenFetch1 write
|
|
SetAfterOpenFetch1;
|
|
property AfterThreadExecution: TJvThreadedDatasetThreadEvent read
|
|
GetAfterThreadExecution write SetAfterThreadExecution;
|
|
property BeforeFetch: TBeforeFetchEvent read FBeforeFetch write FBeforeFetch;
|
|
property BeforeThreadExecution: TJvThreadedDatasetThreadEvent read
|
|
GetBeforeThreadExecution write SetBeforeThreadExecution;
|
|
property DialogOptions: TJvThreadedDatasetDialogOptions read GetDialogOptions write SetDialogOptions;
|
|
property EnhancedOptions: TJvOdacThreadedDatasetEnhancedOptions read GetEnhancedOptions write SetEnhancedOptions;
|
|
property ThreadOptions: TJvThreadedDatasetThreadOptions read GetThreadOptions write SetThreadOptions;
|
|
property OnThreadException: TJvThreadedDatasetThreadExceptionEvent read
|
|
GetOnThreadException write SetOnThreadException;
|
|
end;
|
|
|
|
type
|
|
TJvOdacOraTable = class(TOraTable, IJvThreadedDatasetInterface)
|
|
procedure BreakExecution;
|
|
function DoGetInheritedNextRecord: Boolean;
|
|
procedure DoInheritedAfterOpen;
|
|
procedure DoInheritedAfterRefresh;
|
|
procedure DoInheritedAfterScroll;
|
|
procedure DoInheritedBeforeOpen;
|
|
procedure DoInheritedBeforeRefresh;
|
|
procedure DoInheritedInternalLast;
|
|
procedure DoInheritedInternalRefresh;
|
|
procedure DoInheritedSetActive(Active: Boolean);
|
|
procedure DoInternalOpen;
|
|
function GetDatasetFetchAllRecords: Boolean;
|
|
function IsThreadAllowed: Boolean;
|
|
private
|
|
FBeforeFetch: TBeforeFetchEvent;
|
|
FThreadHandler: TJvBaseDatasetThreadHandler;
|
|
function GetAfterOpenFetch: TDataSetNotifyEvent;
|
|
function GetAfterThreadExecution: TJvThreadedDatasetThreadEvent;
|
|
function GetBeforeThreadExecution: TJvThreadedDatasetThreadEvent;
|
|
function GetDialogOptions: TJvThreadedDatasetDialogOptions;
|
|
function GetEnhancedOptions: TJvOdacThreadedDatasetEnhancedOptions;
|
|
function GetThreadOptions: TJvThreadedDatasetThreadOptions;
|
|
procedure SetAfterOpenFetch(const Value: TDataSetNotifyEvent);
|
|
procedure SetAfterThreadExecution(const Value: TJvThreadedDatasetThreadEvent);
|
|
procedure SetBeforeThreadExecution(const Value: TJvThreadedDatasetThreadEvent);
|
|
procedure SetDatasetFetchAllRecords(const Value: Boolean);
|
|
procedure SetDialogOptions(Value: TJvThreadedDatasetDialogOptions);
|
|
procedure SetEnhancedOptions(const Value:
|
|
TJvOdacThreadedDatasetEnhancedOptions);
|
|
procedure SetThreadOptions(const Value: TJvThreadedDatasetThreadOptions);
|
|
property ThreadHandler: TJvBaseDatasetThreadHandler read FThreadHandler;
|
|
protected
|
|
procedure DoAfterOpen; override;
|
|
procedure DoAfterRefresh; override;
|
|
procedure DoAfterScroll; override;
|
|
procedure DoBeforeOpen; override;
|
|
procedure DoBeforeRefresh; override;
|
|
function GetNextRecord: Boolean; override;
|
|
function GetOnThreadException: TJvThreadedDatasetThreadExceptionEvent;
|
|
procedure InternalLast; override;
|
|
procedure InternalRefresh; override;
|
|
procedure ReplaceBeforeFetch(Dataset: TCustomDADataSet; var Cancel: Boolean);
|
|
procedure SetActive(Value: Boolean); override;
|
|
procedure SetOnThreadException(const Value:
|
|
TJvThreadedDatasetThreadExceptionEvent);
|
|
public
|
|
constructor Create(AOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
function CurrentFetchDuration: TDateTime;
|
|
function CurrentOpenDuration: TDateTime;
|
|
function EofReached: Boolean;
|
|
function ErrorException: Exception;
|
|
function ErrorMessage: string;
|
|
function ThreadIsActive: Boolean;
|
|
published
|
|
property AfterOpenFetch: TDataSetNotifyEvent read GetAfterOpenFetch write
|
|
SetAfterOpenFetch;
|
|
property AfterThreadExecution: TJvThreadedDatasetThreadEvent read
|
|
GetAfterThreadExecution write SetAfterThreadExecution;
|
|
property BeforeFetch: TBeforeFetchEvent read FBeforeFetch write FBeforeFetch;
|
|
property BeforeThreadExecution: TJvThreadedDatasetThreadEvent read
|
|
GetBeforeThreadExecution write SetBeforeThreadExecution;
|
|
property DialogOptions: TJvThreadedDatasetDialogOptions read GetDialogOptions write SetDialogOptions;
|
|
property EnhancedOptions: TJvOdacThreadedDatasetEnhancedOptions read GetEnhancedOptions write SetEnhancedOptions;
|
|
property ThreadOptions: TJvThreadedDatasetThreadOptions read GetThreadOptions write SetThreadOptions;
|
|
property OnThreadException: TJvThreadedDatasetThreadExceptionEvent read
|
|
GetOnThreadException write SetOnThreadException;
|
|
end;
|
|
|
|
{$IFDEF UNITVERSIONING}
|
|
const
|
|
UnitVersioning: TUnitVersionInfo = (
|
|
RCSfile: '$URL: https://jvcl.svn.sourceforge.net/svnroot/jvcl/tags/JVCL3_39/run/JvOdacSmartQuery.pas $';
|
|
Revision: '$Revision: 12461 $';
|
|
Date: '$Date: 2009-08-14 19:21:33 +0200 (ven., 14 août 2009) $';
|
|
LogPath: 'JVCL\run'
|
|
);
|
|
{$ENDIF UNITVERSIONING}
|
|
|
|
implementation
|
|
|
|
uses Variants, MemData;
|
|
|
|
//=== { TJvOdacSmartQuery } ==================================================
|
|
|
|
constructor TJvOdacSmartQuery.Create(AOwner: TComponent);
|
|
begin
|
|
inherited Create(AOwner);
|
|
FThreadHandler := TJvOdacDatasetThreadHandler.Create(Self, Self);
|
|
inherited BeforeFetch := ReplaceBeforeFetch;
|
|
end;
|
|
|
|
destructor TJvOdacSmartQuery.Destroy;
|
|
begin
|
|
FreeAndNil(FThreadHandler);
|
|
inherited Destroy;
|
|
end;
|
|
|
|
procedure TJvOdacSmartQuery.BreakExecution;
|
|
begin
|
|
BreakExec;
|
|
end;
|
|
|
|
function TJvOdacSmartQuery.CurrentFetchDuration: TDateTime;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := ThreadHandler.CurrentFetchDuration
|
|
else
|
|
Result := 0;
|
|
end;
|
|
|
|
function TJvOdacSmartQuery.CurrentOpenDuration: TDateTime;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := ThreadHandler.CurrentOpenDuration
|
|
else
|
|
Result := 0;
|
|
end;
|
|
|
|
procedure TJvOdacSmartQuery.DoAfterOpen;
|
|
begin
|
|
ThreadHandler.AfterOpen;
|
|
end;
|
|
|
|
procedure TJvOdacSmartQuery.DoAfterRefresh;
|
|
begin
|
|
ThreadHandler.AfterRefresh;
|
|
end;
|
|
|
|
procedure TJvOdacSmartQuery.DoAfterScroll;
|
|
begin
|
|
ThreadHandler.AfterScroll;
|
|
end;
|
|
|
|
procedure TJvOdacSmartQuery.DoBeforeOpen;
|
|
begin
|
|
ThreadHandler.BeforeOpen;
|
|
end;
|
|
|
|
procedure TJvOdacSmartQuery.DoBeforeRefresh;
|
|
begin
|
|
ThreadHandler.BeforeRefresh;
|
|
end;
|
|
|
|
function TJvOdacSmartQuery.DoGetInheritedNextRecord: Boolean;
|
|
begin
|
|
Result := Inherited GetNextRecord;
|
|
end;
|
|
|
|
procedure TJvOdacSmartQuery.DoInheritedAfterOpen;
|
|
begin
|
|
inherited DoAfterOpen;
|
|
end;
|
|
|
|
procedure TJvOdacSmartQuery.DoInheritedAfterRefresh;
|
|
begin
|
|
inherited DoAfterRefresh;
|
|
end;
|
|
|
|
procedure TJvOdacSmartQuery.DoInheritedAfterScroll;
|
|
begin
|
|
inherited DoAfterScroll;
|
|
end;
|
|
|
|
procedure TJvOdacSmartQuery.DoInheritedBeforeOpen;
|
|
begin
|
|
inherited DoBeforeOpen;
|
|
end;
|
|
|
|
procedure TJvOdacSmartQuery.DoInheritedBeforeRefresh;
|
|
begin
|
|
inherited DoBeforeRefresh;
|
|
end;
|
|
|
|
procedure TJvOdacSmartQuery.DoInheritedInternalLast;
|
|
begin
|
|
inherited InternalLast;
|
|
end;
|
|
|
|
procedure TJvOdacSmartQuery.DoInheritedInternalRefresh;
|
|
begin
|
|
inherited InternalRefresh;
|
|
end;
|
|
|
|
procedure TJvOdacSmartQuery.DoInheritedSetActive(Active: Boolean);
|
|
begin
|
|
inherited SetActive(Active);
|
|
end;
|
|
|
|
procedure TJvOdacSmartQuery.DoInternalOpen;
|
|
begin
|
|
InternalOpen;
|
|
end;
|
|
|
|
function TJvOdacSmartQuery.EofReached: Boolean;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := ThreadHandler.EofReached
|
|
else
|
|
Result := False;
|
|
end;
|
|
|
|
function TJvOdacSmartQuery.ErrorException: Exception;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := ThreadHandler.ErrorException
|
|
else
|
|
Result := Nil;
|
|
end;
|
|
|
|
function TJvOdacSmartQuery.ErrorMessage: string;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := ThreadHandler.ErrorMessage
|
|
else
|
|
Result := '';
|
|
end;
|
|
|
|
function TJvOdacSmartQuery.GetAfterOpenFetch: TDataSetNotifyEvent;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := ThreadHandler.AfterOpenFetch
|
|
else
|
|
Result := nil;
|
|
end;
|
|
|
|
function TJvOdacSmartQuery.GetAfterThreadExecution:
|
|
TJvThreadedDatasetThreadEvent;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := ThreadHandler.AfterThreadExecution
|
|
else
|
|
Result := nil;
|
|
end;
|
|
|
|
function TJvOdacSmartQuery.GetBeforeThreadExecution:
|
|
TJvThreadedDatasetThreadEvent;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := ThreadHandler.BeforeThreadExecution
|
|
else
|
|
Result := nil;
|
|
end;
|
|
|
|
function TJvOdacSmartQuery.GetDatasetFetchAllRecords: Boolean;
|
|
begin
|
|
Result := FetchAll;
|
|
end;
|
|
|
|
function TJvOdacSmartQuery.GetDialogOptions: TJvThreadedDatasetDialogOptions;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := ThreadHandler.DialogOptions
|
|
else
|
|
Result := nil;
|
|
end;
|
|
|
|
function TJvOdacSmartQuery.GetEnhancedOptions: TJvOdacThreadedDatasetEnhancedOptions;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := TJvOdacThreadedDatasetEnhancedOptions(ThreadHandler.EnhancedOptions)
|
|
else
|
|
Result := nil;
|
|
end;
|
|
|
|
function TJvOdacSmartQuery.GetNextRecord: Boolean;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := ThreadHandler.GetNextRecord
|
|
else
|
|
Result := inherited GetNextRecord;
|
|
end;
|
|
|
|
function TJvOdacSmartQuery.GetOnThreadException:
|
|
TJvThreadedDatasetThreadExceptionEvent;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := ThreadHandler.OnThreadException
|
|
else
|
|
Result := nil;
|
|
end;
|
|
|
|
function TJvOdacSmartQuery.GetThreadOptions: TJvThreadedDatasetThreadOptions;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := ThreadHandler.ThreadOptions
|
|
else
|
|
Result := nil;
|
|
end;
|
|
|
|
procedure TJvOdacSmartQuery.InternalLast;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
ThreadHandler.InternalLast;
|
|
end;
|
|
|
|
procedure TJvOdacSmartQuery.InternalRefresh;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
ThreadHandler.InternalRefresh;
|
|
end;
|
|
|
|
function TJvOdacSmartQuery.IsThreadAllowed: Boolean;
|
|
begin
|
|
if Assigned(MasterSource) and Assigned(MasterSource.Dataset) and (MasterSource.Dataset is TJvOdacSmartQuery) then
|
|
Result := not TJvOdacSmartQuery(MasterSource.Dataset).ThreadHandler.ThreadIsActive
|
|
else
|
|
Result := True;
|
|
end;
|
|
|
|
procedure TJvOdacSmartQuery.ReplaceBeforeFetch(Dataset: TCustomDADataSet; var Cancel: Boolean);
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Cancel := ThreadHandler.CheckContinueRecordFetch <> tdccrContinue;
|
|
if Assigned(BeforeFetch) and not Cancel then
|
|
BeforeFetch(Dataset, Cancel);
|
|
end;
|
|
|
|
procedure TJvOdacSmartQuery.SetActive(Value: Boolean);
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
ThreadHandler.SetActive(Value);
|
|
end;
|
|
|
|
procedure TJvOdacSmartQuery.SetAfterOpenFetch(const Value: TDataSetNotifyEvent);
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
ThreadHandler.AfterOpenFetch := Value;
|
|
end;
|
|
|
|
procedure TJvOdacSmartQuery.SetAfterThreadExecution(const Value:
|
|
TJvThreadedDatasetThreadEvent);
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
ThreadHandler.AfterThreadExecution := Value;
|
|
end;
|
|
|
|
procedure TJvOdacSmartQuery.SetBeforeThreadExecution(const Value:
|
|
TJvThreadedDatasetThreadEvent);
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
ThreadHandler.BeforeThreadExecution := Value;
|
|
end;
|
|
|
|
procedure TJvOdacSmartQuery.SetDatasetFetchAllRecords(const Value: Boolean);
|
|
begin
|
|
FetchAll := Value;
|
|
end;
|
|
|
|
procedure TJvOdacSmartQuery.SetDialogOptions(Value: TJvThreadedDatasetDialogOptions);
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
ThreadHandler.DialogOptions.Assign(Value);
|
|
end;
|
|
|
|
procedure TJvOdacSmartQuery.SetEnhancedOptions(const Value: TJvOdacThreadedDatasetEnhancedOptions);
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
ThreadHandler.EnhancedOptions.Assign(Value);
|
|
end;
|
|
|
|
procedure TJvOdacSmartQuery.SetOnThreadException(const Value:
|
|
TJvThreadedDatasetThreadExceptionEvent);
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
ThreadHandler.OnThreadException := Value;
|
|
end;
|
|
|
|
procedure TJvOdacSmartQuery.SetThreadOptions(const Value: TJvThreadedDatasetThreadOptions);
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
ThreadHandler.ThreadOptions.Assign(Value);
|
|
end;
|
|
|
|
function TJvOdacSmartQuery.ThreadIsActive: Boolean;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := ThreadHandler.ThreadIsActive
|
|
else
|
|
Result := False;
|
|
end;
|
|
|
|
constructor TJvOdacDatasetThreadHandler.Create(AOwner: TComponent; ADataset:
|
|
TDataSet);
|
|
begin
|
|
inherited Create(AOwner, ADataset);
|
|
end;
|
|
|
|
procedure TJvOdacDatasetThreadHandler.AfterRefresh;
|
|
begin
|
|
inherited AfterRefresh;
|
|
if EnhancedOptions.RefreshLastPosition then
|
|
RestoreRefreshKeyFields;
|
|
end;
|
|
|
|
procedure TJvOdacDatasetThreadHandler.BeforeRefresh;
|
|
begin
|
|
if EnhancedOptions.RefreshLastPosition then
|
|
SaveRefreshKeyFields;
|
|
inherited BeforeRefresh;
|
|
end;
|
|
|
|
//=== { TJvOdacDatasetThreadHandler } ========================================
|
|
|
|
function TJvOdacDatasetThreadHandler.CreateEnhancedOptions: TJvBaseThreadedDatasetEnhancedOptions;
|
|
begin
|
|
Result := TJvOdacThreadedDatasetEnhancedOptions.Create;
|
|
end;
|
|
|
|
procedure TJvOdacDatasetThreadHandler.RestoreRefreshKeyFields;
|
|
begin
|
|
if Not (Dataset.Active and (Dataset is TOraDataset) and
|
|
(TOraDataset(Dataset).KeyFields <> '') and (RefreshKeyFields <> '')) then
|
|
Exit;
|
|
TOraDataset(Dataset).LocateEx(RefreshKeyFields, RefreshKeyValues, [lxNearest])
|
|
end;
|
|
|
|
procedure TJvOdacDatasetThreadHandler.SaveRefreshKeyFields;
|
|
var KeyFields : String;
|
|
Fields:TStringList;
|
|
Key : string;
|
|
p: Integer;
|
|
Field: TField;
|
|
i: Integer;
|
|
begin
|
|
RefreshKeyFields := '';
|
|
if Not (Dataset.Active and (Dataset is TOraDataset) and (TOraDataset(Dataset).KeyFields <> '')) then
|
|
Exit;
|
|
Fields := tStringList.create;
|
|
try
|
|
KeyFields := trim(TOraDataset(Dataset).KeyFields);
|
|
while KeyFields <> '' do
|
|
begin
|
|
p := Pos(';', KeyFields);
|
|
if p > 0 then
|
|
begin
|
|
key := trim(Copy (KeyFields, 1, p-1));
|
|
KeyFields := trim(Copy(KeyFields, p+1, Length(KeyFields)-p));
|
|
end
|
|
else
|
|
begin
|
|
key := KeyFields;
|
|
KeyFields := '';
|
|
end;
|
|
if (Key <> '') and Assigned(Dataset.FindField(Key)) then
|
|
Fields.Add(Key);
|
|
end;
|
|
FRefreshKeyValues := VarArrayCreate([0,Fields.Count-1], varVariant );
|
|
for i := 0 to Fields.Count - 1 do
|
|
begin
|
|
Field := Dataset.FindField(Fields[i]);
|
|
if Assigned (Field) then
|
|
begin
|
|
RefreshKeyFields := RefreshKeyFields+Key+';';
|
|
FRefreshKeyValues[i] := Field.AsVariant;
|
|
end;
|
|
end;
|
|
finally
|
|
Fields.Free;
|
|
end;
|
|
end;
|
|
|
|
//=== { TJvOdacThreadedDatasetAllowedContinueRecordFetchOptions } ============
|
|
|
|
constructor TJvOdacThreadedDatasetAllowedContinueRecordFetchOptions.Create;
|
|
begin
|
|
inherited Create;
|
|
All := True;
|
|
end;
|
|
|
|
function
|
|
TJvOdacThreadedDatasetEnhancedOptions.CreateAllowedContinueRecordFetchOptions:
|
|
TJvBaseThreadedDatasetAllowedContinueRecordFetchOptions;
|
|
begin
|
|
Result := TJvOdacThreadedDatasetAllowedContinueRecordFetchOptions.Create;
|
|
end;
|
|
|
|
function
|
|
TJvOdacThreadedDatasetEnhancedOptions.GetAllowedContinueRecordFetchOptions:
|
|
TJvOdacThreadedDatasetAllowedContinueRecordFetchOptions;
|
|
begin
|
|
Result := TJvOdacThreadedDatasetAllowedContinueRecordFetchOptions(inherited AllowedContinueRecordFetchOptions);
|
|
end;
|
|
|
|
procedure
|
|
TJvOdacThreadedDatasetEnhancedOptions.SetAllowedContinueRecordFetchOptions(
|
|
const Value: TJvOdacThreadedDatasetAllowedContinueRecordFetchOptions);
|
|
begin
|
|
inherited AllowedContinueRecordFetchOptions := Value;
|
|
end;
|
|
|
|
//=== { TJvOdacSmartQuery } ==================================================
|
|
|
|
constructor TJvOdacOraQuery.Create(AOwner: TComponent);
|
|
begin
|
|
inherited Create(AOwner);
|
|
FThreadHandler := TJvOdacDatasetThreadHandler.Create(Self, Self);
|
|
inherited BeforeFetch := ReplaceBeforeFetch;
|
|
end;
|
|
|
|
destructor TJvOdacOraQuery.Destroy;
|
|
begin
|
|
FreeAndNil(FThreadHandler);
|
|
inherited Destroy;
|
|
end;
|
|
|
|
procedure TJvOdacOraQuery.BreakExecution;
|
|
begin
|
|
BreakExec;
|
|
end;
|
|
|
|
function TJvOdacOraQuery.CurrentFetchDuration: TDateTime;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := ThreadHandler.CurrentFetchDuration
|
|
else
|
|
Result := 0;
|
|
end;
|
|
|
|
function TJvOdacOraQuery.CurrentOpenDuration: TDateTime;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := ThreadHandler.CurrentOpenDuration
|
|
else
|
|
Result := 0;
|
|
end;
|
|
|
|
procedure TJvOdacOraQuery.DoAfterOpen;
|
|
begin
|
|
ThreadHandler.AfterOpen;
|
|
end;
|
|
|
|
procedure TJvOdacOraQuery.DoAfterRefresh;
|
|
begin
|
|
ThreadHandler.AfterRefresh;
|
|
end;
|
|
|
|
procedure TJvOdacOraQuery.DoAfterScroll;
|
|
begin
|
|
ThreadHandler.AfterScroll;
|
|
end;
|
|
|
|
procedure TJvOdacOraQuery.DoBeforeOpen;
|
|
begin
|
|
ThreadHandler.BeforeOpen;
|
|
end;
|
|
|
|
procedure TJvOdacOraQuery.DoBeforeRefresh;
|
|
begin
|
|
ThreadHandler.BeforeRefresh;
|
|
end;
|
|
|
|
function TJvOdacOraQuery.DoGetInheritedNextRecord: Boolean;
|
|
begin
|
|
Result := Inherited GetNextRecord;
|
|
end;
|
|
|
|
procedure TJvOdacOraQuery.DoInheritedAfterOpen;
|
|
begin
|
|
inherited DoAfterOpen;
|
|
end;
|
|
|
|
procedure TJvOdacOraQuery.DoInheritedAfterRefresh;
|
|
begin
|
|
inherited DoAfterRefresh;
|
|
end;
|
|
|
|
procedure TJvOdacOraQuery.DoInheritedAfterScroll;
|
|
begin
|
|
inherited DoAfterScroll;
|
|
end;
|
|
|
|
procedure TJvOdacOraQuery.DoInheritedBeforeOpen;
|
|
begin
|
|
inherited DoBeforeOpen;
|
|
end;
|
|
|
|
procedure TJvOdacOraQuery.DoInheritedBeforeRefresh;
|
|
begin
|
|
inherited DoBeforeRefresh;
|
|
end;
|
|
|
|
procedure TJvOdacOraQuery.DoInheritedInternalLast;
|
|
begin
|
|
inherited InternalLast;
|
|
end;
|
|
|
|
procedure TJvOdacOraQuery.DoInheritedInternalRefresh;
|
|
begin
|
|
inherited InternalRefresh;
|
|
end;
|
|
|
|
procedure TJvOdacOraQuery.DoInheritedSetActive(Active: Boolean);
|
|
begin
|
|
inherited SetActive(Active);
|
|
end;
|
|
|
|
procedure TJvOdacOraQuery.DoInternalOpen;
|
|
begin
|
|
InternalOpen;
|
|
end;
|
|
|
|
function TJvOdacOraQuery.EofReached: Boolean;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := ThreadHandler.EofReached
|
|
else
|
|
Result := False;
|
|
end;
|
|
|
|
function TJvOdacOraQuery.ErrorException: Exception;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := ThreadHandler.ErrorException
|
|
else
|
|
Result := Nil;
|
|
end;
|
|
|
|
function TJvOdacOraQuery.ErrorMessage: string;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := ThreadHandler.ErrorMessage
|
|
else
|
|
Result := '';
|
|
end;
|
|
|
|
function TJvOdacOraQuery.GetAfterOpenFetch: TDataSetNotifyEvent;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := ThreadHandler.AfterOpenFetch
|
|
else
|
|
Result := nil;
|
|
end;
|
|
|
|
function TJvOdacOraQuery.GetAfterOpenFetch1: TDataSetNotifyEvent;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := ThreadHandler.AfterOpenFetch
|
|
else
|
|
Result := nil;
|
|
end;
|
|
|
|
function TJvOdacOraQuery.GetAfterThreadExecution:
|
|
TJvThreadedDatasetThreadEvent;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := ThreadHandler.AfterThreadExecution
|
|
else
|
|
Result := nil;
|
|
end;
|
|
|
|
function TJvOdacOraQuery.GetBeforeThreadExecution:
|
|
TJvThreadedDatasetThreadEvent;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := ThreadHandler.BeforeThreadExecution
|
|
else
|
|
Result := nil;
|
|
end;
|
|
|
|
function TJvOdacOraQuery.GetDatasetFetchAllRecords: Boolean;
|
|
begin
|
|
Result := FetchAll;
|
|
end;
|
|
|
|
function TJvOdacOraQuery.GetDialogOptions: TJvThreadedDatasetDialogOptions;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := ThreadHandler.DialogOptions
|
|
else
|
|
Result := nil;
|
|
end;
|
|
|
|
function TJvOdacOraQuery.GetEnhancedOptions:
|
|
TJvOdacThreadedDatasetEnhancedOptions;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := TJvOdacThreadedDatasetEnhancedOptions(ThreadHandler.EnhancedOptions)
|
|
else
|
|
Result := nil;
|
|
end;
|
|
|
|
function TJvOdacOraQuery.GetNextRecord: Boolean;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := ThreadHandler.GetNextRecord
|
|
else
|
|
Result := inherited GetNextRecord;
|
|
end;
|
|
|
|
function TJvOdacOraQuery.GetOnThreadException:
|
|
TJvThreadedDatasetThreadExceptionEvent;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := ThreadHandler.OnThreadException
|
|
else
|
|
Result := nil;
|
|
end;
|
|
|
|
function TJvOdacOraQuery.GetThreadOptions: TJvThreadedDatasetThreadOptions;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := ThreadHandler.ThreadOptions
|
|
else
|
|
Result := nil;
|
|
end;
|
|
|
|
procedure TJvOdacOraQuery.InternalLast;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
ThreadHandler.InternalLast;
|
|
end;
|
|
|
|
procedure TJvOdacOraQuery.InternalRefresh;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
ThreadHandler.InternalRefresh;
|
|
end;
|
|
|
|
function TJvOdacOraQuery.IsThreadAllowed: Boolean;
|
|
begin
|
|
if Assigned(MasterSource) and Assigned(MasterSource.Dataset) and (MasterSource.Dataset is TJvOdacSmartQuery) then
|
|
Result := not TJvOdacSmartQuery(MasterSource.Dataset).ThreadHandler.ThreadIsActive
|
|
else
|
|
Result := True;
|
|
end;
|
|
|
|
procedure TJvOdacOraQuery.ReplaceBeforeFetch(Dataset: TCustomDADataSet; var
|
|
Cancel: Boolean);
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Cancel := ThreadHandler.CheckContinueRecordFetch <> tdccrContinue;
|
|
if Assigned(BeforeFetch) and not Cancel then
|
|
BeforeFetch(Dataset, Cancel);
|
|
end;
|
|
|
|
procedure TJvOdacOraQuery.SetActive(Value: Boolean);
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
ThreadHandler.SetActive(Value);
|
|
end;
|
|
|
|
procedure TJvOdacOraQuery.SetAfterOpenFetch(const Value: TDataSetNotifyEvent);
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
ThreadHandler.AfterOpenFetch := Value;
|
|
end;
|
|
|
|
procedure TJvOdacOraQuery.SetAfterOpenFetch1(const Value: TDataSetNotifyEvent);
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
ThreadHandler.AfterOpenFetch := Value;
|
|
end;
|
|
|
|
procedure TJvOdacOraQuery.SetAfterThreadExecution(const Value:
|
|
TJvThreadedDatasetThreadEvent);
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
ThreadHandler.AfterThreadExecution := Value;
|
|
end;
|
|
|
|
procedure TJvOdacOraQuery.SetBeforeThreadExecution(const Value:
|
|
TJvThreadedDatasetThreadEvent);
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
ThreadHandler.BeforeThreadExecution := Value;
|
|
end;
|
|
|
|
procedure TJvOdacOraQuery.SetDatasetFetchAllRecords(const Value: Boolean);
|
|
begin
|
|
FetchAll := Value;
|
|
end;
|
|
|
|
procedure TJvOdacOraQuery.SetDialogOptions(Value:
|
|
TJvThreadedDatasetDialogOptions);
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
ThreadHandler.DialogOptions.Assign(Value);
|
|
end;
|
|
|
|
procedure TJvOdacOraQuery.SetEnhancedOptions(const Value:
|
|
TJvOdacThreadedDatasetEnhancedOptions);
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
ThreadHandler.EnhancedOptions.Assign(Value);
|
|
end;
|
|
|
|
procedure TJvOdacOraQuery.SetOnThreadException(const Value:
|
|
TJvThreadedDatasetThreadExceptionEvent);
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
ThreadHandler.OnThreadException := Value;
|
|
end;
|
|
|
|
procedure TJvOdacOraQuery.SetThreadOptions(const Value:
|
|
TJvThreadedDatasetThreadOptions);
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
ThreadHandler.ThreadOptions.Assign(Value);
|
|
end;
|
|
|
|
function TJvOdacOraQuery.ThreadIsActive: Boolean;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := ThreadHandler.ThreadIsActive
|
|
else
|
|
Result := False;
|
|
end;
|
|
|
|
//=== { TJvOdacSmartQuery } ==================================================
|
|
|
|
constructor TJvOdacOraTable.Create(AOwner: TComponent);
|
|
begin
|
|
inherited Create(AOwner);
|
|
FThreadHandler := TJvOdacDatasetThreadHandler.Create(Self, Self);
|
|
inherited BeforeFetch := ReplaceBeforeFetch;
|
|
end;
|
|
|
|
destructor TJvOdacOraTable.Destroy;
|
|
begin
|
|
FreeAndNil(FThreadHandler);
|
|
inherited Destroy;
|
|
end;
|
|
|
|
procedure TJvOdacOraTable.BreakExecution;
|
|
begin
|
|
BreakExec;
|
|
end;
|
|
|
|
function TJvOdacOraTable.CurrentFetchDuration: TDateTime;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := ThreadHandler.CurrentFetchDuration
|
|
else
|
|
Result := 0;
|
|
end;
|
|
|
|
function TJvOdacOraTable.CurrentOpenDuration: TDateTime;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := ThreadHandler.CurrentOpenDuration
|
|
else
|
|
Result := 0;
|
|
end;
|
|
|
|
procedure TJvOdacOraTable.DoAfterOpen;
|
|
begin
|
|
ThreadHandler.AfterOpen;
|
|
end;
|
|
|
|
procedure TJvOdacOraTable.DoAfterRefresh;
|
|
begin
|
|
ThreadHandler.AfterRefresh;
|
|
end;
|
|
|
|
procedure TJvOdacOraTable.DoAfterScroll;
|
|
begin
|
|
ThreadHandler.AfterScroll;
|
|
end;
|
|
|
|
procedure TJvOdacOraTable.DoBeforeOpen;
|
|
begin
|
|
ThreadHandler.BeforeOpen;
|
|
end;
|
|
|
|
procedure TJvOdacOraTable.DoBeforeRefresh;
|
|
begin
|
|
ThreadHandler.BeforeRefresh;
|
|
end;
|
|
|
|
function TJvOdacOraTable.DoGetInheritedNextRecord: Boolean;
|
|
begin
|
|
Result := Inherited GetNextRecord;
|
|
end;
|
|
|
|
procedure TJvOdacOraTable.DoInheritedAfterOpen;
|
|
begin
|
|
inherited DoAfterOpen;
|
|
end;
|
|
|
|
procedure TJvOdacOraTable.DoInheritedAfterRefresh;
|
|
begin
|
|
inherited DoAfterRefresh;
|
|
end;
|
|
|
|
procedure TJvOdacOraTable.DoInheritedAfterScroll;
|
|
begin
|
|
inherited DoAfterScroll;
|
|
end;
|
|
|
|
procedure TJvOdacOraTable.DoInheritedBeforeOpen;
|
|
begin
|
|
inherited DoBeforeOpen;
|
|
end;
|
|
|
|
procedure TJvOdacOraTable.DoInheritedBeforeRefresh;
|
|
begin
|
|
inherited DoBeforeRefresh;
|
|
end;
|
|
|
|
procedure TJvOdacOraTable.DoInheritedInternalLast;
|
|
begin
|
|
inherited InternalLast;
|
|
end;
|
|
|
|
procedure TJvOdacOraTable.DoInheritedInternalRefresh;
|
|
begin
|
|
inherited InternalRefresh;
|
|
end;
|
|
|
|
procedure TJvOdacOraTable.DoInheritedSetActive(Active: Boolean);
|
|
begin
|
|
inherited SetActive(Active);
|
|
end;
|
|
|
|
procedure TJvOdacOraTable.DoInternalOpen;
|
|
begin
|
|
InternalOpen;
|
|
end;
|
|
|
|
function TJvOdacOraTable.EofReached: Boolean;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := ThreadHandler.EofReached
|
|
else
|
|
Result := False;
|
|
end;
|
|
|
|
function TJvOdacOraTable.ErrorException: Exception;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := ThreadHandler.ErrorException
|
|
else
|
|
Result := Nil;
|
|
end;
|
|
|
|
function TJvOdacOraTable.ErrorMessage: string;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := ThreadHandler.ErrorMessage
|
|
else
|
|
Result := '';
|
|
end;
|
|
|
|
function TJvOdacOraTable.GetAfterOpenFetch: TDataSetNotifyEvent;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := ThreadHandler.AfterOpenFetch
|
|
else
|
|
Result := nil;
|
|
end;
|
|
|
|
function TJvOdacOraTable.GetAfterThreadExecution:
|
|
TJvThreadedDatasetThreadEvent;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := ThreadHandler.AfterThreadExecution
|
|
else
|
|
Result := nil;
|
|
end;
|
|
|
|
function TJvOdacOraTable.GetBeforeThreadExecution:
|
|
TJvThreadedDatasetThreadEvent;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := ThreadHandler.BeforeThreadExecution
|
|
else
|
|
Result := nil;
|
|
end;
|
|
|
|
function TJvOdacOraTable.GetDatasetFetchAllRecords: Boolean;
|
|
begin
|
|
Result := FetchAll;
|
|
end;
|
|
|
|
function TJvOdacOraTable.GetDialogOptions: TJvThreadedDatasetDialogOptions;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := ThreadHandler.DialogOptions
|
|
else
|
|
Result := nil;
|
|
end;
|
|
|
|
function TJvOdacOraTable.GetEnhancedOptions:
|
|
TJvOdacThreadedDatasetEnhancedOptions;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := TJvOdacThreadedDatasetEnhancedOptions(ThreadHandler.EnhancedOptions)
|
|
else
|
|
Result := nil;
|
|
end;
|
|
|
|
function TJvOdacOraTable.GetNextRecord: Boolean;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := ThreadHandler.GetNextRecord
|
|
else
|
|
Result := inherited GetNextRecord;
|
|
end;
|
|
|
|
function TJvOdacOraTable.GetOnThreadException:
|
|
TJvThreadedDatasetThreadExceptionEvent;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := ThreadHandler.OnThreadException
|
|
else
|
|
Result := nil;
|
|
end;
|
|
|
|
function TJvOdacOraTable.GetThreadOptions: TJvThreadedDatasetThreadOptions;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := ThreadHandler.ThreadOptions
|
|
else
|
|
Result := nil;
|
|
end;
|
|
|
|
procedure TJvOdacOraTable.InternalLast;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
ThreadHandler.InternalLast;
|
|
end;
|
|
|
|
procedure TJvOdacOraTable.InternalRefresh;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
ThreadHandler.InternalRefresh;
|
|
end;
|
|
|
|
function TJvOdacOraTable.IsThreadAllowed: Boolean;
|
|
begin
|
|
if Assigned(MasterSource) and Assigned(MasterSource.Dataset) and (MasterSource.Dataset is TJvOdacSmartQuery) then
|
|
Result := not TJvOdacSmartQuery(MasterSource.Dataset).ThreadHandler.ThreadIsActive
|
|
else
|
|
Result := True;
|
|
end;
|
|
|
|
procedure TJvOdacOraTable.ReplaceBeforeFetch(Dataset: TCustomDADataSet; var
|
|
Cancel: Boolean);
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Cancel := ThreadHandler.CheckContinueRecordFetch <> tdccrContinue;
|
|
if Assigned(BeforeFetch) and not Cancel then
|
|
BeforeFetch(Dataset, Cancel);
|
|
end;
|
|
|
|
procedure TJvOdacOraTable.SetActive(Value: Boolean);
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
ThreadHandler.SetActive(Value);
|
|
end;
|
|
|
|
procedure TJvOdacOraTable.SetAfterOpenFetch(const Value: TDataSetNotifyEvent);
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
ThreadHandler.AfterOpenFetch := Value;
|
|
end;
|
|
|
|
procedure TJvOdacOraTable.SetAfterThreadExecution(const Value:
|
|
TJvThreadedDatasetThreadEvent);
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
ThreadHandler.AfterThreadExecution := Value;
|
|
end;
|
|
|
|
procedure TJvOdacOraTable.SetBeforeThreadExecution(const Value:
|
|
TJvThreadedDatasetThreadEvent);
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
ThreadHandler.BeforeThreadExecution := Value;
|
|
end;
|
|
|
|
procedure TJvOdacOraTable.SetDatasetFetchAllRecords(const Value: Boolean);
|
|
begin
|
|
FetchAll := Value;
|
|
end;
|
|
|
|
procedure TJvOdacOraTable.SetDialogOptions(Value:
|
|
TJvThreadedDatasetDialogOptions);
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
ThreadHandler.DialogOptions.Assign(Value);
|
|
end;
|
|
|
|
procedure TJvOdacOraTable.SetEnhancedOptions(const Value:
|
|
TJvOdacThreadedDatasetEnhancedOptions);
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
ThreadHandler.EnhancedOptions.Assign(Value);
|
|
end;
|
|
|
|
procedure TJvOdacOraTable.SetOnThreadException(const Value:
|
|
TJvThreadedDatasetThreadExceptionEvent);
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
ThreadHandler.OnThreadException := Value;
|
|
end;
|
|
|
|
procedure TJvOdacOraTable.SetThreadOptions(const Value:
|
|
TJvThreadedDatasetThreadOptions);
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
ThreadHandler.ThreadOptions.Assign(Value);
|
|
end;
|
|
|
|
function TJvOdacOraTable.ThreadIsActive: Boolean;
|
|
begin
|
|
if Assigned(ThreadHandler) then
|
|
Result := ThreadHandler.ThreadIsActive
|
|
else
|
|
Result := False;
|
|
end;
|
|
|
|
|
|
{$IFDEF UNITVERSIONING}
|
|
initialization
|
|
RegisterUnitVersion(HInstance, UnitVersioning);
|
|
|
|
finalization
|
|
UnregisterUnitVersion(HInstance);
|
|
{$ENDIF UNITVERSIONING}
|
|
end.
|
|
|