602SQL-┌plnß dokumentace Index   Tisk  

ZaΦßtek a konec prßce klienta

Zde popisujeme postup p°ipojenφ se klienta na SQL server a odpojenφ se.

Pro MFC jsou kádispozici t°φdy a pro Delphi 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.

Kontextovß prom∞nnß klienta

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φ:

  1. Vytvo°it prom∞nnou cd typu cd_t bu∩ tak, ₧e ji staticky deklaruje, nebo tak, ₧e ji dynamicky alokuje, nejlΘpe volßnφm funkce cdp_alloc.
  2. Inicializovat tuto prom∞nnou volßnφm funkce cdp_init. Tuto akci je nezbytn∞ nutnΘ provΘst p°ed volßnφm ostatnφch funkcφ vyu₧φvajφcφch kontextovou prom∞nnou.
  3. P°edßvat tuto prom∞nnou t∞m API funkcφm, kterΘ ji vy₧adujφ (obvykle jako prvnφ parametr). VáPascalu se p°edßvß odkazem, vájazyce C/C++ se p°edßvß ukazatel typu cdp_t, kter² na nφ ukazuje.
  4. Byla-li prom∞nnß cd alokovßna pomocφ cdp_alloc, dealokovat tuto prom∞nnou po odpojenφ se od serveru volßnφm funkce cdp_free.

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.

Funkce sáprefixem cd_

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.

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.

Prßce vφce vlßken klienta s databßzφ

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.

Slupka klientskΘ aplikace

P°ipojenφ se na server

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∞ (pro TCP/IP pouze je-li u klienta povolen broadcasting).

P°ipojenφ klienta na zvolen² server provßdφ funkce cd_connect se jmΘnem serveru p°edan²m jako parametr. Tato funkce zjistφ, zda po₧adovan² server b∞₧φ lokßln∞ nebo vásφti. Pokud server neb∞₧φ a je znßma cesta kájeho databßzovΘmu souboru, pak je server lokßln∞ spuÜt∞n.

Pokud server b∞₧φ lokßln∞, preferuje se pod Windows p°φmΘ p°ipojenφ klienta bez podpory sφt∞. Chcete-li se p°ipojit po sφti i na lokßln∞ b∞₧φcφ server (nap°. kv∙li testovßnφ sφ¥ovΘho chovßnφ), musφte p°ed jmΘnem serveru váparametru funkce cd_connect uvΘst hv∞zdiΦku.

Zprßvu o p°φpadnΘ chyb∞ p°i provßd∞nφ funkce cd_connect lze zobrazit vádialogovΘm okn∞ pomocφ procedury Kernel_error_box.

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.

P°ihlßÜenφ a odhlßÜenφ

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. Interaktivnφ variantou funkce (cd_)Login je funkce (cd_)Alogin.

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.

Volba schΘmatu

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 sávnit°nφm programovacφm prost°edφm

AplikaΦnφ program napsan² váexternφm jazyce m∙₧e nastavit jako projekt program vytvo°en² ve vnit°nφm jazyce a umφst∞n² veázvolenΘm schΘmatu. Tφm zφskß mo₧nost pracovat sáprom∞nn²mi tohoto projektu, provßd∞t p°φkazy vákontextu projektu, otevφrat objekty (formulß°e, menu, dotazy, sestavy) vyu₧φvajφcφ deklarace záprojektu a pou₧φvat váSQL p°φkazech hostitelskΘ prom∞nnΘ.

Nastavenφ projektu se provede volßnφm funkce (cd_)Open_project. Ke konkrΘtnφ prom∞nnΘ záprojektu lze p°istoupit p°es jejφ adresu zφskanou od funkce (cd_)Get_var_address. ProvΘst zadanou posloupnost p°φkaz∙ vnit°nφho programovacφho jazyka vákontextu projektu umo₧≥uje funkce (cd_)Exec_statements.

P°ehled po°adφ akcφ

Komunikace klienta s databßzov²m serverem musφ b²t uzav°ena do slupky funkcφ v tomto po°adφ:

  1. alokace kontextovΘ prom∞nnΘ cd, nenφ-li alokovßna staticky;
  2. volßnφ cdp_init;
  3. vytvo°enφ hlavnφho okna (nebylo-li otev°eno d°φve a je-li pot°eba) a inicializace okennφho prost°edφ;
  4. volßnφ cd_connect;
  5. volßnφ (cd_)Login, pracuje-li se neanonymn∞;
  6. volßnφ (cd_)Set_application;
  7. volßnφ (cd_)Open_project, je-li pot°eba;
  8. vlastnφ aplikace
  9. volßnφ (cd_)Logout, - nepovinnΘ;
  10. volßnφ cd_disconnect;
  11. dealokace prom∞nnΘ cd, nenφ-li alokovßna staticky;
  12. zav°enφ hlavnφho okna aplikace, existuje-li.

P°φklad pro Delphi

uses winbase;

var my_cd:cd_t;     //kontextova promenna klienta
    err:integer;    //klient se pripojil 
    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 (instalace wb602)
  if err=KSE_OK then begin 			  
    logged:=not cd_Login(@my_cd,'','');    //prihlaseni se k serveru
    cd_Set_application(@my_cd, 'testap');  //nastaveni schematu
  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;