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).
Add Comment