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 při 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 "Při otevření tabulky použít SQL příkaz 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 mezích mezi 10 až 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 2021 23:53:30# AND #12 25 2021 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 2021 23:53:30# AND #12 25 2021 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 je tabulka 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 větu tabulky, se kterou budou pracovat metody objektu PmaDatabase. Pokud není nastaveno, pak metody pracující nad větou tabulky skončí chybou. Pokud je například potřeba do určité věty zapsat hodnotu, pak je nutno nejprve přesunout ukazovátko na danou větu a poté lze do této věty 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 metod 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 pomocí vlastnosti PmaDatabase.FieldValues. Zapisovat hodnotu do věty tabulky lze pomocí vlastnosti PmaDatabase.FieldValues nebo metodou PmaDatabase.SetRecordValueNull. Pokud je nutno zapsat do věty pouze jednu hodnotu, pak se zavolá přímo vlastnost PmaDatabase.FieldValues (PmaDatabase.SetRecordValueNull). Pokud je nutno do věty tabulky zapisovat více hodnot, pak je lepší a rychlejší zvolit následující postup:
1. zavolání metody PmaDatabase.Edit.
2. opakovaně volat vlastnost PmaDatabase.FieldValues (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é věty lze použít metodu PmaDatabase.Add:
1. volat metodu PmaDatabase.Add.
2. opakovaně nastavit vlastnost PmaDatabase.FieldValues (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í věty lze použít metodu PmaDatabase.Delete. K vyhledávání věty 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).

S tabulkou se může pracovat také 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 tabulky databáze).

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 ní (č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 "Při otevření tabulky použít SQL příkaz SELECT" je zatržen) a znovu (nyní už jinou tabulku ve stejné databázi) otevřít, pracovat s ní, 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.Tavičská 845/21 703 00 Ostrava-Vítkovice