Práce s datovými sadami na straně klienta
Dosud jsme se zabývali především příkazy, které aplikaci nevracely žádná nebo jen agregovaná data. Častější však bývá situace, kdy je na základě dotazu na klienta přenesena požadovaná množina dat, a uživatelé s nimi provádí další operace. Pro definování datových sad je k dispozici trojice komponent "FDTable", "FDQuery" a "FDStoredProc".- FDTable - Vytváří datovou sadu naplněnou záznamy z určené tabulky nebo pohledu
- FDQuery - Datová sada je definována na základě SQL dotazu
- FDStoredProc - Datová sada je získána spuštěním uložené procedury
Použití komponenty "FDTable"
Jak již bylo řečeno, datová sada je tvořena množinou záznamů získaných z databáze. Pokud potřebujeme pracovat výhradně se záznamy konkrétní databázové tabulky, je nejsnazší cestou použití komponenty "FDTable". Minimální nastavení vyžaduje specifikovat v inspektorovi objektů nebo v kódu vlastnosti:- Connection - určuje DB připojení, které má být použito pro komunikaci s databázovým strojem
- TableName - Jméno tabulky, která bude zdrojem dat pro naplnění datové sady
V závislosti na typu DB stroje může být nutné zvolit před volbou tabulky odpovídající "Catalog" nebo "Schema", v kterém se požadovaná tabulka nachází.
Parametr názvu připojení pro "FDTable" je doplněn automaticky prostředím. Na to je třeba dát pozor, pokud je na formuláři umístěna více než jedna komponenta "FDConnection".
Použití komponenty "FDQuery"
Pro definování složitějších datových sad slouží komponenta "ADQuery".Pro pohodlnější zadávání příkazů SQL, případně jejich ověření, nabízí FireDAC jednoduchý QueryEditor. Okno Query Editoru otevřeme tak, že na formulář umístíme komponentu "FDQuery" a klikneme na ni pravým tlačítkem myši. V kontextovém menu pak vybereme volbu "Query Editor...".
Příkazy se vkládají do dialogu v záložce "SQL Command". Zadat lze i více příkazů současně, je však třeba použít v závislosti na databázovém stroji správný oddělovač příkazů. Jedná-li se o příkazy, které nevracejí jako výsledek sadu záznamů, stačí následně kliknout na tlačítko "Execute" a příkazy budou spuštěny jako dávka. Pokud je mezi zadanými příkazy více než jeden příkaz vracející výsledkovou sadu, zobrazí se pouze první sada záznamů. Pro zobrazení dalších je třeba použít tlačítko "Next RecordSet".
Je-li příkazem vrácena sada záznamů, lze si v záložce "Structure" ve spodní polovině obrazovky zobrazit její vlastnosti (informace o datových typech a atributech jednotlivých sloupců). V záložce "Messages" pak můžeme najít chybová nebo informační hlášení databáze.
Parametrické dotazy
Kromě dávek podporuje FireDAC Query Editor také parametrické dotazy. Do dialogu "SQL Command" vložíme příkaz s požadovanými parametry, například:
select * from osoba where osoba_id = :oid;
Následně přejdeme do záložky "Parameters", kam Query Editor automaticky doplní jméno použitých parametrů. V dialogu můžeme specifikovat typ parametru, jeho datový typ a případně defaultní hodnotu. Datovým typem může být i pole hodnot. Po zadání hodnoty (nebo indexu pole hodnot) a kliknutí na tlačítko "Execute" se zobrazí výsledek dotazu.
Parametr můžeme následně používat v kódu aplikace, typicky pro zobrazení dat z podřízené tabulky v pohledech "Master/Detail".
Delphi
procedure TForm1.Button1Click(Sender: TObject); begin FDQuery1.Active := False; FDQuery1.ParamByName('oid').AsInteger := StrToInt(edit2.Text); FDQuery1.Active := True; end;
C++ Builder
void __fastcall TForm1::Button1Click(TObject *Sender) { FDQuery1->Active = False; FDQuery1->ParamByName("oid")->AsInteger = StrToInt(edit2->Text); FDQuery1->Active = True; }
Použití Maker
Query Editor kromě spouštění parametrických dotazů dovoluje testovat i použití maker, nebo makra přímo používat pro modifikaci příkazů. Pokud například chceme spustit příkaz "select" proti několika různým tabulkám, můžeme využít možnost substituce názvů objektů. Do Query Editoru zadáme příkaz v následujícím tvaru:
SELECT &column FROM &table;
V záložce "Macros" jsou automaticky vytvořeny použité proměnné (v tomto případě "column" a "table") a lze jim přiřazovat požadované hodnoty. Po zadání hodnot a kliknutí na tlačítko "Execute" jsou proměnné nahrazeny zadanými hodnotami, příkaz je spuštěn a zobrazena výsledková sada.
Delphi
procedure TForm1.MakroClick(Sender: TObject); begin FDQuery1.Active := false; FDQuery1.MacroByName('TABLE').AsRaw := edit2.Text; FDQuery1.Active := true; end;
C++ Builder
void __fastcall TForm1::MakroClick(TObject *Sender) { FDQuery1->Active = False; FDQuery1->MacroByName("TABLE").AsRaw = edit2->Text; FDQuery1->Active = True; }
Makra nám mohou pomoci například při vývoji v multiplatformním prostředí, kde se vyskytují databázové stroje různých dodavatelů. Makra obsahují aparát pro podmíněné volání příkazů. FireDAC disponuje vestavěným textovým preprocesorem, který umožňuje používat při sestavování SQL příkazu makra a překlenout tak rozdíly v syntaxi používané různými dodavateli. Příkladem může být rozšíření příkazu "select" pro omezení počtu vrácených záznamů.
Zatímco pro databázový stroj Microsoft SQL je syntaxe následující:
SELECT TOP 5 * FROM firma;
pro dosažení stejného výsledku musíme v DB Interbase použít:
SELECT FIRST 5 * FROM firma;
S použitím FireDAC maker lze tento příkaz zapsat:
SELECT {IF MSSQL} TOP {fi}{IF INTRBASE} FIRST {fi} 5 * FROM firma;
Podpora parametrů a maker musí být aktivní, to znamená příslušné parametry "Command Text Processing" musí být nastaveny na "True".
Žádné komentáře:
Okomentovat