Datasets and Data-Aware Controls

40.1 The TDataSet Model

TDataSet (Data.DB) is the abstract base for FireDAC, ClientDataSet, IBX, ADO (TADOQuery), and third-party datasets.

Navigation: First, Next, Prior, Last, Eof, Bof, RecNo, RecordCount, Locate, Lookup, FindKey, bookmarks.

Editing: Append/Insert, Edit, Post, Cancel, Delete, State (dsBrowse, dsEdit, dsInsert).

Fields: FieldByName, Fields[i], persistent fields (Fields Editor), calculated fields (OnCalcFields), lookup fields, DisplayFormat, EditMask, validation (OnValidate, Required, constraints).

Events: BeforePost, AfterPost, BeforeDelete, OnNewRecord (defaults), AfterScroll, OnFilterRecord.

Filtering/sorting: Filter/Filtered, IndexFieldNames, ranges, master-detail (MasterSource/MasterFields).

procedure TDM.qryOrdersCalcFields(DataSet: TDataSet);
begin
  DataSet.FieldByName('Total').AsCurrency :=
    DataSet.FieldByName('Qty').AsInteger * DataSet.FieldByName('UnitPrice').AsCurrency;
end;

procedure TDM.qryOrdersNewRecord(DataSet: TDataSet);
begin
  DataSet.FieldByName('OrderDate').AsDateTime := Now;
  DataSet.FieldByName('Status').AsString := 'NEW';
end;

if qryCustomers.Locate('Email', '[email protected]', [loCaseInsensitive]) then
  ShowMessage(qryCustomers.FieldByName('Name').AsString);

40.2 Data-Aware Controls (VCL)

TDataSource connects a dataset to TDBGrid, TDBEdit, TDBNavigator, TDBLookupComboBox, TDBMemo, TDBImage, TDBCheckBox, TDBChart. You get a full CRUD UI with almost no code.

RAD workflow: create a TDataModule with the connection and queries, drop a TDataSource on the form, drop data controls, set DataSource/DataField.

40.3 In-Memory Data and Multi-Tier

TFDMemTable (preferred) and TClientDataSet (MIDAS, legacy) for in-memory data, briefcase models (SaveToFile/LoadFromFile in JSON/XML/binary), and data transfer.

Multi-tier: DataSnap (legacy), RAD Server (REST + FireDAC JSON reflection), mORMot (SOA/ORM), REST + JSON with TFDMemTable serialization (TFDJSONDataSets, FireDAC.Stan.StorageJSON).

ORMs: TMS Aurelius, mORMot ORM, Spring4D Persistence (Marshmallow), DORM, EntityDAC (Devart), iORM.