Componentes.Terceros.RemObj.../internal/6.0.43.801/1/Data Abstract for Delphi/Source/uDADatasetProvider.pas
2010-01-29 16:17:43 +00:00

102 lines
3.1 KiB
ObjectPascal

unit uDADatasetProvider;
{----------------------------------------------------------------------------}
{ Data Abstract Library - Core Library }
{ }
{ compiler: Delphi 6 and up }
{ platform: Win32 }
{ }
{ (c)opyright RemObjects Software. all rights reserved. }
{ }
{ Using this code requires a valid license of the Data Abstract }
{ which can be obtained at http://www.remobjects.com. }
{----------------------------------------------------------------------------}
{$I DataAbstract.inc}
interface
uses
Classes, DB, Provider, uDADataTable;
type
{ TDADatasetProvider }
TDADatasetProvider = class(TDataSetProvider)
private
fDataTable: TDADataTable;
procedure SetDataTable(const Value: TDADataTable);
function GetDataset: TDataset;
protected
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
function InternalGetRecords(Count: Integer; out RecsOut: Integer;
Options: TGetRecordOptions; const CommandText: WideString;
var Params: OleVariant): OleVariant; override;
public
destructor Destroy; override;
procedure Assign(Source: TPersistent); override;
published
property Dataset: TDataset read GetDataset;
property DataTable: TDADataTable read fDataTable write SetDataTable;
end;
implementation
{ TDADatasetProvider }
procedure TDADatasetProvider.Assign(Source: TPersistent);
var
lSource: TDADatasetProvider;
begin
inherited;
if Source is TDADatasetProvider then begin
lSource := TDADatasetProvider(Source);
DataTable := lSource.DataTable;
end;
end;
destructor TDADatasetProvider.Destroy;
begin
DataTable := nil;
inherited;
end;
function TDADatasetProvider.GetDataset: TDataset;
begin
result := NIL;
end;
function TDADatasetProvider.InternalGetRecords(Count: Integer;
out RecsOut: Integer; Options: TGetRecordOptions;
const CommandText: WideString; var Params: OleVariant): OleVariant;
begin
if not DataTable.Active then DataTable.Open;
result := inherited InternalGetRecords(Count, RecsOut, Options, CommandText, Params);
end;
procedure TDADatasetProvider.Notification(AComponent: TComponent;
Operation: TOperation);
begin
inherited;
if (Operation=opRemove) then begin
if (aComponent=fDatatable) then fDataTable := NIL;
end;
end;
procedure TDADatasetProvider.SetDataTable(const Value: TDADataTable);
begin
if fDataTable <> Value then begin
if (fDataTable<>NIL) then fDataTable.RORemoveFreeNotification(Self);
fDataTable := Value;
if (fDataTable<>NIL) then begin
fDataTable.ROFreeNotification(Self);
inherited Dataset := fDataTable.Dataset;
end;
end;
end;
end.