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; published property Dataset: TDataset read GetDataset; property DataTable: TDADataTable read fDataTable write SetDataTable; end; implementation { TDADatasetProvider } 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 fDataTable := Value; if (fDataTable<>NIL) then begin fDataTable.FreeNotification(Self); inherited Dataset := fDataTable.Dataset; end; end; end.