Promotic

Popis práce s objektem PmaDatabase odkazujícím existující tabulku



1. Připojení a otevření databázové tabulky

Připojením databáze je připojena databáze specifikovaná v konfigurátoru "Databáze (soubor, složka, datový zdroj)". Připojit databázi lze po spuštění aplikace (konfigurátor "Při startu" je nastaven na "Připojit databázi a otevřít tabulku (stejně jako metoda Open)" nebo "Připojit databázi a NEotevřít tabulku (stejně jako metoda Connect)") nebo kdykoliv později voláním metody PmaDatabase.Connect. Tato operace je rychlejší, než otevření tabulky.
Otevřením tabulky je provedeno výše uvedené připojení databáze a navíc je otevřená tabulka specifikovaná v konfigurátoru "Tabulka (soubor)". Otevřít tabulku lze po spuštění aplikace (konfigurátor "Při startu" je nastaven na volbu 'připojit databázi a otevřít tabulku') nebo kdykoliv později voláním metody PmaDatabase.Open. Tato operace je pomalejší, než připojení databáze. Tabulku lze otevřít v módech "pro čtení i zápis", "jen pro čtení", atd., viz například konfigurátor "Jak otevřít tabulku" (toto ovlivňuje rychlost otevření).
Pomocí konfigurátorů karty "Databáze" lze definovat tabulku a způsob jejího otevření. Konfigurátor "Otevřít tabulku pomocí SQL příkazu SELECT" určuje, zda je tabulka otevřena podle zadaného SQL příkazu typu SELECT, v jiném případě je otevřena přímo podle konfigurátoru "Tabulka (soubor)".

Způsob zadávání SQL příkazů závisí na nastavení konfigurátoru "Technologie":
- pokud je nastaven na Přístup přes ODBC, pak se zadávají případné SQL příkazy v syntaxi jazyka SQL té databáze, ke které je objekt PmaDatabase připojen.
- pokud je nastaven na Přímý přístup k tabulce - DAO, pak je nutno zadat SQL příkazy v syntaxi Microsoft podporované v systému PROMOTIC; odlišnosti jsou minimální - viz dále.


Upozornění!!! - podporovaná implementace SQL se liší od ANSI SQL v syntaxi příkazu Like následně:

ANSI SQL podporovaná implementace SQL
_ ?
% *


a v syntaxi příkazu WHERE v zadávání datumu a času následně:

ANSI SQL podporovaná implementace SQL
WHERE ... '25 10 2002 12:22:30' ... WHERE ... #10 25 2002 12:22:30# ...
Příklad1:
(Microsoft syntaxe v systému PROMOTIC) výběr všech sloupců v tabulce s názvem "Table", kde hodnoty ve sloupci "column1" jsou v rozsahu 10 - 100.
SELECT * FROM Table WHERE column1 BETWEEN 10 AND 100
Příklad2:
(Microsoft syntaxe v systému PROMOTIC) výběr sloupců "column1" a "column2" v tabulce s názvem "Table", kde hodnoty ve sloupci "column1" jsou větší než 10.
SELECT column1, column2 FROM Table WHERE column1 > 10
Příklad3:
(Microsoft syntaxe v systému PROMOTIC) výběr všech sloupců v tabulce s názvem "Table", kde hodnoty ve sloupci "Time" jsou v daných mezích. Čas je zadán ve formátu: #měsíc den rok hodina:minuta:sekunda#.
SELECT * FROM Table WHERE Time BETWEEN #12 25 2023 23:53:30# AND #12 25 2023 23:55:30#
Příklad4:
(Microsoft syntaxe v systému PROMOTIC) výběr sloupců "column1" a "column2" v tabulce s názvem "Table", kde hodnoty ve sloupci "column1", který je typu String, začínají znakem "A" až "D".
SELECT column1, column2 FROM Table WHERE column1 LIKE '[A-D]*'
Příklad5:
(Microsoft syntaxe v systému PROMOTIC) výběr všech sloupců v tabulce s názvem "Table", kde hodnoty ve sloupci "Time" jsou v daných mezích a jsou setříděny podle tohoto sloupce. Čas je zadán ve formátu: #měsíc den rok hodina:minuta:sekunda#.
SELECT * FROM Table WHERE Time BETWEEN #12 25 2023 23:53:30# AND #12 25 2023 23:55:30# ORDER BY Time

2. Práce s tabulkou

Pokud databáze je jen připojena, pak lze s připojenou databází pracovat pomocí příkazů jazyka SQL (metody PmaDatabase.Execute, PmaDatabase.ExecuteSQL) a lze použít metody ExistTable, DeleteTable, Create, CreateField, CreateIndex, CreateEnd. Ostatní metody nejsou funkční, protože tabulka není otevřena.
Pokud tabulka je otevřena, pak lze s připojenou databází pracovat pomocí SQL a navíc jsou funkční všechny ostatní metody.
Ukazovátko (aktuální pozice) jednoznačně určuje záznam tabulky, se kterým budou pracovat metody objektu PmaDatabase.
Pokud není nastaveno, pak metody pracující nad záznamem tabulky skončí chybou.
Pokud je například potřeba do určitého záznamu zapsat hodnotu, pak je nutno nejprve přesunout ukazovátko na daný záznam a poté lze do tohoto záznamu zapsat.
Upozornění! - po otevření tabulky není ukazovátko inicializováno (pokud není ukazovátko platné, pak metody pro čtení i zápis selžou).
Ukazovátko tabulky je přesunováno voláním metody PmaDatabase.Move, PmaDatabase.MoveTo, atd. nebo PmaDatabase.FindFirst, atd.
Testy, zda ukazovátko je na začátku nebo na konci tabulky, lze provádět pomocí metod PmaDatabase.IsBOF, PmaDatabase.IsEOF.
Číst hodnotu z tabulky lze metodou ReadFieldValue. Zapisovat hodnotu do tabulky lze metodou WriteFieldValue nebo metodou PmaDatabase.SetRecordValueNull. Pokud je nutno zapsat do záznamu pouze jednu hodnotu, pak se zavolá přímo metoda PmaDatabase.WriteFieldValue (PmaDatabase.SetRecordValueNull). Pokud je nutno do záznamu tabulky zapisovat více hodnot, pak je lepší a rychlejší zvolit následující postup:
1. zavolání metody PmaDatabase.Edit.
2. opakovaně volat metoda PmaDatabase.WriteFieldValue (tím je připraven buffer dat, ale samotná tabulka není zatím modifikována).
3. teprve zavoláním metody PmaDatabase.Update je proveden zápis do databáze.


Přidat prázdnou větu lze metodou PmaDatabase.AddNew. K přidání inicializovaného záznamu lze použít metodu PmaDatabase.Add:
1. volat metodu PmaDatabase.Add.
2. opakovaně nastavit metoda PmaDatabase.WriteFieldValue (tím je připraven buffer dat, ale samotná tabulka není zatím modifikována).
3. teprve voláním metody PmaDatabase.Update je proveden zápis do databáze.

K smazání záznamu lze použít metodu PmaDatabase.Delete. K vyhledávání záznamu v tabulce lze použít metodu PmaDatabase.FindFirst,... (tyto metody nejsou funkční, pokud konfigurátor "Technologie" je nastaven na Přístup přes ODBC).

Také se může s tabulkou pracovat pomocí transakčního zpracování. Transakční zpracování je dávkové zpracování (dávka příkazu je provedena buď celá nebo není provedena vůbec). Princip je následující. Nejprve se zavolá metoda PmaDatabase.BeginTrans. Od tohoto okamžiku jsou hlídány všechny operace modifikující danou databázi a tabulku. Teprve po zavolání metody PmaDatabase.Commit jsou všechny změny, provedené od předchozího volání metody PmaDatabase.BeginTrans, zplatněny. Pokud k volání metody PmaDatabase.Commit nedojde (např. z důvodu ukončení běžící aplikace, výpadku napětí - reset nebo zavolání metody PmaDatabase.Close), pak všechny změny provedené po předchozím PmaDatabase.BeginTrans nebudou provedeny. Při transakčním zpracování lze použít metodu PmaDatabase.RollBack. Tato metoda vrací veškeré modifikace tabulky do stavu při předchozím volání metody PmaDatabase.BeginTrans. Pokud je tedy volána metoda PmaDatabase.BeginTrans pro transakční zpracování, následně budou prováděny libovolné modifikace (byly by zplatněny až po zavolání metody PmaDatabase.Commit) a zavolá se metoda PmaDatabase.RollBack, pak k žádné modifikaci databázové tabulky nedojde.
Upozornění: Transakční zpracování nemusí být některými databázemi podporováno, například databáze Excel, dBase, PARADOX, základní verze databáze MySQL, atd.

Pro hromadné zpracování tabulek lze použít metody PmaDatabase.Execute a PmaDatabase.ExecuteSQL.
K zjištění informací o struktuře tabulky lze použít metody PmaDatabase.GetFieldCount a PmaDatabase.GetFieldInfo.

3. Zavření databázové tabulky a odpojení databáze

Tabulku databáze lze zavřít voláním metody PmaDatabase.CloseTable. V tom případě databáze zůstáva připojena, lze stále volat například metody Execute, ExecuteSQL.
Zavřít tabulku a odpojit databázi lze metodou PmaDatabase.Close.
Lze použít také poznatku, že databáze se zavře automaticky při ukončení běžící aplikace (zavřou se také všechny databázové tabulky).

Tip

S objektem PmaDatabase lze pracovat také následujícím způsobem:
- vyplnit konfigurátory karty "Databáze".
- otevřít specifikovanou tabulku (v konfigurátoru "Při startu" nebo metodou Open).
- pracovat s tabulkou (čtení, zápis) a pak ji zavřít metodou Close, CloseTable.
- následovně změnit vlastnost Table nebo PmaDatabase.OpenSQL (podle toho, zda konfigurátor "Otevřít tabulku pomocí SQL příkazu SELECT" je zatržen) a znovu (nyní už jinou tabulku ve stejné databázi) otevřít, pracovat s tabulkou, zavřít ji, atd.


Při takovémto postupu práce místo metody PmaDatabase.Close je lepší použít metodu PmaDatabase.CloseTable (pokud databáze zůstává nezměněna). Ta nezavírá celý objekt databáze i s tabulkou, ale ponechá připojenou databázi a zavře pouze tabulku (rychlejší postup). Po dokončení práce s databází je vhodné volat metodu PmaDatabase.Close.
© MICROSYS, spol. s r.o.