Objekt DBEngine

Doc. Dr. Vladimír Homola, Ph.D.

Úvod

Použití objektu DBEngine je podmíněno dostupností knihovny DLL, ve které je definován. V prostředí Visual Basic se tak učiní pomocí menu položky References... - ta je umístěna v hlavním menu Project v případě samostatného překladače Basicu, nebo v hlavním menu Tools v případě volání Visual Basicu z aplikace (Excelu, Accessu, Wordu atd.). Z nabídek knihoven se volí ta, která začíná DAO. Připojená čísla označují verzi, volí se podle potřeby (většinou ta nejvyšší). Verze znamenají "stupeň vývoje" struktury databáze Microsoftu (MDB): např. program Access dodávaný s Office 97 používá DAO350.DLL, Access dodávaný s Office 2000 používá DAO360.DLL.

Tyto knihovny obsahují DAO příslušné verze objektových modelů. DAO (Data Access Objects - objekty pro přístup k datům) je množina objektů, které umožňují klientům automatizace OLE programově přistupovat k datům a modifikovat zdroje dat. Jsou použity v programech Access, Visual Basic - obecně ve všech aplikacích, které zpracovávají data uložená jako Microsoft Jet databáze. Dále je možno zpracovávat všechny formáty, které Microsoft Jet podporují (jako např. zdroje dat v ODBC včetně SQL serveru, FoxPro, Paradoxu aj.).

Objekt DBEngine (doslova přeloženo Databázový stroj) je objektem nejvyšší úrovně v databázovém objektovém modelu DAO. Obsahuje a řídí všechny ostatní objekty v hierarchii objektů DAO. Je jen jeden, inicializuje se při prvním použití z knihovny např. DAO360.DLL. Nelze vytvořit další instance tohoto objektu, objekt DBEngine není prvkem žádné kolekce.

Tento článek popisuje pouze základní, nejčastěji používané komponenty objektu DBEngine.

Kolekce objektu DBEngine

Errors

Při kterékoliv operaci v databázovém prostředí může vzniknout jedna nebo více chyb. Proto objekt DBEngine obsahuje kolekci Errors. Při vzniku chyby je kolekce zařazeno tolik objektů třídy Error, kolik chyb vzniklo. Aplikace pak může všechny chyby rozebrat a patřičně na ně reagovat.

Objekt Error obsahuje vlastnosti potřebné pro identifikaci chyby a její popis: Number (číslo chyby), Description (textový popis) a Source (jméno aplikace, která chybu generovala).

Protože tento článek slouží především k prvnímu seznámení pro vývoj prvních a tedy jednoduchých aplikací, nepopisuje dále objekt Error.

Workspaces

Objekt DBEngine obsahuje kolekci Workspaces "pracovních prostorů", tj. objektů třídy Workspace. Pomocí pracovního prostoru se zajišťuje jednak zabezpečení dat (vlastnosti Name a UserName), jednak se určuje, zda jsou data zpracovávána pomocí Jet Engine nebo ODBCDirect.

V mnoha případech - a v jednodušších aplikacích vždy - je zapotřebí jen jeden pracovní prostor. Proto DBEngine při prvním použití v aplikaci vytvoří standardní (implicitní, default) pracovní prostor, ve kterém - pokud není řečeno jinak - se vše odehrává. Tento standardní pracovní prostor je prvním prvkem kolekce, je tedy dostupný zápisem

DBEngine.Workspaces(0)

Vlastnosti Name a UserName tohoto pracovního prostoru jsou po řadě "#Default Workspace#" a "Admin". Je-li povoleno zabezpečení (Security), je UserName nastaveno na jméno toho uživatele, který je přihlášen a který aplikaci spustil.

Protože tento článek slouží především k prvnímu seznámení pro vývoj prvních a tedy jednoduchých aplikací zpracovávajících relační databáze strojem Microsoft Jet, nepopisuje dále objekt Workspace.

Properties

Jako každý objekt DAO obsahuje i DBEngine kolekci vlastností Properties, která je plně k disposici uživateli resp. zpracovávajícím aplikacím (např. programu Access). Kolekce obsahuje žádný, jeden nebo více objektů třídy Property (Vlastnost). Objekt Property má vlastnosti: Name (jedinečné jméno vlastnosti), Type (typ vlastnosti daný číselným kódem) a Value (Variant obsahující vlastní hodnotu vlastnosti).

Je na místě upozornit na rozdíl mezi kolekcí Properties (přeloženo: Vlastnosti) objektu a vlastními Vlastnostmi (v originále: Properties) objektu!

Protože tento článek slouží především k prvnímu seznámení pro vývoj prvních a tedy jednoduchých aplikací zpracovávajících relační databáze strojem Microsoft Jet, nepopisuje dále objekt Property kolekce Properties objektu DBEngine. Objekt Property a kolekce Properties je však popsána v kapitole Aplikace Accessu.

Metody objektu DBEngine

CreateWorkspace

Metodou je funkce, která odevzdá nově vytvořený pracovní prostor podle parametrů (avšak sama ho do kolekce pracovních prostorů Workspaces nepřidá!). Syntaxe je následující:

CreateWorkspace(name, user, password, type)

Parametry značí:

Příklad včetně přidání do kolekce Workspaces:

Dim wrkODBC As Workspace, wrkJet As Workspace
Set wrkODBC = CreateWorkspace("ODBCWorkspace", "admin",  "", dbUseODBC)
Set wrkJet = CreateWorkspace("", "admin", "")
Workspaces.Append wrkODBC
Workspaces.Append wrkJet

Pro odstranění objektu Worskpace z kolekce Workspaces je zapotřebí nejprve v něm uzavřít otevřená spojení a databáze, a pak použít metodu Close daného objektu Workspace.

Blíže se prací s objektem Workspace článek nezabývá, jak je vysvětleno v popisu kolekce Workspaces. I při nepoužití metody CreateWorkspace je totiž vytvořen implicitní pracovní prostor s indexem 0, ve kterém se pak zpracování dat odehrává bez explicitní reference na něj.

CreateDatabase

Lze použít pouze v pracovních prostorech pod řízením Microsoft Jet. Vytvoří nový objekt třídy Database, uloží ho na disk jako soubor a vrací otevřenou databázi (tj. pro další zpracování se už nemusí otevírat). Nově vytvořená databáze (přesněji objekt třídy Database) je prázdná, proto je nutno nejprve nadefinovat strukturu jejich dat a naplnit ji daty. Pokud je pak zapotřebí vytvořit částečnou nebo úplnou kopii existující databáze, lze použít metodu CompactDatabase.

Syntaxe je následující:

wks.CreateDatabase (name, loc, options)

Značí přitom:

Příklad:

Dim db As Database
Set db = DBEngine.CreateDatabase("C:\KURS\POKUSY.MDB", dbLangCzech)
...
db.Close

OpenDatabase

Funkce otevře existující databázi uloženou ve specifikovaném souboru a vrací nově vytvořený objekt třídy Database, který databázi reprezentuje.

Syntaxe je následující:

wks.OpenDatabase (name, opt-excl, read-only, connect)

Značí přitom:

Příklad:

Dim db As Database
Set db = DBEngine.OpenDatabase("C:\KURS\POKUSY.MDB")
...
db.Close

CompactDatabase

Lze použít pouze v pracovních prostorech pod řízením Microsoft Jet. Kopíruje a přitom komprimuje existující zavřenou databázi, umožňuje rovněž změnit v nově vytvářené databázi verzi, národní řazení a zakódování.

Syntaxe je následující:

DBEngine.CompactDatabase olddb, newdb, loc, options, password

Značí přitom:

Hlavním účelem této metody je poskytnutí nástroje pro defragmentaci databáze. Tak, jak se s databází pracuje a mění se její data, dochází k fragmentaci databáze (nejen jako souboru, což je dáno systémem souborů operačního systému, ale k fragmentaci uvnitř souboru: např. řádky se vypouští pouze logicky, fyzické místo zůstává apod.). Proto je vhodné čas od času databázi komprimovat: vytvořit novou databázi se stejným datovým obsahem, ale již defragmentovanou. Při vzniku této nové databáze je možno požadovat i změnu jazykového nastavení, změnu hesla a případně databázi zakódovat nebo naopak odkódovat. Komprimovaná - defragmentovaná - databáze je potom menší (někdy výrazně) a často poskytuje rychlejší přístup k datům.

Komprimovaná databáze musí být zavřená, v případě víceuživatelského prostředí všemi uživateli. Jestliže databáze uvedená jako olddb neexistuje nebo není možno ji otevřít ve výhradním (exclusive) režimu, dojde k chybě. Nově vzniklá databáze newdb nemusí být na stejném disku nebo ve stejném adresáři jako olddb; na médiu, na kterém vznikne, však musí být dostatek místa. Po úspěšné komprimaci je možno olddb zrušit a newdb přejmenovat na původní olddb.

Nevýhodou této metody je, že nekonvertuje do nové databáze objekty vytvořené programem Access (nebo vytvořené pro program Access). Takové databáze je nutno komprimovat "ručně" spuštěným Accessem, nebo v objektu Access Application použít komprimační metodu objektu DoCmd.

Další metody

Pro úplnost uvádíme další metody, nyní již bez podrobnějšího popisu.

Transakcí se rozumí definovaná posloupnost činností nad databází. Databázovému stroji se oznámí začátek transakce voláním metody BeginTrans. Transakcí se pak rozumí všechny manipulace s databází až do jejího ukončení. Ukončení transakce provede buď volání metody CommitTrans (ukončí transakci a všechny změny řádně do databáze zapíše) nebo volání metody Rollback (ukončí transakci a vrátí ji přesně do stavu, v jakém byla v okamžiku jejího zahájení).

Metoda Idle dovolí databázovému stroji dokončit všechny úlohy, které běží na pozadí, vyprázdnit buffery aj. Čeká tak dlouho, až se případné změny v databázi skutečně provedou.

Pro databáze spravované pomocí ODBC je nejprve nutno vytvořit spojení se zdrojem dat voláním metody OpenConnection. Pro databáze spravované pomocí Microsoft Jet je možno nastavit některé interní parametry databázového stroje voláním metody SetOption (např. velikost bufferů, doby čekání při zpracování sdílených databází ap.).

Vlastnosti objektu DBEngine

Version

Vlastnost typu String, pouze pro čtení. Obsahuje informace o verzi ODBC. Pro Microsoft jet je ve tvaru "major.minor", tedy např. "3.0" apod.

Další vlastnosti

Pro úplnost uvádíme další vlastnosti, nyní již bez podrobnějšího popisu.

Vlastnosti DefaultPassword a DefaultUser se uplatní při použití implicitního Workspace. Vlastnost DefaultType se uplatní při vytváření Workspace bez uvedeného typu. Vlastnost IniPath obsahuje informaci o jménu sekce registrů Windows, kde jsou uloženy informace pro databázový stroj Microsoft Jet. Umožnit zpracování v uživatelských skupinách dovoluje databáze uživatelů, jejíž umístění obsahuje vlastnost SystemDB. Dobu čekání na připojení ODBC databáze, než nastane chyba, udržuje vlastnost LoginTimeout.

 

 

Orig. 4 / 1999

Rev. 07 / 2002