Použití dotazů Delphi s ADO

click fraud protection

Komponenta TADOQuery poskytuje Delphi vývojáři schopnost načíst data z jedné nebo více tabulek z Databáze ADO pomocí SQL.

Tyto příkazy SQL mohou být buď příkazy DDL (Data Definition Language), například CREATE TABLE, ALTER INDEX atd., Nebo to mohou být příkazy DML (Data Manipulation Language), jako je SELECT, UPDATE a ODSTRANIT. Nejběžnějším příkazem je však příkaz SELECT, který vytváří pohled podobný pohledu dostupnému pomocí komponenty Tabulka.

Poznámka: Přestože je možné provádět příkazy pomocí komponenty ADOQuery, je možné ADOCommandkomponenta je pro tento účel vhodnější. Nejčastěji se používá k provádění příkazů DDL nebo k provádění uložené procedury (přestože byste měli použít příkazTADOStoredProc pro takové úkoly), který nevrací sadu výsledků.

SQL použitý v komponentě ADOQuery musí být přijatelný pro používaný ovladač ADO. Jinými slovy, měli byste být obeznámeni s rozdíly v psaní SQL například mezi MS Access a MS SQL.

Stejně jako při práci s komponentou ADOTable se k datům v databázi přistupuje pomocí připojení úložiště dat vytvořeného komponentou ADOQuery pomocí její

instagram viewer
ConnectionString nebo prostřednictvím samostatné komponenty ADOConnection uvedené v Spojenívlastnictví.

Chcete-li vytvořit formulář Delphi schopný načíst data z databáze Access pomocí komponenty ADOQuery, jednoduše zrušte všechny související komponenty pro přístup k datům a datově orientované součásti a vytvořte odkaz, jak je popsáno v předchozích kapitolách tohoto dokumentu chod. Komponenty pro přístup k datům: DataSource, ADOConnection spolu s ADOQuery (místo ADOTable) a jedna komponenta citlivá na data, jako je DBGrid, je vše, co potřebujeme.
Jak již bylo vysvětleno, pomocí Inspektoru objektů nastavte propojení mezi těmito komponenty takto:

DBGrid1.DataSource = DataSource1
DataSource1.DataSet = ADOQuery1
ADOQuery1.Connection = ADOConnection1
// sestavení ConnectionString
ADOConnection1.ConnectionString = ...
ADOConnection1.LoginPrompt = False

Provádění dotazu SQL

Komponenta TADOQuery nemá TableNamevlastnost jako TADOTable. TADOQuery má vlastnost nazvanou TStrings SQL který se používá k uložení příkazu SQL. Hodnotu vlastnosti SQL můžete nastavit pomocí Inspektoru objektů v době návrhu nebo prostřednictvím kódu za běhu.

V době návrhu vyvolejte editor vlastností pro vlastnost SQL kliknutím na tlačítko elipsy v inspektoru objektů. Zadejte následující příkaz SQL: "SELECT * FROM Authors".

Příkaz SQL lze provést jedním ze dvou způsobů, v závislosti na typu příkazu. Příkazy jazyka Definice jazyka jsou obecně prováděny pomocí ExecSQL metoda. Chcete-li například odstranit konkrétní záznam z konkrétní tabulky, můžete napsat příkaz DELETE DDL a spustit dotaz pomocí metody ExecSQL.
(Běžné) příkazy SQL se provádějí nastavením TADOQuery. Aktivní majetek Skutečný nebo volánímotevřeno metoda (v podstatě stejná). Tento přístup je podobný načtení dat tabulky pomocí komponenty TADOTable.

Za běhu lze příkaz SQL ve vlastnosti SQL použít jako jakýkoli objekt StringList:

s ADOQuery1 začnou Zavřít; 
SQL.Clear;
SQL.Add: = 'VYBRAT * OD AUTORŮ' SQL.Add: = 'OBJEDNÁVKA autorské jméno DESC' Otevřít;
konec;

Výše uvedený kód v době spuštění uzavírá dataset, vyprázdňuje řetězec SQL ve vlastnosti SQL, přiřadí nový příkaz SQL a aktivuje dataset voláním metody Open.

Všimněte si, že vytvoření trvalého seznamu objektů pole pro komponentu ADOQuery samozřejmě nemá smysl. Při příštím volání metody Open může být SQL tak odlišné, že se může změnit celá sada názvů souborů (a typů). Samozřejmě to tak není, pokud pomocí ADOQuery načteme řádky z jedné tabulky s konstantní sadou polí - a výsledná sada závisí na WHERE části příkazu SQL.

Dynamické dotazy

Jednou z velkých vlastností komponent TADOQuery je Params vlastnictví. Parametrizovaný dotaz je dotaz, který umožňuje flexibilní výběr řádků a sloupců pomocí parametru v klauzuli WHERE příkazu SQL. Vlastnost Params umožňuje vyměnitelné parametry v předdefinovaném příkazu SQL. Parametr je zástupný symbol pro hodnotu v klauzuli WHERE, definovaný těsně před otevřením dotazu. Chcete-li určit parametr v dotazu, použijte dvojtečku (:) před názvem parametru.
V době návrhu použijte Inspektor objektů k nastavení vlastnosti SQL následujícím způsobem:

ADOQuery1.SQL: = 'VÝBĚR * Z aplikací KDE typ =: apptype'

Když zavřete okno editoru SQL, otevřete okno Parameters kliknutím na tlačítko elipsy v Inspektoru objektů.

Parametr v předchozím příkazu SQL je pojmenovánapptype. Hodnoty parametrů ve sbírce parametrů můžeme nastavit v době návrhu pomocí dialogu Parametry, ale většinu času budeme měnit parametry za běhu. Dialog Parametry lze použít k určení datových typů a výchozích hodnot parametrů použitých v dotazu.

Za běhu lze parametry změnit a dotaz znovu spustit za účelem aktualizace dat. Za účelem provedení parametrizovaného dotazu je nutné před provedením dotazu zadat hodnotu pro každý parametr. K úpravě hodnoty parametru používáme buď vlastnost Params, nebo metodu ParamByName. Například vzhledem k výše uvedenému příkazu SQL bychom mohli za běhu použít následující kód:

s ADOQuery1 začíná
Zavřít;
SQL.Clear;
SQL.Add ('SELECT * FROM Applications WHERE type =: apptype');
ParamByName ('apptype'). Hodnota: = 'multimedia';
Otevřeno;
konec;

Stejně jako při práci s komponentou ADOTable vrátí ADOQuery sadu nebo záznamy z tabulky (nebo dvou či více). Navigace v sadě dat se provádí pomocí stejné sady metod, jaké jsou popsány v kapitole „Za datovými sadami za daty“.

Navigace a úpravy dotazu

Obecně by se komponenta ADOQuery neměla používat, když probíhá úprava. Dotazy založené na SQL se většinou používají pro účely vykazování. Pokud dotaz vrátí sadu výsledků, je někdy možné vrátit vrácenou datovou sadu. Výsledná sada musí obsahovat záznamy z jedné tabulky a nesmí používat žádné agregační funkce SQL. Úpravy datové sady vrácené ADOQuery jsou stejné jako úpravy datové sady ADOTAble.

Příklad

Abychom viděli nějakou akci ADOQuery, napíšeme malý příklad. Vytvořme dotaz, který lze použít k načtení řádků z různých tabulek v databázi. K zobrazení seznamu všech tabulek v databázi můžeme použít GetTableNamesmetoda ADOCpřipojení součástka. GetTableNames v události OnCreate formuláře vyplní ComboBox s názvy tabulek a tlačítko slouží k uzavření dotazu a znovu jej načíst záznamy z vybrané tabulky. Obsluha událostí () by měla vypadat takto:

procedura TForm1.FormCreate (Sender: TObject);
začít
ADOConnection1.GetTableNames (ComboBox1.Items);
konec;
postup TForm1.Button1Click (odesílatel: TObject);
var tblname: string;
začít
pokud ComboBox1.ItemIndex, pak Exit;
tblname: = ComboBox1.Items [ComboBox1.ItemIndex];
s ADOQuery1 začíná
Zavřít;
SQL.Text: = 'SELECT * FROM' + tblname;
Otevřeno;
konec;
konec;

Všimněte si, že vše lze provést pomocí ADOTable a její vlastnosti TableName.

instagram story viewer