Internet klienti v 602SQL – špeciality

22. července 2003

V poslednom článku o internet klientoch v 602SQL vám ukážem niekoľko špeciálnych prípadov práce s WBIK – prácu so súbormi, s cookies a s fulltextom.

Práca so súbormi

602SQL umožňuje okrem obvyklých číselných a textových dát aj ukladanie obecných dát. Ide o typ v SQL označený ako LONG VARBINARY, v klientskom rozhraní ako OLE alebo BLOB. V ňom je možné priamo vkladať súbory (dokumenty, tabuľky, obrázky atď.) do tabuliek až do veľkosti 16 MB. WBIK umožňuje špeciálnym postupom uložiť súbor do databázy ako aj zobraziť jeho obsah. Postup uvediem na konkrétnom príklade. Najprv vytvoríme tabuľku obrazky:

CREATE TABLE `OBRAZKY` (
`OBR1` LONG VARBINARY )

Na vloženie súboru (v našom prípade obrázku) môžeme vytvoriť v klientskom prostredí formulár, smerujúci do tejto tabuľky. Vo formulári vložíme do tabuľky jeden záznam a ďalej vytvoríme WBC konektor s názvom obraz1:

SQLStatement: obrazok1
+ SELECT obr1
+ FROM Obrazky
+ LIMIT 1
EndSQL
Content-type: „application/octet-stream“
SendFile: obrazok1.obr1

Zobraziť obrázok v šablóne môžeme takto:

<IMG SRC=“<%wb_url%>/obraz1.wbc“>

Obrázok môžeme pomocou WBIK do tabuľky aj vložiť. Vo vstupnom formulári použijeme nasledujúci formulárový prvok:

<FORM METHOD=“POST“ ACTION=“/cgi-bin/602cgi8.exe/db/app/pridajobr.wbc“ ENCTYPE=“multipart/form-data“>
Vyberte súbor:
<INPUT TYPE=“FILE“ NAME=“subor“>
<BR>
<INPUT TYPE=“SUBMIT“ VALUE=“Poslať“>
</FORM>

Formulár sa odvoláva na WBC konektor pridajobr, ktorý môže vyzerať takto:

SQLStatement:
+ INSERT INTO Files(content,filename,content_type)
+ VALUES (:<subor,“%subor_filename%“,“%subor_content_type%“)

Obsah odosielaného súboru je v premennej subor. K nemu sa pridávajú prípony _filename a _content_type na označenie názvu a MIME typu posielaného súboru.

Cookies

Vytvoriť cookie môžeme špeciálnym príkazom Set-cookie v konektore. Vytvorme napríklad cookie s názvom kolacik s dobou platnosti jeden rok:

Set-cookie: kolacik=“%hodn%“ ; expires=%current_timestamp%+31536000

Premenná hodn je nejaká vstupná (a textová, lebo je uvedená v úvodzovkách) formulárová premenná alebo premenná WBIK. Jej obsah naplníme do obsahu cookie. Číslo 31536000 je počet sekúnd za obdobie 365 dní. Obsah cookie zobrazíme pomocou mena, vytvoreného z prefixu http_cookie_ a z mena konkrétneho cookie, v našom prípade to (v šablóne) bude:

<%HTTP_COOKIE_kolacik%>

V prípade, že nám nestačí jediný cookie, ale potrebujeme vytvoriť samostatný cookie ku každému záznamu z tabuľky, môžeme v Set-cookie použiť výraz:

Set-cookie: kolacik%id%=“%hodn%“ ; expires=%current_timestamp%+31536000

V tomto prípade id predstavuje meno kľúča z uvedenej tabuľky. Na hodnotu takéhoto cookie sa v konektore odvoláme pomocou:

HTTP_COOKIE_kolacik%id%

Pretože v šablóne by došlo k zdvojeniu znaku %, musíme pre zobrazenie obsahu takéhoto cookie použiť v konektore príkaz DeclareVariable:

DeclareVariable: qcookie:=HTTP_COOKIE_kolacik%id%

Cookies sa dajú vytvoriť aj v šablóne pomocou elementu META, napríklad:

<META HTTP-EQUIV=“Set-Cookie“ CONTENT=“kolacik=<%hodn%>; EXPIRES=<%CURRENT_TIMESTAMP+31536000;cookieexpires%“>

Premenná hodn je opäť vstupná premenná. V takomto prípade tiež nie je problém vytvoriť cookie ku každému záznamu tabuľky:

<META HTTP-EQUIV=“Set-Cookie“ CONTENT=“kolacik<%id%>=<%hodn%>; EXPIRES=<%CURRENT_TIMESTAMP+31536000;cookieexpires%“>

Aplikovanie fulltextu

Fulltext vo WBIK sa používa podobným spôsobom ako v ostatných častiach aplikácie. Aplikáciu si ukážeme na konkrétnom príklade. Najprv vytvoríme v aplikácii fulltext, ktorý bude indexovať príkladovú tabuľku knihy. Procedúrou na serveri fulltextový systém založíme a jednorázovo zaindexujeme všetky záznamy v tabuľke:

PROCEDURE Vytvorfulltext();
BEGIN
  DECLARE pom_text CHAR(101);
  CALL Fulltext_create(‚.KNIHA‘,’basic_form=1;language=1;weighted=0′);
  FOR riadok AS cur INSENSITIVE CURSOR FOR
   SELECT *
   FROM Knihy
  DO
   BEGIN
    SET pom_text = riadok.nazov + ‚ ‚ + riadok.napisal;
    CALL Fulltext_index_doc(‚.KNIHA‘, riadok.id, pom_text, ‚TXT‘, 0);
   END;
  END FOR;
END

V procedúre je zavolaná funkcia Fulltext_create, ktorá v aktuálnej aplikácii vytvorí fulltextový systém s názvom KNIHA. Následne sa pre všetky riadky tabuľky Knihy vykoná zaindexovanie funkciou Fulltext_index_doc, pričom indexujú sa naraz dva stĺpce nazov a napisal.

Pre vyššie uvedený príklad môžete vyhľadávaciu podmienku v konektore napísať nasledovne (hladajtxt je vstupná premenná pochádzajúca zo šablóny, ktorá konektor zavolala):

+ SELECT *
+ FROM Knihy
+ WHERE (Fulltext(‚.KNIHA‘, Knihy.id, ‚%hladajtxt%‘)

Záver

Séria článkov, ktorej poslednú časť ste práve dočítali, mala za úlohu oboznámiť vás teoreticky aj prakticky s jazykom WBIK. Podrobnejšie informácie hľadajte v elektronickej nápovede alebo na webe Software602.

Výhodou riešenia internetových aplikácií v kombinácii 602SQL + WBIK je fakt, že programátor si môže prácu zjednodušiť tým, že zložitejšie časti (napr. funkcie správy aplikácie) vytvorí v rozhraní pre Windows. Tvorba ovládacích prvkov klientskej aplikácie (hlavne formulárov) je totiž rýchlejšia a menej náročná ako programovanie pre internet, ktoré ešte stále vyžaduje prácu s textami v zdrojovom tvare. Naopak určitou nevýhodou môže byť celkovo menšia rozšírenosť 602SQL ako iných riešení, napríklad PHP alebo ASP.

Předchozí článek Java Servlets - state tracking
Další článek nemecka-doga.cz
Štítky: Články

Mohlo by vás také zajímat

Nejnovější

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *