Pomocou objektov typu Databáza a Tabuľka je možné pristupovať do SQL databázy (prostredníctvom ODBC rozhrania). Objekt Databáza definuje:

Parameter Popis
DSN Meno definovaného Data source name.
Meno Meno užívateľa pre prístup k databáze.
Heslo Heslo užívateľa pre prístup k databáze.

Svojou definíciou jednoznačne popisuje databázu a užívateľa, ktorý bude použitý pri práci s databázou. Rodičom a teda správcom objektov typu Databáza je proces D2000 DBManager (prípona pre objekt typu proces DBM).

Poznámka: Od verzie 7.01.024 nadobúda objekt typu Databáza celočíselnú hodnotu rovnú aktuálnemu počtu spojení. Podrobnosti o spojeniach sú uvedené v popise položiek konfiguračného okna Databázy.

Potomkom objektu je objekt typu Tabuľka. Táto reprezentuje tabuľku alebo náhľad definovaný v databáze. Objekt svojou konfiguráciou definuje:

Parameter Popis
Typ štruktúry Objekt typu Definícia štruktúry.
Prístup Maximálna možná úroveň prístupu (Žiadna, Čítanie, Zápis).
Tabuľka Meno tabuľky v databáze.
Kľúč Označenie stĺpcov v tabuľke, ktoré budú považované za kľúč.
Nepovinný Označenie stĺpcov v tabuľke, ktorých existencia bude nepovinná (t.j. existencia stĺpcov z definície štruktúry, ktoré takto označené nie sú, je v databázovej tabuľke požadovaná).
Not Null Označenie stĺpcov v tabuľke, ktorých hodnota musí byť definovaná pred vkladaním alebo modifikáciou v databázovej tabuľke (operácie pre vkladanie alebo modifikáciu záznamov tabuliek).
Časová hĺbka Položka definuje meno stĺpca typu absolútny čas a časovú hĺbku ako počet mesiacov, dní a hodín. Parameter je nepovinný.
Ak je uvedený, príslušný proces DbManager bude autonómne mazať z databázy riadky, ktorých hodnota v príslušnom stĺpci je staršia ako prípustná časová hĺbka.

Tabuľka (v databáze) je sprístupnená objektom typu Tabuľka. Proces D2000 DBManager pracuje výlučne len so stĺpcami definovanými v Definícii štruktúry (zhoda pre meno). Nie je chyba, ak tabuľka obsahuje viac alebo menej stĺpcov, ako je definované v objekte typu Definícia štruktúry. Ak existuje stĺpec v Definícii štruktúry a tabuľke nie, tento bude pri operáciách čítania plnený neplatnými hodnotami.

Pri zisťovaní, aké stĺpce tabuľka v databáze obsahuje, sa používa ODBC funkcia SQLColumns, ktorej vstupné parametre sú (okrem iných) názov tabuľky a názov užívateľa, ktorému tabuľka patrí. Ak názov tabuľky obsahuje bodku, D2000 DBManager použije ako meno užívateľa text pred bodkou a názov tabuľky text za bodkou (napr. ak názov objektu Tabuľka je Jerry.MyTable, D2000 DBManager zisťuje stĺpce tabuľky MyTable užívateľa Jerry). V opačnom prípade použije ako meno užívateľa meno zadané pri konfigurácii objektu Databáza, ktorý je rodičom objektu Tabuľka.
Uvedená logika je nutná z dôvodu existencie databáz, ktoré obsahujú viac tabuliek s rovnakým názvom patriacim rôznym užívateľom.

Pri tvorbe SQL príkazov D2000 DBManager uzatvára mená tabuliek a stĺpcov do úvodzoviek. Ak databáze záleží na veľkosti písmen, musia byť teda mená stĺpcov v definícii štruktúry a v definícii tabuľky v databáze zhodné (to isté platí aj pre mená tabuliek). Pre databázu PostgreSQL je možné používanie úvodzoviek zakázať parametrom /NQ. Potom nie je nutné, aby meno tabuľky (v objekte typu Tabuľka) a mená stĺpcov v objekte typu Definícia štruktúry presne zodpovedali menám príslušných tabuliek a stĺpcov v databáze.

Po pridaní stĺpca do definície štruktúry v D2000 zavolá D2000 DBManager znovu ODBC funkciu SQLColumns a zistí, či sa pridaný stĺpec vyskytuje aj v SQL tabuľke. Ak sa pridá do tabuľky v SQL databáze nový stĺpec, ktorý už existoval v definícii štruktúry v D2000, je možné prikázať procesu D2000 DBManager, aby zavolal funkciu SQLColumns pomocou tlačidla Test.

Taktiež musí byť zabezpečená zhodnosť typov zodpovedajúcich stĺpcov v tabuľke a v objekte typu Definícia štruktúry podľa nasledujúcej tabuľky:

Typ položky štruktúry Databázový (SQL) typ
Logický (Boolean) Ľubovoľný celočíselný typ.

Mapovanie hodnôt: False - 0, True - 1, Oscillate - 2
Celočíselný Ľubovoľný celočíselný typ.
Reálny Ľubovoľný reálny typ.
Absolútny čas TimeStamp
Relatívny čas Ľubovoľný reálny typ.
Text Pole znakov fixnej veľkosti. Obyčajne Char(x) pričom x je počet znakov.
Objekt Ukladanie hodnôt pre tento typ nie je principiálne možné. Preto pri zápise proces DbManager vždy zapisuje číselnú hodnotu 0. Čítanie generuje neplatnú hodnotu pre položky.


Poznámka: Funkcia SQLColumns, pomocou ktorej proces D2000 DBManager zisťuje stĺpce tabuľky v SQL databáze, je volaná:

  • pri prvom prístupe k tabuľke po štarte procesu D2000 DBManager,
  • pri prvom prístupe k tabuľke po zmene definície štruktúry, ktorá je v konfigurácii tabuľky,
  • pri prvom prístupe k tabuľke po uložení konfigurácie tabuľky,
  • po stlačení tlačidla Test v konfigurácii tabuľky.

Preto, pokiaľ sa pridáva do tabuľky nový stĺpec, korektný postup je nasledovný:

  • pridanie stĺpca do tabuľky v SQL databáze,
  • pridanie stĺpca do definície štruktúry. Pokiaľ bol už stĺpec v definícii štruktúry, tak uloženie tabuľky alebo stlačenie tlačidla Test v konfigurácii tabuľky.
  • prístup k tabuľke na overenie funkčnosti (napr. cez browser).

Pokiaľ je najskôr rozšírená definícia štruktúry, následne je pridaný stĺpec do tabuľky v SQL databáze a medzitým sa pristúpilo k tabuľke (takže sa zavolala funkcia SQLColumns skôr, ako sa stĺpec vytvoril), dáta do pridaného stĺpca sa nebudú zapisovať ani načítavať až do jednej z udalostí, ktoré spôsobia volanie funkcie SQLColumns.

Pokiaľ sa ruší stĺpec v tabuľke, korektný postup je nasledovný:

  • premenovanie stĺpca v definícii štruktúry napr. na Unused,
  • premenovanie stĺpca v tabuľke v SQL databáze,
  • prístup k tabuľke na overenie funkčnosti (napr. cez browser).

Pokiaľ sa stĺpec najskôr premenuje v tabuľke v SQL databáze a až následne v definícii štruktúry, tak prístupy k tabuľke medzi týmito dvoma operáciami skončia s chybou (kvôli prístupu k neexistujúcemu stĺpcu SQL tabuľky).

Write a comment...