unit uDAJvMTable; interface uses Classes, DB, uDAInterfaces, uDADataTable, JvMemDS; type TDAJvMDataset = class(TJvMemoryData, IDADataTableDataset) private function GetActive: boolean; protected function GetDataTable: TDADataTable; safecall; procedure InternalRefresh; override; published property Active: boolean read GetActive; end; TDAJvMemDataTable = class(TDADataTable) private fClientDataset: TDAJvMDataset; protected function GetDatasetClass: TDatasetClass; override; procedure CreateInternalFields(aDataset: TDataset; someFieldDefinitions: TDAFieldCollection); override; procedure DoSort(const FieldNames: array of string; const Directions: array of TDASortDirection); override; procedure DoBeforeOpenDataset; override; procedure DoAfterCloseDataset; override; procedure SetMasterSource(const Value: TDADataSource); override; function GetMasterSource: TDADataSource; override; procedure SetDetailsFields(const Value: string); override; procedure SetMasterFields(const Value: string); override; function GetDetailFields: string; override; function GetMasterFields: string; override; function GetIndexDefs: TIndexDefs; procedure SetIndexDefs(const Value: TIndexDefs); function GetIndexName: string; procedure SetIndexName(const Value: string); function GetFilter: string; override; function GetFiltered: boolean; override; procedure SetFilter(const Value: string); override; procedure SetFiltered(const Value: boolean); override; public constructor Create(aOwner: TComponent); override; published property IndexDefs: TIndexDefs read GetIndexDefs write SetIndexDefs; property IndexName: string read GetIndexName write SetIndexName; end; implementation uses Variants; constructor TDAJvMemDataTable.Create(aOwner: TComponent); begin inherited; fClientDataset := TDAJvMDataset(Dataset); fClientDataset.FilterOptions := [foCaseInsensitive]; end; procedure TDAJvMemDataTable.CreateInternalFields(aDataset: TDataset; someFieldDefinitions: TDAFieldCollection); begin inherited; fClientDataset.FieldDefs.Clear; fClientDataset.CreateFields; end; procedure TDAJvMemDataTable.DoSort(const FieldNames: array of string; const Directions: array of TDASortDirection); begin with fclientDataset do begin Sort(Fieldnames,Directions); end; end; function TDAJvMemDataTable.GetDatasetClass: TDatasetClass; begin result := TDAJvMDataset; end; function TDAJvMemDataTable.GetMasterSource: TDADataSource; begin result := nil; end; procedure TDAJvMemDataTable.DoAfterCloseDataset; begin inherited; end; function TDAJvMemDataTable.GetFilter: string; begin result := fClientDataset.Filter end; procedure TDAJvMemDataTable.DoBeforeOpenDataset; begin inherited; end; procedure TDAJvMemDataTable.SetMasterSource(const Value: TDADataSource); begin inherited SetMasterSource(Value); end; procedure TDAJvMemDataTable.SetMasterFields(const Value: string); begin inherited; end; procedure TDAJvMemDataTable.SetDetailsFields(const Value: string); begin end; function TDAJvMemDataTable.GetDetailFields: string; begin end; function TDAJvMemDataTable.GetMasterFields: string; begin end; function TDAJvMemDataTable.GetFiltered: boolean; begin result := fClientDataset.Filtered end; procedure TDAJvMemDataTable.SetFilter(const Value: string); begin fClientDataset.Filter := Value end; procedure TDAJvMemDataTable.SetFiltered(const Value: boolean); begin fClientDataset.Filtered := Value end; function TDAJvMemDataTable.GetIndexDefs: TIndexDefs; begin result := nil; end; procedure TDAJvMemDataTable.SetIndexDefs(const Value: TIndexDefs); begin end; function TDAJvMemDataTable.GetIndexName: string; begin result := ''; end; procedure TDAJvMemDataTable.SetIndexName(const Value: string); begin end; function TDAJvMDataset.GetActive: boolean; begin result := inherited Active; end; function TDAJvMDataset.GetDataTable: TDADataTable; begin result := TDADataTable(Owner); end; procedure TDAJvMDataset.InternalRefresh; begin end; end.