TQuery má téměř všechny vymoženosti, protože stojí na třídě TDBDataSet a tím všechny podobnosti končí. TTable je prostě přímé spojení s tabulkou, TQuery je výsledek dotazu SELECT (což je v podstatě virtuální tabulka). Přes SQL lze vytvořit tabulku, ale musíš použít buď metodu Execute objektu TDatabase - takto Database1.execute (const SQL: String; Params: TParams = nil; Cache: Boolean = False; Cursor: phDBICur = nil): Integer; - význam parametrů viz help. Nebo rychleší je použít přímo API funkce BDE - jestli máš můj modul pro práci s BDE Rce_BDE (nabízel jsem ho kdysi ke stažení), je to metoda ExecSQL. Může vypadat například takto:
{------------------------------ Provede příkaz SQL za pomocí databáze --------------------------}
function ExecSQL (const ASQL: string; ADB: TDatabase; ACursor: phDBICur = nil): LongInt;
{ ASQL := Příkaz SQL (DDL nebo DML) }
{ ADB := Objekt databáze, který je použit pro vykonání SQL příkazu }
{ ACursor := Případné handle tabule, kam se narve výsledek (nutné pro SELECT) }
{Vrací: Počet vět co vrátil příkaz DML (příkaz DDL vrací vždy 0) }
begin
Check (DbiQExecDirect (ADB.Handle, qrylangSQL, PChar (ASQL), ACursor));
if (ACursor <> nil) then Check (DbiGetRecordCount (ACursor^, Result)) else Result := 0;
end;
//Edit Toto je cesta pro příkazy SQL kategorie DDE. Pro příkazy SQL kategorie DML existuje ještě objekt TUpdateSQL, kterým jdou vyslat příkazy DELTE, UPDATE a INSERT (přes výše uvedenou mojí rutinu jdou tyto příkazy vyslat také).DDE = data definition language = prostředky na definici dat například příkazy CREATE TABLE (vytvoření tabulky), ALTER TABLE (změny definice tabulky), DROP TABLE (smazání tabulky), CREATE INDEX, DROP INDEX.
DML = Data Manipulation Language = manipulace s daty - příkazy SELECT, DELETE (odstranění vět), INSERT (vložení vět z příkazu nebo jiné tabulky), UPDATE (změna položek tabulky).