Promotic
WikipediaLinkedInYoutubeTwitterFacebook

Popis práce s objektem PmDatabase 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á konfigurátorem 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 volbou "Připojit databázi a otevřít tabulku (totéž, co metoda "Open")" nebo "Připojit databázi a NEotevřít tabulku (totéž, co metoda "Connect")") nebo kdykoliv později voláním metody PmDatabase.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á konfigurátorem Tabulka (soubor). Otevřít tabulku lze při spuštění aplikace (konfigurátor Při startu je nastaven volbou 'připojit databázi a otevřít tabulku') nebo kdykoliv později voláním metody PmDatabase.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ů záložky 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, jinak 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, zadávají se případné SQL příkazy v syntaxi SQL jazyka té databáze, ke které je objekt PmDatabase připojen.
- pokud je nastaven na Přímý přístup k tabulce - DAO, je nutno zadávat SQL příkazy v syntaxi Microsoft podporované v 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í data 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 PROMOTIC) výběr všech sloupců tabulky nazvané "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 PROMOTIC) výběr sloupců "column1" a "column2" z tabulky nazvané "Table", kde hodnoty ve sloupci "column1" jsou větší než 10.
SELECT column1, column2 FROM Table WHERE column1 > 10
Příklad3:
(Microsoft syntaxe v PROMOTIC) výběr všech sloupců tabulky nazvané "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 2016 23:53:30# AND #12 25 2016 23:55:30#
Příklad4:
(Microsoft syntaxe v PROMOTIC) výběr sloupců "column1" a "column2" z tabulky nazvané "Table", kde hodnoty ve sloupci "column1", který je datového typu String, začínají znakem "A" až "D".
SELECT column1, column2 FROM Table WHERE column1 LIKE '[A-D]*'
Příklad5:
(Microsoft syntaxe v PROMOTIC) výběr všech sloupců tabulky nazvané "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 2016 23:53:30# AND #12 25 2016 23:55:30# ORDER BY Time

2. Práce s tabulkou

Pokud je databáze jen připojena, lze s připojenou databází pracovat prostředníctvím příkazů jazyka SQL (metody PmDatabase.Execute, PmDatabase.ExecuteSQL) a lze používat metody ExistTable, DeleteTable, Create, CreateField, CreateIndex, CreateEnd. Ostatní metody nejsou funkční, neboť tabulka není otevřena.

Pokud je tabulka otevřena, 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ě identifikuje větu tabulky, se kterou budou pracovat metody objektu PmDatabase. Pokud není definováno, metody pracující nad větou tabulky skončí chybou. Pokud je například potřeba do určité věty zapsat hodnotu, musí se 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é, metody pro zápis či čtení selžou).

Ukazovátko tabulky je přesunováno voláním metod PmDatabase.Move, PmDatabase.MoveTo, atd. nebo PmDatabase.FindFirst, atd.

Testy, zda ukazovátko je na začátku nebo na konci tabulky, lze provádět pomocí metod PmDatabase.IsBOF, PmDatabase.IsEOF.

Číst hodnotu z tabulky lze pomocí vlastnosti PmDatabase.FieldValues. Zapisovat hodnotu do věty v tabulce lze pomocí vlastnosti PmDatabase.FieldValues nebo metody PmDatabase.SetRecordValueNull. Pokud je potřeba zapsat do věty pouze jednu hodnotu, zavolá se přímo vlastnost PmDatabase.FieldValues (PmDatabase.SetRecordValueNull). Pokud je potřeba do věty tabulky zapisovat více hodnot, je lepší a rychlejší zvolit následující postup:

1. zavolat metodu PmDatabase.Edit.
2. opakovaně volat vlastnost PmDatabase.FieldValues (tím je připraven buffer dat, ale samotná tabulka není zatím modifikována).
3. teprve zavoláním metody PmDatabase.Update je proveden zápis do databáze.
 
Přidat prázdnou větu lze metodou PmDatabase.AddNew. K přidání inicializované věty lze využít metodu PmDatabase.Add:
1. zavolat metodu PmDatabase.Add.
2. opakovaně volat vlastnost PmDatabase.FieldValues (tím je připraven buffer dat, ale samotná tabulka není zatím modifikována).
3. teprve zavoláním metody PmDatabase.Update je proveden zápis do databáze

K smazání věty může být použito metody PmDatabase.Delete. K vyhledávání věty v tabulce lze použít metody PmDatabase.FindFirst,... (tyto metody nejsou funkční, pokud je nastaven konfigurátor Technologie 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 PmDatabase.BeginTrans. Od tohoto okamžiku jsou hlídány všechny operace modifikující danou databázi a tabulku. Teprve po zavolání metody PmDatabase.Commit jsou všechny změny, provedené od předchozího volání metody PmDatabase.BeginTrans, zplatněny. Pokud k vyvolání metody PmDatabase.Commit nedojde (např. z důvodu ukončení běžící aplikace, výpadku napětí - reset nebo zavolání metody PmDatabase.Close), všechny změny provedené po předchozím PmDatabase.BeginTrans nebudou provedeny. Při transakčním zpracování lze také využít metodu PmDatabase.RollBack. Tato metoda vrací veškeré modifikace tabulky do stavu při předchozím volání metody PmDatabase.BeginTrans. Pokud je tedy volána metoda pro transakční zpracování PmDatabase.BeginTrans, následně budou prováděny libovolné modifikace (byly by zplatněny až po zavolání metody PmDatabase.Commit) a zavolá se metoda PmDatabase.RollBack, k žádné modifikaci tabulky databáze 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 MySql, atd.

 
Pro hromadné zpracování tabulek se používájí metody PmDatabase.Execute a PmDatabase.ExecuteSQL.

K zjištění informací o struktuře tabulky lze využít metod PmDatabase.GetFieldCount a PmDatabase.GetFieldInfo.

3. Zavření tabulky v databázi a odpojení databáze

Tabulku v databázi lze zavřít voláním metody PmDatabase.CloseTable, v tomto 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 PmDatabase.Close.

Lze také využít 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 PmDatabase lze pracovat také následujícím způsobem:
- vyplnit konfigurátory záložky Databáze.
- otevřít specifikovanou tabulku (konfigurátorem 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 PmDatabase.OpenSQL (podle toho, zda je zatržen konfigurátor Při otevření tabulky použít SQL příkaz SELECT) 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 je vhodné místo metody PmDatabase.Close používat metodu PmDatabase.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 PmDatabase.Close.
© MICROSYS, spol. s r. o.Tavičská 845/21 703 00 Ostrava-Vítkovice