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.