V
minulých dvou číslech jsme mimo jiné instalovali databázový stroj Interbase 6.0 a ukazovali si, jak je možné v PHP získávat informace z v ní uložených dat. Dneska si předvedeme, jak lze k Interbasi přistupovat z Delphi. Předpokládám, že máte zkušenosti s prací s databázemi například přes BDE (Borland Database Engine).
Protože Interbasi podobně jako Delphi dodává jedna a tatáž firma
(dříve Borland, pak Inprise, následně Inprise/Borland a nyní opět
Borland), je jasné, že bude existovat nějaké řešení přímo
v Delphi.
Od verze Delphi 5 je součástí balení Enterprise a Professional
Interbase Express, což jsou komponenty umožňující nativní
přístup k databázovému serveru. V paletě komponent je naleznete na
záložce InterBase.
Centrální komponentou je TIBDatabase, která řídí
připojení, určuje dialekt, standardní transakci a další. Protože našim
cílem je připojit se, věnujeme této komponentě nejvíce času.
Pokud na ni poklepete, zobrazí se dialog podobný jako na následujícím
obrázku:
Že je nutné zadat uživatelské jméno, heslo a případně roli je
naprosto jasné. Stejně pochopitelné je nutnost zadat jméno databáze
včetně cesty tak, jak je uložen na serveru resp. na lokálním počítači.
Tím jsme se vlastně dostali k tomu, kde je vlastně server umístěn.
V případě, že máte Interbasi nainstalovanou na vašem počítači, ze
kterého budete přistupovat, pak nechte nastavené připojení na
Local. V opačném případě zvolte Remote a budete muset
ještě zadat server, na který se chcete napojit a protokol, který použije.
Na výběr jich je několik (TCP/IP, NetBEUI či SPX).
Zbývá nám Character set, což je množina znaků, kterou budeme
používat při přístupu k databázi (například znaková sada
s češtinou) a Settings. Pokud jste zadali uživatelské jméno nebo
heslo, pak se tyto položky objevili právě v tomto seznamu. Pomocí něho
můžete zadat i další (smysluplné) nastavení, ale většinou se
používají pouze uvedené.
Zadejte tedy všechny potřebné informace, a zrušte zaškrtnutí Login
prompt (při pokusu o napojení byste jinak byli znovu požádáni
o zadání jména a hesla). Po stisku tlačítka OK nastavte vlastnost
Connected v Object Inspectoru na True. Jestliže
jste zadali všechny hodnoty správně, mělo by proběhnout připojení
k databázi. V opačném případě dostanete chybové hlášení
(zkontrolujte, zda jste opravdu vše zadali v pořádku a zda
server běží).
Protože Interbase je transakční, je potřeba ještě na formulář vložit
komponentu TIBTransaction, kterou následně propojte
s TIBDatabase přes vlastnost DefaultTransaction.
Nyní již můžeme provádět základní databázové operace. Zkusme si
nejprve zobrazení obsahu některé tabulky. K tomu ovšem zcela paradoxně
nepoužijeme komponenty TIBTable, ale TIBQuery
nebo TIBDataSet. Je to z toho důvodu, že TIBTable je velmi
náročná na server, protože při otevření některé z tabulek bez ohledu
na její velikost načítá velké množství informací. Jedná se
o přežitek ze souborových databází, proto se jejímu použití zásadně
vyhněte.
Dobře, máme tedy například TIBQuery, připojte ji tedy
k databázi pomocí vlastnosti Database a do vlastnosti SQL napište
příkaz SELECT z tabulky, která se v databázi vyskytuje. Nyní již
příkaz aktivujte a propojte přes datový zdroj (TDataSource)
na datovou mřížku (TDBGrid).
Podobně jako například při práci s BDE se pracuje s uloženými
procedurami. Komponentě TIBStoredProc přiřaďtě databázi,
název a případné parametry.
Protože se bavíme o připojení, vrátíme se k dialogu, který jsem
popisoval na začátku. Je totiž strašně fajn, že se můžeme relativně
příjemně připojit z Delphi, ale co náš uživatel? Ukážeme si, jak
vyvinout vlastní dialog na připojení.
Vytvořte si vlastní formulář a „naklikejte“ si dialog podobný tomu
na druhém obrázku, pouze navíc přidejte vstupní řádku pro zadání
dialektu. Nyní je zapotřebí naplnit vlastnosti komponenty
TIBDatabase. Kromě dialektu a cesty k databázi se ostatní
informace zadávají přes vlastnost Params. Než si ukážeme
příklad, povězme si něco o tom, jak určit protokol v případě
napojování se na vzdálený server.
To, jaký protokol chcete použít, určíte pomocí vlastnosti
DatabaseName, ve které se mimo jiné uvádí i soubor s databází.
Jak přesně to tedy dát dohromady? Předpokládejme, že je databáze uložena
v souboru C:\IB\DB.GDB na serveru, který se jmenuje
STAREJKRAP. Jak napsat příslušný řetězec ukazuje následující
seznam:
- TCP/IP: STAREJKRAP.CZ:C:\IB\DB.GDB
- NetBEUI: \\STAREJKRAP\C:\IB\DB.GDB
- SPX: STAREJKRAP@C:\IB\DB.GDB
V případě lokální databáze použijeme prostě pouze soubor
s cestou.
Příklad připojení pak může vypadat podobně jako na níže uvedením
výpisu. Na přiloženém CD je ukázkový formulář, který můžete vkládat
do svých aplikací a používat jej pro uživatelské přihlašování
k databázi.
procedure Connect (IBDatabase: TIBDatabase);
begin {Connect}
with IBDatabase do
begin
Params.Clear;
Params.AddStrings (mmNextSettings.Lines); //další parametry
Params.Values ['USER_NAME'] := edtUserName.Text; //jméno
Params.Values ['PASSWORD'] := edtPassword.Text; //heslo
if edtRole.Text <> '' then
Params.Values ['SQL_ROLE_NAME'] := edtRole.Text; //role
if rgConnectionType.ItemIndex = 0 then //připojuji se lokálně
begin
DatabaseName := cbxDatabase.Text;
end else begin //připojuji se vzdáleně
case cbxProtocol.ItemIndex of
//TCPIP connection
0: DatabaseName := edtServer.Text+':'+cbxDatabase.Text;
//NETBEUI connection
1: DatabaseName := '\\'+edtServer.Text+'\'+cbxDatabase.Text;
//SPX connection
2: DatabaseName := edtServer.Text+'@'+cbxDatabase.Text;
end; {case}
end; {if}
SQLDialect := StrToInt (edtDialect.Text); //dialekt
Screen.Cursor := crSQLWait;
try
Connected := True; //pokus o připojení
finally
Screen.Cursor := crDefault;
end;
end; //with IBDatabase
end; {Connect}
Ukázali jsme si, jak se programově připojit k databázovému stroji
Interbase pomocí standardně dodávaných komponent. Sluší se připomenout,
že na Internetu lze nalézt další komponenty a nástroje, které mohou práci
usnadnit, ale i znesnadnit.
Tento článek byl napsán pro časopis Softwarové noviny 5/2001.
Upozornění: tento text neprošel redakční úpravou, takže je
tak, jak byl napsán včetně případných chyb. Žádná část tohoto
článku nesmí být použita bez předchozího souhlasu autora.
Seznam mých dalších článků je v tomto přehledu.