Objekt TableDef

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

Úvod

Objekt TableDef representuje uloženou definici struktury a další vlastnosti (jedné) tabulky relační databáze nebo tabulky propojené. S definicí tabulky se manipuluje právě pomocí objektu TableDef pomocí jeho metod a vlastností. Je například možno zkoumat datová pole a indexy tabulky, nastavovat ověřovací pravidla, přidávat a odstraňovat sloupce tabulky apod.

Všechny definice všech tabulek dané databáze (daného objektu třídy Database) jsou uloženy v kolekci TableDefs objektu Database. Naopak, např. definice tabulky VYDAJE je jako objekt třídy TableDef dostupná jako

db.TableDefs("VYDAJE")

kde db označuje objekt Database obsahující tabulku VYDAJE. Je-li tabulka VYDAJE obsažena v databázi uložené v souboru např. DOMACNOST.MDB, pak vytvoření instance objektu TableDef tabulky VYDAJE zajistí posloupnost příkazů

Dim db As Database, td As TableDef
Set db = DBEngine.OpenDatabase("C:\KURS\DOMACNOST.MDB")
Set td = db.TableDefs("VYDAJE")

Použití objektu TableDef 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.).

Kolekce objektu TableDef

Fields

Nejpodstatnější část objektu TableDef je kolekce popisů všech datových polí tabulky (objektů třídy Field). Objekt Field je popsán v samostatné kapitole zde.

Má-li dle příkladu v kapitole Úvod tabulka VYDAJE datové pole CENA, pak vytvoření instance objektu Field pole CENA zajistí příkaz

Dim fl As Field
Set fl = td.Fields("CENA")

kde td je identifikátor objektu TableDef z příkladu v kapitole Úvod. Naopak přidání dalšího objektu Field (a tedy vytvoření dalšího sloupce dané tabulky) zajistí metoda Append kolekce Fields.

Indexes

Kolekce Indexes obsahuje všechny objekty třídy Index vytvořené pro dnou tabulku relační databáze. Je použitelná pouze v databázích spravovaných Microsoft Jet. Indexy jsou do kolekce zařazovány s klíčem, kterým je jejich jméno (Name).

Při zpracování dat tabulky (pomocí objektu Recordset) umožňuje objekt Index specifikovat pořadí záznamů. Stačí do vlastnosti Index objektu Recordset přiřadit jméno (Name) indexu z kolekce Indexes.

Nový index (přesněji nový objekt třídy Index) přidá do kolekce Indexes její metoda Append. Její metoda Delete naopak umožní index z kolekce vymazat.

Při přidávání indexu do kolekce je zapotřebí dbát na soulad mezi atributy nového indexu a dat v tabulce. Jestliže např. index je nastavený jako jedinečný (unique) a tabulka obsahuje v indexových polích duplicitní položky, pak Microsoft Jet vyvolán při pokusu o zařazení takového indexu do kolekce zachytitelnou chybu.

Properties

Kolekce Properties (vlastnosti) obsahuje všechny uživatelem definované vlastnosti (tedy nikoliv vlastnosti dané TableDef jako objektu!). Tyto vlastnosti jsou využívané aplikacemi (např. program Access), nikoliv databázovým strojem. Proto je podrobnější popis práce s uživatelskými vlastnostmi a jejich kolekcí podán v kapitole "Access".

Metody objektu TableDef

CreateField

Metoda je funkcí, která odevzdá nově vytvořený objekt třídy Field (datové pole) s danými vlastnostmi: jméno (name), typ (type) případně velikost (size).

Syntaxe je následující:

tbdf.CreateField (name, type, size)

kde značí:

Metoda se používá pro vytvoření nového objektu třídy Field, který se např. posléze přidá do kolekce Fields objektu TableDef (a tím se "přidá sloupec do tabulky"). Pokud se neuvedou parametry metody CreateField, je nutno vlastnosti adekvátně nastavit před přidáním do kolekce.

Pro zařazení pole do kolekce se použije metoda Append kolekce Fields, pro vypuštění její metoda Delete. Vypustit však lze jen takové pole, které není součástí žádného indexu.

CreateIndex

Metoda je funkcí, která odevzdá nově vytvořený objekt třídy Index s daným jménem (name).

Syntaxe je následující:

tbdf.CreateIndex (name)

kde značí:

Metoda se používá pro vytvoření nového objektu třídy Index, který se např. posléze přidá do kolekce Indexes objektu TableDef. Pokud se neuvede parametr metody CreateIndex, je nutno vlastnost Name spolu s dalšími vlastnostmi adekvátně nastavit před přidáním do kolekce.

Pro zařazení indexu do kolekce se použije metoda Append kolekce Indexes, pro vypuštění její metoda Delete.

CreateProperty

Metoda je funkcí, která odevzdá nově vytvořený objekt třídy Property (vlastnost, v tomto případě definovaná uživatelem, nikoliv jako vlastnost objektu třídy TableDef!) s danými vlastnostmi: jméno (name), typ (type), hodnota (value) případně indikace, zda vlastností je DDL objekt (data definition language).

Syntaxe je následující:

tbdf.CreateProperty (name, type, value, DDL)

kde značí:

Metoda se používá pro vytvoření nového objektu třídy Property, který se např. posléze přidá do kolekce Properties objektu TableDef. Všechny parametry jsou nepovinné. Pokud se neuvedou parametry metody CreateProperty, je nutno vlastnosti adekvátně nastavit před přidáním do kolekce.

Pro zařazení vlastnosti do kolekce se použije metoda Append kolekce Properties, pro vypuštění její metoda Delete.

Vlastnosti objektu TableDef

ValidationRule, ValidationText

Vlastnosti jsou využity mechanismem kontroly dat. Ověřovací pravidlo (Validation Rule) je hodnota typu String obsahující text, který při vyhodnocení nad aktuálním záznamem (řádkem) tabulky relační databáze musí být platným logickým výrazem (např. "NAKOUPENO='Chleba' and CENA<15") - tedy výrazem, který po vyhodnocení odevzdá hodnotu Ano (True) nebo Ne (False). Ověřovací text (Validation Text) je hodnota typu String ve smyslu nějakého hlášení výstižně popisující chybu.

ValidationRule jako vlastnost objektu TableDef může ve výraze obsahovat odkazy na jakákoliv datové pole tabulky. Nesmí obsahovat uživatelské funkce ani agregační funkce SQL. Navíc: desetinné číselné konstanty musí být vždy zapsány s desetinnou tečkou a datumové konstanty v americkém formátu, bez ohledu na národní prostředí nastavené systémem.

Výraz se vyhodnocuje v okamžiku změny hodnoty pole (Edit) nebo při přidávání nových hodnot (AddNew). Jestliže po vyhodnocení výrazu, který je obsahem ValidationRule, je hodnota Ano, aplikace pokračuje "normálně" dál.

Jestliže však je to hodnota Ne, dojde k zachytitelné chybě. V tom případě je do kolekce DBEngine.Errors zařazen nový objekt třídy Error. V jeho poli Description (popis chyby) je buď hodnota přiřazená do ValidationText, nebo - nebyl-li ValidationText zadán - text výrazu přiřazeného do ValidationRule.

 

 

Orig. 4 / 1999

Rev. 07 / 2002