Trošku méně známou součástí FireDAC je TFDMemTable alias memory table. TFDMemTable můžete používat jako jednoduchý dataset s čtením a zápisem do JSON, XML nebo binárních dat, nebo jako lokální dataset pro DBMS nebo navíc použít CachedUpdates, případně za pomocí LocalSQL provádět SQL příkazy nad skupinou TFDMemTables.
Základní použití
Dejte TFDMemTable1 na formulář (nebo ji vytvořte dynamicky) a vytvořte Fields, z kódu např.
procedure TForm11.Button1Click(Sender: TObject);
procedure mNewField(const sName:string; itype: TFieldType; iSize: Integer);
begin
FDMemTable1.FieldDefs.Add(sName, iType, iSize);
end;
begin
mNewField('dcName', ftString, 100);
mNewField('dlData', ftInteger, 0);
mNewField('dcComment', ftString, 100);
FDMemTable1.Open;
end;
A nyní přes TDataSource a TDBGrid (pro VCL) jednoduše můžeme zobrazit obsah FDMemTable1.
Ukládání a načtení
Obsah můžeme uložit přes
FDMemTable1.SaveToFile(ExtractFilePath(ParamStr(0))+'data.json', sfJSON {sfXML, sfBinary, sfJSON});
Pozor: pro export musíte mít na formuláři patřičnou komponentu FDStanStorage… např. FDStanStorageJSONLink1. Osobně si myslím, že stačí přidat do uses patřičný unit, např. FireDAC.Stan.StorageJSON a netřeba komponenty.
Podobně funguje načítání.
Mnohem zajímavější je vzhledem k omezení FireDac na Professional edici kombinace s ADO. Mějme ADO connection, ADO Query a chceme používat lokálně FDMemTable1.
procedure TForm11.Button3Click(Sender: TObject);
{var
oField: TField;}
begin
ADOConnection1.Connected := True; // open connection
ADOQuery1.Open;
FDMemTable1.CopyDataSet(ADOQuery1, [coStructure, coIndexesCopy, coRestart, coAppend]);
{ for oField in FDMemTable1.Fields do
oField.DisplayWidth := 30;}
end;
Nyní máme FDMemTable1 naplněn daty ze vzdáleného serveru.
Řazení a filtrování
Funguje klasicky jako u celého FireDAC např.
begin
FDMemTable1.Filter := 'dcName LIKE ''%Bur%''';
FDMemTable1.Filtered := True;
end;
resp.
FDMemTable1.IndexFieldNames := 'dcName:D;dcCode:A';
kde:
- 'D' - descending;
- 'A' - ascending;
- 'N' - case-insensitive
tedy např. 'order_date;customer_name:N';
Dema
Podívejte se na Samples/Object Pascal/Database/FireDAC/Samples/Comp Layer/TFDLocalSQL/ nebo \Samples\Object Pascal\Database\FireDAC\Samples\Comp Layer\TFDMemTable kde jsou pěkná dema.
Toto je minimální použití a možnosti TFDMemTable jsou opravdu závratné.