|
Programování v externích jazycích | Kontextová proměnná klienta |
Zde popisujeme postup připojení se klienta na 602SQL server a odpojení se.
Pro Delphi jsou k dispozici komponenty (CDK komponenty), odvádějící tuto inicializační a deinicializační práci (nebo její část) požadovaným způsobem. Jich lze využít pro zjednodušení práce.
Každý klient, který se chce připojit na databázový server 602SQL, musí mít tzv. kontextovou proměnnou cd typu cd_t pro průběžné uložení informací o kontextu komunikace.
Klient musí:
Alokujete-li proměnnou cd ve vlastní správě paměti, můžete zjistit její potřebnou velikost voláním funkce cdp_size.
Klient se může současně připojit na více serverů nebo si vytvořit vícenásobné spojení na stejný server. V takovém případě musí mít více kontextových proměnných. Více paralelních spojení klienta na server však znemožňuje používat nástroje uživatelského rozhraní zabudované do 602SQL.
Klientský program má k dispozici dvě sady funkcí pro komunikaci se serverem. Funkce, začínající prefixem cd_ mají oproti funkcím bez tohoto prefixu jeden parametr navíc - prvním parametrem je kontextová proměnná cd resp. ukazatel na ni. Nově přidávané funkce mají většinou již pouze variantu s cd_. V textu jsou však na ně odkazy (většinou) bez tohoto prefixu.
Funkce s prefixem cd_ je nutno používat tehdy, pokud spojení na server vytvoří jedno vlákno a používá je jiné, nebo pokud současně existuje více paralelních spojení na servery. Pokud klient má pouze jedno vlákno připojené na jediný server, ale používat obě sady funkcí se stejným efektem.
Pokud každé vlákno klienta komunikuje s databází pouze prostřednictvím spojení, které si samo vytvořilo, a používá funkce s prefixem cd_, pak rozhraní na server funguje reentrantně a činnost vláken není nutno na klientské straně nijak synchronizovat. Pokud vlákna budou současně pracovat se stejnými daty, je třeba počítat s možností deadlocku na serveru.
Pokud klient má více vláken a vlákno může využívat spojení vytvořené jiným vláknem, pak:
Jinými slovy vlákno, které chce pracovat s databází, si vybere spojení a provede na něj funkci cd_assign_to_thread. Pak může pracovat a po skončení práce zavolá cd_unassign. Po tuto dobu spojení nesmí být přiřazeno žádnému jinému vláknu ani využíváno žádným jiným vláknem.
Každý klient musí zvolit server, s nímž bude komunikovat. Vybrat si lze pouze z takových serverů, které jsou zaregistrovány na počítači, na němž běží klient, nebo které běží ze stejném segmentu sítě (pouze je-li u klienta povoleno hledání serveru).
Připojení klienta na zvolený server provádí funkce cd_connect se jménem serveru předaným jako parametr.
Klient se odpojí od serveru zavoláním funkce cd_disconnect. Tato funkce musí být zavolána před ukončením práce klienta a před případnou dealokací proměnné cd.
Klient se na server přihlašuje pod určitým uživatelským jménem. Server může povolit také anonymní přístup, k němu však obvykle přísluší velmi omezená práva.
K přihlášení se slouží funkce (cd_)Login. Parametry této funkce jsou jméno uživatele a heslo. Server prověří, zda uživatele má v seznamu a zda souhlasí heslo. Pokud je vše v pořádku, je přihlášení se klienta na server provedeno.
Funkci (cd_)Login lze zavolat až po úspěšném provedení funkce cd_connect.
Klient přihlášený na server může své uživatelské jméno zjistit pomocí funkce (cd_)Who_am_I.
Opakem přihlášení se na server je odhlášení, které provede funkce (cd_)Logout. Po odhlášení se klient stává anonymním a může se později přihlásit pod jiným jménem.
Aplikační program může uživateli umožnit odhlásit se a později se znovu přihlásit, pokud uživatel odchází od počítače a nechce, aby někdo zneužil jeho práv.
Funkce (cd_)Login a (cd_)Logout se musí volat mezi voláním funkcí cd_connect a cd_disconnect.Klient by měl zvolit databázové schéma, v němž se nacházejí objekty, s nimiž hodlá pracovat. Na objekty ve zvoleném schématu pak může odkazovat pouze jejich jménem, zatímco na objekty z jiných schémat musí odkazovat složitějším zápisem ve tvaru:
jméno_schématu.jméno_objektu
Schéma lze zvolit voláním funkce (cd_)Set_application.
Nové schéma lze vytvořit pomocí funkce (cd_)Insert_object nebo pomocí SQL příkazu CREATE SCHEMA.
Komunikace klienta s databázovým serverem musí být uzavřena do slupky funkcí v tomto pořadí:
uses krnl602_10; var my_cd: cd_t; // kontextova promenna klienta err: integer; // stav pripojeni klienta logged: boolean; // klient je uspesne prihlaseny procedure TForm1.FormCreate(Sender: TObject); begin cdp_init(@my_cd); //inicializace kontext. promenne klienta err:=cd_connect(@my_cd, 'test', sw_minimize); //propojeni klienta k serveru test //server test musi byt zaregistrovany if err=KSE_OK then begin logged:=not cd_Login(@my_cd,'',''); //prihlaseni se k serveru jako anonymní if logged then cd_Set_application(@my_cd, 'testap'); //nastaveni schematu (aplikace) end; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin if err=KSE_OK then //pokud bylo pripojeno cd_disconnect(@my_cd); //ukonceni prace a odhlaseni od 602SQL, ukonceni spojeni end;
Programování v externích jazycích | Kontextová proměnná klienta |