FireDac TFDMemTable

vložil Radek Červinka 25. listopadu 2015 01:04

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é.


Nabízíme Delphi školení na různá témata, primárně ve Vaší firmě.

Tagy: ,

Komponenty

Komentáře

25.11.2015 9:45:12 #

JaroB.

Měl bych jen malý dotaz k Delphi verzím prof. V jaké míře a šíři je v nich FireDAC podporovaný? Ehm, spíš jinak, co tam chybí... oproti enterprise Dík

JaroB.

25.11.2015 9:55:03 #

radekc

Platí tam (zatím) bohužel stejná pravidla jako u DBExpress - tj. lokální DB - http://www.embarcadero.com/products/rad-studio/rad-studio-feature-matrix.pdf

Pro remote DB je nutno pro Professional mit FireDAC Client/Server pack.

Podle mne je to chyba a musí se to změnit.

radekc

26.11.2015 11:34:00 #

Stanislav Hruška

cit. "Pro remote DB je nutno pro Professional mit FireDAC Client/Server pack. "

O tom som nevedel. Chcel som si zistiť cenu, ale na tých ich nemožných stránkach a dlhej dobe odozvy som to nenašiel. Ani na registrovanej stránke.
Cez internet som našiel, ale nie pre XE7, ceny 142 a 167 €. Je to v takej cenovej relácii?

Stanislav Hruška

26.11.2015 11:42:39 #

radekc

Stando - http://www.embt.cz/cs/produkty/324-delphi-10-seattle-professional.html - mas tam ceny v EUR

radekc

26.11.2015 13:08:39 #

Stanislav Hruška

Pre XE7 je cena 370 €, čo je veľa.
Teraz som dosť znechutený. Ja som si myslel, že FireDAC automaticky poskytuje viac násobný prístup k DB. Aspoň pre FB :)

Stanislav Hruška

Komentování ukončeno

Naše nabídka

Partial English version.

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy nebo burzy práce).

Pokud chcete podpořit tento server libovolnou částkou, můžete použít PayPal. Moc děkuji.

Delphi Certified Developer

O Delphi.cz

Delphi je jediný moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64 , Mac OSX a na iPhone a Android (s výhledem na další platformy díky FireMonkey) na současném trhu (včetně Windows 8.1).

V současnosti je světová komunita přes dva miliónů vývojářů.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Anketa

Poslední komentáře

Comment RSS