Objekt DBEngine
Doc. Dr. Vladimír Homola, Ph.D.
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.
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.
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.
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.
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čí:
name - hodnota typu String identifikující nový pracovní prostor.
user - hodnota typu String identifikující vlastníka nového pracovního prostoru.
password - hodnota typu String obsahující přihlašovací heslo uživatele.
type - nepovinný číselný kód indikující typ vytvářeného pracovního prostoru; konstanty dbUseJet (pro prostor pod řízením Microsoft Jet) nebo dbUseODBC (pro prostor pod řízením ODBCDirect). Není-li uveden, určí se typ podle typu zdroje dat.
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.
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:
wks - nepovinný objekt třídy Workspace (pracovní prostor), v němž se databáze vytváří, otevírá a zpracovává. Pokud není uveden, jedná se o standardní pracovní prostor, jak je uvedeno v popisu kolekce Workspaces.
name - hodnota typu String o max. 255 znacích se jménem databázového souboru, který se vytváří. Může to být i úplné označení souboru, jako např. "C:\KURS\POKUS.MDB". Neuvede-li se přípona, dosadí se .MDB. Pokud systém podporuje síť, může to být i síťová specifikace typu "\\servervsb\zam\novak\pokus.mdb".
loc - konstanta ve význaku kódu národního prostředí (to určuje způsob řazení textových údajů v databázi) a případné heslo. Pro češtinu je konstantou dbLangCzech. Má-li se současně uvést i heslo, má parametr tvar např. dbLangCzech & ";pwd=Mirka". Pokud se parametr neuvede, přebírá se implicitní národní prostředí.
options - volitelný kód dbEncrypt pro požadavek na vytvoření zakódované databáze.
Příklad:
Dim db As Database
Set db = DBEngine.CreateDatabase("C:\KURS\POKUSY.MDB",
dbLangCzech)
...
db.Close
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:
wks - nepovinný objekt třídy Workspace (pracovní prostor), v němž se databáze vytváří, otevírá a zpracovává. Pokud není uveden, jedná se o standardní pracovní prostor, jak je uvedeno v popisu kolekce Workspaces.
name - hodnota typu String o max. 255 znacích se jménem databázového souboru, který se otevírá. Může to být i úplné označení souboru, jako např. "C:\KURS\POKUS.MDB". Neuvede-li se přípona, dosadí se .MDB. Pokud systém podporuje síť, může to být i síťová specifikace typu "\\servervsb\zam\novak\pokus.mdb".
opt-excl - volitelné parametry. Pro Microsoft Jet logická hodnota True (otevření ve výhradním režimu uživatele) nebo False (otevření ve sdíleném režimu).
read-only - volitelná logická hodnota. True pro indikaci, že soubor bude pouze čten, False pro indikaci, že soubor může být i měněn.
connect - volitelný parametr typu String. Může sestávat až ze dvou částí oddělených středníkem. První část je identifikace typu datového zdroje, např. "ODBC;", "Excel 5.0;" atd. Druhá část je případné heslo uvozené "pwd=". Celý řetěz může vypadat např. takto: "Excel 5.0; pwd=mirka".
Příklad:
Dim db As Database
Set db = DBEngine.OpenDatabase("C:\KURS\POKUSY.MDB")
...
db.Close
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:
olddb - hodnota typu String o max. 255 znacích se jménem databázového souboru, který se kopíruje. Může to být i úplné označení souboru, jako např. "C:\KURS\POKUS.MDB". Neuvede-li se přípona, dosadí se .MDB. Pokud systém podporuje síť, může to být i síťová specifikace typu "\\servervsb\zam\novak\pokus.mdb". Soubor musí existovat a musí být zavřený
newdb - hodnota typu String o max. 255 znacích se jménem databázového souboru, který je vytvářen. Platí stejná pravidla jako pro olddb, newdb a olddb však musí být různé souboru.
loc - konstanta ve význaku kódu národního prostředí (to určuje způsob řazení textových údajů v databázi) a případné heslo. Pro češtinu je konstantou dbLangCzech. Má-li se současně uvést i heslo, má parametr tvar např. dbLangCzech & ";pwd=Mirka". Pokud se parametr neuvede, přebírá se implicitní národní prostředí.
options - volitelný kód dbEncrypt pro požadavek na vytvoření zakódované databáze.
password - volitelný parametr typu String. Obsahuje heslo předcházené ";pwd=", např. ";pwd=mirka". Pokud je heslo uvedenu už v parametru loc, parametr password se ignoruje.
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.
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.).
Vlastnost typu String, pouze pro čtení. Obsahuje informace o verzi ODBC. Pro Microsoft jet je ve tvaru "major.minor", tedy např. "3.0" apod.
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