4.18.5.16. Metody a vlastnosti objektů


Oproti starším verzím programu Access, je ve verzi 2.0 značně rozšířena nabídka tříd objektů. Vazby mezi objekty jsou natolik rozsáhlé, že bude vhodné si je znázornit graficky, viz obr. 67. Pro možnost konverze ze starších verzí je možno použít i starší datové typy. Nejsou však doporučovány a je otázkou, zda jejich použití bude možné i v následující verzi programu. To se týká také některých metod a funkcí. Proto se jimi zde nezabýváme.

Základním principem práce s objekty je pochopení jejich struktury, viz obr. 67. Vidíme tu především, komu které objekty náleží. Obvykle vlastní objekt několik objektů. Proto jsou zařazeny do skupiny objektů (Collection). Objekty jsou ve skupině zařazeny podle abecedního řazení svých názvů (pokud nebyly rušeny apod.) nebo v pořadí jejich otevírání. Na objekty skupiny je možno se odkazovat pořadím ve skupině, počítaným od nuly, např.:

database.Recordsets(6) - je odkaz na sedmý objekt třídy Recordset v databázi.



Skupiny objektů

Každá skupina objektů je rovněž chápána jako objekt, proto má definované metody a vlastnosti, které je možno použít. U některých skupin objektů je však množina metod a vlastností poněkud omezena. Celkově existují metody :

skupina.Refresh

opraví pozici objektů ve skupině podle abecedního pořadí jejich názvů (pod čísly 0,n-1). Používá se zejména po rušení objektů ve skupině.

skupina.Append objekt

přidá nový objekt (dané třídy) do skupiny pod číslem n. Obecně lze použít jen u nově vytvářených objektů. Pro rozšíření skupiny Databases nutno použít metody OpenDatabase, pro rozšíření skupiny Recordsets metody OpenRecordset.

skupina.Delete jméno

zruší objekt daného jména ze skupiny. Použitelná u skupin Fields a Indexes objektu třídy TableDef, pokud vlastnost Updatable má hodnotu True. U skupiny Properties je použitelná jen na vlastnosti definované (přidané) uživatelem. U skupin Workspaces, Databases a Recordsets je možno použít metody Close u konkrétního objektu skupiny k jeho zrušení.

Všechny skupiny objektů mají vlastnost, která vrací počet prvků ve skupině (nesmíme zapomenout, že prvky jsou číslovány od nuly: skupina.Count

Na obr. 67 si povšimněte především skupiny Properties, kterou vlastní objekty všech tříd, proto u nich tato skupina není uváděna. Obsahuje vlastnosti objektu, které již známe z práce s těmito objekty. Názvy vlastností jsou stejné, jako při ruční práci s objektem (Design), pouze u víceslovných názvů jsou vynechány mezery.

Dále jsou zajímavé skupiny Forms a Reports, které obsahují otevřené objekty příslušných tříd v pořadí, jak byly otevírány a umožňují tak jejich přímou adresaci přes název nebo pořadí objektu ve skupině. Všechny ostatní objekty jsou přístupné jen přes databázi, ve které byly vytvořeny.



Speciální objekty

Kromě objektů uvedených ve struktuře vazeb mezi nimi existuje několik speciálních objektů. Jsou to:

Debug

objekt slouží pro ladění programu. Vlastní jedinou metodu, která slouží pro výstup do okna Immediate Window : Debug.Print seznam hodnot

Screen

obrazovka Windows se čtyřmi vlastnostmi pro adresování aktuálních objektů.

Screen.ActiveControl

adresuje aktuální objekt (položku) a umožňuje s ním pracovat bez znalosti jeho jména.

Screen.ActiveForm

adresuje aktuální formulář.

Screen.ActiveReport

adresuje aktuální sestavu.

Screen.PreviousControl

adresuje objekt, který měl poslední Focus.

Application

vlastní aplikace (program MS-Access). Má tyto metody :

Application.Echo nastavení [, StatusBarText]

má stejný význam jako makropříkaz Echo.

Application.Quit [způsob]

má stejný význam jako makropříkaz Quit.

Application.GetOption (jméno)

vydá nastavení globálního parametru (Option) daného názvu. Název se zadává jako řetězec, tedy včetně mezer mezi slovy.

Application.SetOption jméno, hodnota

nastaví určený globální parametr. Ty parametry, které se určují volbou hodnoty z nabízeného seznamu, se v programu nastavují číselně. Číslo odpovídá pořadí hodnoty v seznamu, počítaje od nuly.

A následující vlastnosti :

Application.CurrentObjectName

vrací jméno aktuálního objektu.

Application.CurrentObjectType

vrací typ aktuálního objektu.

Application.MenuBar

nastavuje text na stavovém řádku (na dolním okraji okna)

Obr. 67. Vztahy mezi jednotlivými třídami objektů



Objekt DBEngine

Objekt DBEngine neboli Database Jet Engine je základní systémový objekt, který je nositelem všech ostatních objektů. Vlastní metody :

DBEngine.CompactDatabase stará, nová [, locate [, options]]

provádí zhuštění databáze jako stejnojmenná činnost menu programu.

DBEngine.RegisterDatabase jméno, ODBCdriver, spojení, vlastnosti

nastavuje vlastnosti ODBC spojení

DBEngine.RepairDatabase jméno

opraví porušenou databázi (jako činnost menu programu).

Set workspace = DBEngine.CreateWorkspace (jméno, uživatel, heslo)

vytvoří nový pracovní prostor pro uživatele zadaného jména a hesla.

DBEngine.Idle

přeruší zpracování DBEngine.

Vlastnosti jsou:

DBEngine.LoginTimeout

vrací čas přihlášení k ODBC v sekundách.

DBEngine.Version

vrací řetězec informující o verzi systému.



Objekt třídy Workspace

Neboli pracovní prostor, může obsahovat několik databází. Aktuální pracovní prostor (otevřený automaticky při spuštění programu) přiřadíme proměnné objektového typu Workspace:

Set workspace = DBEngine.Workspaces(0)

Metody jsou :

workspace.BeginTrans

začátek transakce.

workspace.CommitTrans

konec transakce, provedené operace platí.

workspace.Rollback

konec transakce, provedené operace neplatí.

Set database = workspace.OpenDatabase (jméno [, exclusive [, readonly [, zdroj]]])

připojí existující databázi do pracovního prostoru.

Set database = workspace.CreateDatabase (jméno, locate [, option ])

připojí novou databázi do pracovního prostoru.

Set group = workspace.CreateGroup (jméno [, PID ])

připojí novou skupinu uživatelů daného jména, PID je identifikátor skupiny dlouhý 4 , 20 znaků.

Set user = workspace.CreateUser (jméno [, PID [, heslo]])

připojí nového uživatele daného jména, PID je identifikátor skupiny dlouhý 4 , 20 znaků.

workspace.Close

uzavře pracovní prostor.

Vlastnosti jsou :

workspace.Name

jméno pracovního prostoru.

workspace.Password

heslo pro přístup do pracovního prostoru* .

workspace.UserName

jméno uživatele, který vytvořil pracovní prostor.

workspace.IsolateODBCTrans

nedokumentovaná vlastnost.



Objekt třídy Group

Metody :

Set user = group.CreateUser (jméno [, PID [, heslo]])

vytvoří nového uživatele do skupiny.

Vlastnosti :

group.Name

jméno skupiny uživatelů.

group.PID

identifikační číslo skupiny*.



Objekt třídy User

Metody :

Set group = user.CreateGroup (jméno [, PID])

vytvoří novou skupinu uživatelů.

Vlastnosti :

group.Name

jméno uživatele.

group.PID

identifikační číslo uživatele*.

group.Password

heslo uživatele*.



Objekt třídy Database

Aktuální databázi připojíme k objektu třídy databáze příkazem :

Set database = DBEngine.Workspaces(0).Databases(0)

Metody jsou :

Set property = database.CreateProperty ([jméno [, typ [, hodnota]]])

vytvoří uživatelskou vlastnost databáze (je možno ji následně zrušit).

Set querydef = database.CreateQueryDef ([jméno [, SQL příkaz]])

vytvoří definici nového dotazu.

Set relation = database.CreateRelation ([jméno [, tab. primární [, tab. sekundární [, atributy]]]])

vytvoří novou relaci mezi tabulkami.

Set tabledef = database.CreateTableDef ([jméno [, atributy [, zdroj [, spojení]]]])

vytvoří definici nové tabulky.

Set recordset = database.OpenRecordset ([zdroj [, typ [, vlastnosti]]])

otevře objekt Recordset a naplní ho záznamy ze zdroje. Typ lze zadat konstantou :

DB_OPEN_TABLE

objekt se chová jako tabulka (lze použít Index a Seek),

DB_OPEN_DYNASET

objekt dovoluje měnit hodnoty záznamů (lze použít metody pro vyhledávání záznamu Find* a nastavení záznamu Move*),

DB_OPEN_SNAPSHOT

objekt nedovoluje měnit hodnoty (lze použít jen metody pro nastavení záznamu Move*).

database.Execute (SQL příkaz [, nastavení])

provede se SQL příkaz.

database.Close

provede se uzavření databáze. Uzavření aktuální databáze neznamená její odpojení.

Nové objekty třídy Form a Report se vytvářejí speciálními funkcemi, které byly popsány samostatně.

Vlastnosti jsou :

database.CollatingOrder

definuje způsob třídění používaný v databázi, nejlépe pomocí konstanty.

database.Connect

informuje o zdroji databáze (dBase III, FoxPro, ...).

database.Name

jméno databáze včetně celé cesty k databázi.

database.QueryTimeout

počet sekund na provedení dotazu z ODBC databáze.

database.Transactions

indikuje, zda je možno používat transakce.

database.Updatable

indikuje, zda databáze může být měněna.

database.Version

řetězec informující o verzi databáze.

database.AccessVersion

nedokumentovaná vlastnost, číslo verze databáze.



Objekt třídy Container

Tyto objekty obsahují informace o objektech databáze. Implicitně existují v každé databázi objekty Container, označené následujícími jmény a pořadím ve skupině Containers :

Databases

0

Forms

1

Modules

2

Relationships

3

Reports

4

Scripts

5

(obsahuje seznam maker)

SysRel

6

(informace o prostředí a okně relací)

Tables

7

V objektech Document jsou uvedeny základní informace vždy o všech existujících objektech dané třídy. Na rozdíl od skupiny Forms, která obsahuje otevřené formuláře, v Containeru Forms jsou uvedeny informace o všech existujících formulářích (ale ne tyto formuláře fyzicky).

Vlastnosti (objekty této třídy nemají metody) :

container.Name

jméno objektu ("Databases", "Modules", ...).

container.Owner

řetězec s názvem autora objektu.

container.Permissions

obsahuje přístupová práva uživatele k objektu.

container.UserName

jméno uživatele nebo skupiny, která má právo manipulovat s objektem.

container.Inherit

nedokumentovaná vlastnost.



Objekt třídy Document

Vlastnosti (objekty této třídy nemají metody) :

document.Container

název objektu Container, ke kterému Document patří.

document.DateCreated

datum a čas vytvoření objektu.

document.LastUpdated

datum a čas poslední změny objektu.

document.Name

jméno objektu, pod kterým je uveden v seznamu objektů.

document.Owner

řetězec s názvem autora objektu.

document.Permissions

obsahuje přístupová práva uživatele k objektu.

document.UserName

jméno uživatele nebo skupiny, která má právo manipulovat s objektem.



Objekt třídy TableDef

Tento objekt slouží k definici struktury nové tabulky a jejímu následnému vytvoření.

Metody:

Set field = tabledef.CreateField ([ jméno [, typ [, velikost]]])

vytvoří novou položku tabulky.

Set index = tabledef.CreateIndex ([ jméno ])

vytvoří nový klíč (index) tabulky.

Set property = tabledef.CreateProperty ([ jméno [, typ [, hodnota]]])

vytvoří novou vlastnost tabulky.

Set recordset = tabledef.OpenRecordset ([ typ [, vlastnosti]])

otevře objekt Recordset.

tabledef.RefreshLink

aktualizuje data v tabulce připojené přes ODBC.

Vlastnosti :

tabledef.Attributes

indikuje základní vlastnosti (struktura je popsána v nápovědě).

tabledef.Connect

dává informaci o zdrojovém objektu.

tabledef.DateCreated

datum a čas vytvoření objektu.

tabledef.LastUpdated

datum a čas poslední změny objektu.

tabledef.Name

jméno tabulky.

tabledef.RecordCount

počet záznamů v tabulce.

tabledef.SourceTableName

jméno zdrojové tabulky.

tabledef.Updatable

indikuje možnost změn dat v tabulce (True, False).

tabledef.ValidationRule

test správného zadání dat do záznamu tabulky.

tabledef.ValidationText

hlášení o nesplnění zadané kontroly správnosti dat.



Objekt třídy QueryDef

Tento objekt slouží k definici nového dotazu a jeho následnému vytvoření.

Metody:

Set property = querydef.CreateProperty ([ jméno [, typ [, hodnota]]])

vytvoří novou vlastnost dotazu.

Set recordset = querydef.OpenRecordset ([ typ [, vlastnosti]])

otevře objekt Recordset.

querydef.Execute

vytvoří dotaz podle jeho definice.

querydef.Close

uzavře objekt pro definici dotazu.

Vlastnosti :

querydef.Connect

informuje o spojení na zdrojový objekt dotazu.

querydef.DateCreated

datum a čas vytvoření objektu.

querydef.LastUpdated

datum a čas poslední změny objektu.

querydef.Name

jméno dotazu.

querydef.ODBCTimeout

nastavuje čas v sekundách na provedení dotazu přes ODBC.

querydef.ReturnsRecords

indikuje, zda dotaz vrací záznamy.

querydef.SQL

obsahuje SQL příkaz pro definici dotazu.

querydef.Type

obsahuje typ dotazu (Select, Append, ..., zadaný konstantou).

querydef.Updatable

indikuje možnost změn dat ve výsledku dotazu (True, False).



Objekt třídy Recordset

Objekt třídy Recordset obsahuje záznamy pocházející z tabulky nebo dotazu typu Select. Umožňuje tři režimy zadávané při jeho vytvoření pomocí konstant :

DB_OPEN_TABLE - Table - objekt se chová jako tabulka (lze použít Index a Seek),

DB_OPEN_DYNASET - Dynaset - objekt dovoluje měnit hodnoty záznamů (lze použít metody pro vyhledávání záznamu Find* a nastavení záznamu Move*),

DB_OPEN_SNAPSHOT - Snapshot - objekt nedovoluje měnit hodnoty (lze použít jen metody pro nastavení záznamu Move*), nelze použít metod AddNew a Update.

Metody :

Set novýrecordset = recordset.Clone ()

vytvoří kopii existujícího objektu.

recordset.Close

uzavře aktivní objekt.

recordset.AddNew

vloží nový záznam do objektu Table nebo Dynaset.

recordset.Delete

zruší aktuální záznam v objektu Table nebo Dynaset.

recordset.Edit

přesune záznam do bufferu k editaci v objektu Table nebo Dynaset.

recordset.Update

uloží zeditovaný záznam v objektu Table nebo Dynaset.

recordset.FillCache [řádky [, start]]

naplní vyrovnávací pamě pro data ze zdroje ODBC.

recordset.FindFirst kritérium

najde první záznam vyhovující kritériu (jen pro Dynaset).

recordset.FindNext kritérium

najde následující záznam vyhovující kritériu.

recordset.FindLast kritérium

najde poslední záznam vyhovující kritériu.

recordset.FindPrevious kritérium

najde předcházející záznam vyhovující kritériu.

recordset.Move [řádky [, start]]

změní polohu aktuálního záznamu.

recordset.MoveFirst

nastaví první záznam.

recordset.MoveNext

nastaví následující záznam.

recordset.MoveLast

nastaví poslední záznam.

recordset.MovePrevious

nastaví předcházející záznam.

recordset.Index jméno klíče

nastaví vyhledávání podle určeného klíče (jen pro Table).

recordset.Seek znak porovnání, klíč1, klíč2, ...

vyhledání podle určeného klíče (jen pro Table).

Set recordset = recordset.OpenRecordset ([ typ [, vlastnosti]])

otevře objekt Recordset.

recordset.Requery

aktualizuje data v objektu.

Vlastnosti:

recordset.BOF

indikuje, že ukazovátko záznamů je před prvním záznamem.

recordset.BookMark

definice zarážky pro rychlý návrat na určený záznam.

recordset.Bookmarkable

indikuje, zda lze použít zarážku pro rychlý návrat.

recordset.CacheSize

počet záznamů, které budou ve vyrovnávací paměti u zdroje ODBC.

recordset.CacheStart

začátek bloku záznamů pro vyrovnávací pamě u zdroje ODBC.

recordset.EOF

indikuje, že ukazovátko záznamů je za posledním záznamem.

recordset.Filter = filtr

nastaví filtr záznamů (nelze použít u Table).

recordset.LastModified

obsahuje zarážku označující poslední editovaný záznam (ne pro Snapshot).

recordset.LockEdits

indikuje uzamčení záznamů (ne pro Snapshot).

recordset.Name

jméno objektu.

recordset.NoMatch

informuje o tom, že metoda Find* nebo Seek nenalezla žádný záznam.

recordset.PercentPosition

nastavuje pozici záznamu v seznamu v % z počtu záznamů

recordset.RecordCount

počet záznamů v objektu.

recordset.Restartable

indikuje, zda je použitelná metoda Requery.

recordset.Sort

způsob řazení záznamů, např. recordset.Sort = "[Jméno] Asc" (ne pro Table).

recordset.Transactions

indikuje, zda je možno používat transakce (ne pro Snapshot).

recordset.Type

indikuje typ objektu.

recordset.Updatable

indikuje možnost změn dat v tabulce (True, False).

recordset.ValidationRule

test správného zadání dat do záznamu tabulky.

recordset.ValidationText

hlášení o nesplnění zadané kontroly správnosti dat.

recordset.DateCreated

datum vytvoření objektu (jen pro Table).

recordset.LastUpdated

datum poslední změny definice objektu (jen pro Table).

recordset.EditMode

nedokumentovaná vlastnost, druh editace (ne pro Snapshot).

recordset.AbsolutePosition

nedokumentovaná vlastnost, pozice aktuálního záznamu (ne pro Table).



Objekt třídy Relation

Objekt obsahuje informace o relaci mezi tabulkami databáze. Vlastní metodu :

Set field = relation.CreateField ([ jméno [, typ [, velikost]]])

vytvoří novou položku ve vazbě.

Vlastnosti :

relation.Attributes

indikuje základní vlastnosti (struktura je popsána v nápovědě).

relation.Table

jméno primární (nadřízené) tabulky.

relation.ForeignTable

jméno sekundární (podřízené) tabulky.

relation.Name

jméno relace.



Objekt třídy Index

Set field = index.CreateField ([ jméno [, typ [, velikost]]])

vytvoří novou položku v klíči.

Set property = index.CreateProperty ([ jméno [, typ [, hodnota]]])

vytvoří novou vlastnost klíče.

Vlastnosti:

index.Clustered

indikuje, zda je klíč fyzickým klíčem (tabulka je podle něj fyzicky setříděna). Takový klíč může být u každé tabulky nejvýše jeden.

index.Foreign

indikuje, zda klíč slouží pro zajištění vazby s jinou tabulkou.

index.IgnoreNulls

indikuje, zda položky hodnoty Null budou ignorovány nebo zařazeny do souboru.

index.Name

jméno klíče, pod tímto jménem se nastavuje do metody Index pro metodu Seek.

index.Primary

indikuje, zda klíč je primární.

index.Required

indikuje, zda jsou povoleny hodnoty Null.

index.Unique

indikuje, zda hodnoty v indexsekvenčním souboru budou unikátní nebo ne.

index.DistinctCount

nedokumentovaná vlastnost.



Objekt třídy Parameter

Objekt třídy Parameter obsahuje podmínku použitou v dotazu. Má pouze následující vlastnosti :

parameter.Name

jméno parametru (je použito jako hlášení při požadavku na zadání parametru).

parameter.Value

hodnota parametru.

parameter.Type

datový typ parametru.



Objekt třídy Field

Tento objekt obsahuje konkrétní položku záznamu. Vlastní metody :

field.AppendChunk zdroj

naplní ze zdroje položku Memo nebo OLE.

field.GetChunk

vrátí obsah Memo nebo OLE objektu..

field.FieldSize

vrátí velikost položky v Byte.

Set property = field.CreateProperty ([ jméno [, typ [, hodnota]]])

vytvoří novou vlastnost položky.

Vlastnosti se liší podle toho, kterému objektu položka náleží. Např. u položky vazby (Relationship) jsou přístupné jen vlastnosti Attributes, Name, ForeignTable a Table):

field.AlowZeroLength

indikuje, zda textový řetězec může mít nulovou délku.

field.Attributes

vlastnosti položky, viz nápověda.

field.CollatingOrder

způsob třídění, nastavení pomocí předdefinovaných konstant.

field.DataUpdatable

indikuje, zda lze měnit data v položce.

field.DefaultValue

implicitní hodnota položky v novém záznamu.

field.ForeignName

ve vazbě (Relationship) obsahuje jméno podřízené tabulky (ne pro QueryDef a Recordset).

field.Name

jméno položky.

field.OrdinalPosition

specifikuje pozici položky v seznamu položek.

field.Required

indikuje, zda jsou zakázány hodnoty Null.

field.Size

indikuje maximální velikost, kterou může položka zabírat.

field.SourceField

název zdrojové položky objektu (ne pro TableDef a Index).

field.SourceTable

název zdrojové tabulky objektu (ne pro TableDef a Index).

field.Type

obsahuje datový typ položky.

field.ValidateOnSet

indikuje, zda při vložení hodnoty bude provedena kontrola správnosti dat.

field.ValidationRule

test správného zadání dat do položky.

field.ValidationText

hlášení o nesplnění zadané kontroly správnosti dat.

field.Value

hodnota obsahu položky (jen pro Recordset, kde pracujeme skutečně s položkami a ne jen s definicí vlastností položek).



Objekt třídy Property

U vlastností objektů je možno použít tyto vlastnosti :

property.Name

jméno vlastnosti (stejné jako při ručním zadávání, ale bez mezer mezi slovy).

property.Value

hodnota vlastnosti. (U některých objektů jsou některé vlastnosti nepřístupné. To znamená, že u vlastnosti lze vypsat její Name, Type, Inherited, ale nikoliv hodnotu. Pokus o výpis hodnoty skončí chybovým hlášením.)

property.Type

datový typ vlastnosti.

property.Inherited

indikuje, že vlastnost byla převzata z definičního objektu.



Objekt třídy Form, Report, Control

Objekty tříd Form, Report a Control jsou přístupné jen v případě otevření příslušného formuláře nebo sestavy. Protože práce s nimi je velmi častá, rozdělíme ji do několika částí.



Manipulace s položkami objektu

Je sice možno pracovat s položkami adresovanými přes seznam otevřených formulářů (sestav), ale výhodnější je připojit formulář přes objektovou proměnnou třídy Form. Tím dojde k propojení proměnné na data formuláře, tedy nevznikne nový formulář. Máme tři možnosti pro připojení formuláře (sestavy):

Set form = Forms![jméno formuláře]

Set form = Forms(proměnná obsahující jméno formuláře)

Set form = Forms(výraz udávající pořadí formuláře ve skupině formulářů)

Hodnotu konkrétní položky aktuálního záznamu můžeme obdobně získat třemi způsoby :

form![jméno položky]

form(proměnná obsahující jméno položky)

form(výraz udávající pořadí objektu ve formuláři)

Třetí způsob využívá skutečnosti, že všechny objekty, bez ohledu na umístění v oblasti, jsou očíslovány v pořadí svého vložení do fomuláře, a to od nuly. Počet objektů ve formuláři (sestavě) udává:

form.Count

Pozorně si povšimněte způsobu oddělení objektu a jeho parametru nebo vlastnosti. Objevuje se tu tečka a vykřičník. Zjednodušeně lze konstatovat, že vykřičník se používá pro odkaz na objekt vytvořený uživatelem (položku formuláře apod.), tečka pro odkaz na metodu nebo vlastnost objektu, systémový objekt apod.



Manipulace s vlastnostmi objektu

Se všemi vlastnostmi všech tříd objektů je možno pracovat v programu. Můžeme se dotazovat na jejich hodnoty i nastavovat je. Pokud má název vlastnosti více slov, píšeme je dohromady bez mezer. Názvy vlastností se nikdy nepíší do hranatých závorek, jak je tomu u víceslovných názvů objektů. Odkazy na vlastnosti položek činíme následujícím způsobem :

Forms![jméno formuláře]![jméno položky].názevvlastnosti

form![jméno položky].názevvlastnosti

form![jméno položky].Properties(pořadí vlastnosti)

Odkazy na globální vlastnosti objektů činíme :

Forms![jméno formuláře].názevvlastnosti

form.názevvlastnosti

form.Properties(pořadí vlastnosti)

Specialitou je odkaz na položku podformuláře, provádí se následovně:

Forms![jméno formuláře]![jméno objektu s podformulářem].Form![jméno položky podformuláře]

Pokud má objekt více oblastí (Section), odkazujeme se na vlastnosti jednotlivých oblastí např. :

Forms![jméno formuláře].Section(n).názevvlastnosti,

Číslo oblasti

název oblasti

0

detail - prostor jednoho záznamu

1

záhlaví celého objektu

2

úpatí celého objektu

3

záhlaví stránky objektu

4

úpatí stránky objektu

5

záhlaví skupiny první úrovně členění

6

úpatí skupiny první úrovně členění

7

záhlaví skupiny druhé úrovně členění

8

úpatí skupiny druhé úrovně členění

Pokud chceme zjistit, ve které oblasti leží konkrétní objekt formuláře nebo sestavy, zjistíme její číslo pomocí vlastnosti :

Forms![jméno formuláře].[jméno položky].Section

Z řady vlastností formulářů a sestav je dobré znát zejména vlastnosti :

form.Hwnd

číslo okna Windows s formulářem. Při volání mnohých DLL funkcí je třeba ho předávat.

form.Count

počet položek (objektů) formuláře či sestavy.

form.BookMark

u formuláře slouží jako zarážka pro rychlý přechod k označenému záznamu.



Metody ve formuláři

form.GoToPage číslo [, doprava, dolů]

přechod na požadovanou stranu s posunem na ní (v bodech).

form.Recalc

aktualizuje obsah výpočtových (virtuálních) položek jako klávesou F9.

form.Refresh

aktualizuje obsah položek s podmíněnými odkazy (u ODBC spojení probíhá cyklicky podle nastavené periody).

form.Repaint

překreslí obsah obrazovky s formulářem a přepočte všechny odkazy (jako makropříkaz RepaintObject).

object.Requery

aktualizuje data objektu, jestliže se změnil jejich zdroj (jako makropříkaz Requery).

object.SetFocus

provede zaostření (Focus) na určený objekt formuláře. Lze použít jen pro viditelný objekt formuláře (vlastnost Visible = True).



Grafické metody v sestavě

report.Circle [Step] (x, y), poloměr, [barva][, [start][,[konec][, poměr]]]]

nakreslení kruhu.

report.Line [Step] (x1, y1) - [Step] (x2, y2) [, [barva][, B[F]]]

nakreslení čáry.

report.PSet [Step] (x, y) [, [barva]

nakreslení bodu.

report.TextHeight (text)

vrátí výšku textu v bodech při výpisu do sestavy.

report.TextWidth (text)

vrátí šířku textu v bodech při výpisu do sestavy.

report.Scale [(x1, y1) - (x2, y2)]

definuje rozměr sestavy.

report.Print [{Spc(n) " Tab(n)}][seznam hodnot] [{; ",}]

umístění textu do sestavy.



Grafické vlastnosti v sestavě

report.CurrentX

vrací, či nastavuje aktuální polohu ve vodorovném směru pro kreslení.

report.CurrentY

vrací, či nastavuje aktuální polohu ve svislém směru pro kreslení.

report.ScaleMode

nastavuje způsob nastavování velikosti sestavy (cm, inch apod.).

report.ScaleHeight, ScaleWidth, ScaleLeft, ScaleTop

nastavují rozměr sestavy.

report.DrawMode

specifikuje použité "pero" při kreslení (1 - guma, 2 - inverzní, atd.)

report.DrawStyle

definuje styl čáry pro metodu Line ( 0 - plná, 1 - čárkovaná, 2 - tečkovaná, 3 - čerchovaná, 4 - dvojitě čerchovaná, atd.)

report.FillColor

RGB barva pro metody Line a Circle.

report.FillStyle

druh výplně pro metody Line a Circle.



Tvorba a modifikace formulářů a sestav

Nový formulář nebo sestava se vytváří přiřazením do proměnné patřičné třídy. Současně je objekt otevřen jako minimalizovaný :

Set formulář = CreateForm ([databáze [, šablona]])

vytvoří nový formulář.

Set sestava = CreateReport ([databáze [, šablona]])

vytvoří novou sestavu.

Pro modifikaci formuláře či sestavy je třeba jej nejprve otevřít v režimu úprav (Design), pak lze použít následující funkce, opět volané přiřazením do proměnné objektové třídy Object. Rozměry objektu se zadávají v bodech. Platí 1 bod » 0.001764 cm neboli 1 cm » 567 bodů.

integer = CreateGroupLevel (jméno sestavy, zdroj skupiny, záhlaví, úpatí)

vytvoří v sestavě novou skupinu záznamů a vrátí její číslo.

Set objekt = CreateControl (jméno formuláře, typ objektu [, oblast [, zdrojový objekt [, název objektu [, zleva [, zhora [, šířka [, výška]]]]]]])

vytvoří nový objekt formuláře.

Set objekt = CreateReportControl (jméno sestavy, typ objektu [, oblast [, zdrojový objekt [, název objektu [, zleva [, zhora [, šířka [, výška]]]]]]])

vytvoří nový objekt sestavy.

DeleteControl jméno formuláře, jméno objektu

zruší objekt formuláře.

DeleteReportControl jméno formuláře, jméno objektu

zruší objekt sestavy.



OLE objekty

Set OLEobject = CreateObject ("aplikace.typ")

vytvoří nový objekt OLE.

Set OLEobject = GetObject ("aplikace.typ")

vrátí hodnotu OLE objektu z udané aplikace

AppendChunk (zdroj)

uloží zdroj do OLE objektu. Volání : objekt!položka.AppendChunk(zdroj)

GetChunk (přeskočit, vzít)

uloží do řetězce část Memo položky nebo OLE objektu. Volání :

řetězec = objekt!položka.GetChunk(přeskočit, vzít)

FieldSize ()

vrátí velikost objektu (počet Byte).



4.18.6. Příklady programových rutin

V následujících příkladech se pokusíme představit řešení základních manipulací s objekty. Přitom je dobré využívat podpory transakcí. To znamená, že změny dat jsou provedeny hromadně, např. až po potvrzení jejich změny. Ukažme si potřebné příkazy a jejich použití na následujícím příkladu :

Tento princip je uplatněn také u samotné změny obsahu položek. Nejprve je potřeba přesunout aktuální záznam do bufferu pro editaci metodou Edit, pak můžeme změnit jeho hodnoty a nakonec musíme přesunout záznam z bufferu zpět metodou Update, jak to vidíme v příkladu. Všimněme si na tomto místě také použití vykřičníku místo tečky při adresování položky objektu. Toto označení se vyskytovalo i při popisech metod a vlastností. Zjednodušeně lze konstatovat, že vykřičník se používá pro odkaz na objekt vytvořený uživatelem (položku formuláře apod.), tečka pro odkaz na metodu nebo vlastnost objektu, systémový objekt apod.



4.18.6.1.Vyhledání hodnoty v tabulce


Z rozboru metod objektů databáze vyplývá, že pro vyhledávání záznamů jsou různé metody pro tabulku a ostatní třídy objektů. Nejprve si ukážeme vyhledání požadovaných hodnot v tabulce pomocí metody FindNext, která hledá od aktuálního záznamu dále (metoda FindFirst by zde nebyla vhodná, nebo vždy začíná prohledávat od prvního záznamu). Nalezená hodnota je oznámena hlášením s požadovanými tlačítky. Podle stisku tlačítka pak buď vyhledávání pokračuje nebo končí. Přesto, že pracujeme s tabulkou, nelze ji jako tabulku připojit. Je totiž propojena vazbou (Attach).



4.18.6.2.Vytvoření tabulky a dotazu v programu

Funkce Odpracovano_celkem vytvoří novou tabulku pomocí objektu třídy TableDef se složeným primárním klíčem. Následně ji naplní pomocí nově vytvořeného dotazu (objekt třídy QueryDef). V tabulce vyhledává podle hodnot primárního klíče metodou Seek. Pokud by se však stalo (nekorektním ukončením apod.), že vytvářený objekt v databázi existuje, dostal by nový objekt jméno doplněné číslem (1, 2, ...).Proto pomocí funkce Je_tabulka nejprve zjišujeme, zda objekt existuje. Tato funkce je současně ukázkou použití předdefinovaných objektů třídy Container.



4.18.6.3.Kontrola souvislosti objektů

Velmi častou činností je zajištění souvislosti více objektů. Např. v adresáři se mohou vyskytovat jen křestní jména, která jsou uvedena v kalendáři. Výskyt nového neznámého jména přitom nelze vyloučit. Proto vytvoříme funkci, kterou vyvolá makro připojené do vlastnosti After Update položky Jméno ve formuláři FOsoby. Tato funkce zkontroluje, zda zadané jméno je v kalendáři. Pokud není, pak otevře formulář FKalendář, přečte datum jeho svátku a zařadí nové jméno do kalendáře. Povšimněte si především ukázky obsluhy nastálé chyby.

Funkce pro kontrolu souvislosti objektů je natolik častá, že se vyplatí vytvořit ji v obecnější podobě. Místo na konkrétní položku konkrétního formuláře se budeme odkazovat na aktuální položku na obrazovce, volanou Screen.ActiveControl (tím ale současně přijdeme o možnost krokování programu, nebo přepnutí do zobrazení programu odpojí aktuální položku). Jméno zdrojové tabulky a jméno zdrojové položky v této tabulce budeme zadávat jako parametry funkce.

Kontrola, zda v adresáři zadané křestní jméno se nachází také v tabulce TKalendář provedeme tak, že do vlastnosti AfterUpdate položky Jméno ve formuláři připojíme makro [Kontrola jména] obsahující činnost RunCode s parametrem kontrola_zadaná("Jméno","TKalendář"), kterou vyvoláme dále uvedenou funkci.

Ve výpisu funkce si povšimněte zejména zadání jména tabulky pomocí proměnné v příkazu pro připojení tabulky : Set MojeTable = MojeDb.OpenTable(jméno_tab)

a odkazu na položku tabulky zadanou pomocí proměnné, např. v příkaze :
MojeTable(jméno_pol) = Screen.ActiveControl



4.18.6.4. Uživatelská funkce pro modifikaci formuláře

Existují případy, kdy potřebujeme změnit obsah formuláře nebo sestavy. Ukažme si to na formuláři, který zpřístupňuje výsledky dotazu typu Crosstab. Jak víme počet jeho položek je závislý na obsahu zdrojové položky zdroje sloupců a tedy na datech.



4.18.6.5. Funkce se statickými proměnnými

Další ukázkou je funkce používaná pro číslování záznamů a jejich skupin v sestavě. Funkce je vyvolávána vždy při formátování oblastí Detail a GroupHeader. Aby mohla vracet postupně se zvyšující čísla, je potřeba, aby její proměnné byly statické.



4.18.6.6. Funkce z DLL knihoven

Řada standardních činností je obsluhována funkcemi z knihoven DLL. Jejich připojení si ukažme na standardní funkci pro volbu jména otevíraného souboru databáze. Je uvedena také globální deklarace.



4.18.6.7. Výstup do souboru, volání aplikací Windows

Při některých příležitostech potřebujeme vygenerovat textový soubor s informacemi o průběhu práce a ten následně otevřít, nejlépe pomocí standardní aplikace Notepad.exe. Typickou aplikací je kontrola obsahu databáze se záložní databází. Ukažme si zkráceně potřebné činnosti. Z ukázky vidíme, že spuštění aplikace probíhá jinak, než v makropříkazech, nebo makropříkaz RunApp nelze v programu použít.



4.19. Přehled horkých kláves

klávesavýznam
F4

rozvinutí (uzavření) nabídky objektu třídy Combo Box ve formuláři.

F6

přesun do jiné části okna (např. při tvorbě programu a rozdělení okna na dvě části činností menu View-Split Window).

CTRL+F6

přesun mezi otevřenými okny.

F11

přesun do okna se seznamem objektů databáze.

F5

přesun kurzoru do prostoru volby čísla zpracovávaného záznamu v tabulce (výsledku dotazu, formuláři).

F2

vybere aktuální položku (Select).

Shift+Space

vybere celý záznam (Select), pokud je aktuální položka vybraná. Následně můžeme pomocí kláves Shift+Up, Shift+Down vybrat celou oblast záznamů. S vybranou oblastí je možno se pohybovat pomocí kláves Up, Down.

F9

přepočítá (aktualizuje) obsah položek v okně.

Shift+F12

uloží aktuální objekt databáze.

CTRL+Break

uzavře dotaz, filtr, činnost vyhledávání apod.

Shift+F2

otevře pomocné okno pro zadání obsahu položky. V okně bude vidět celá hodnota položky, i když je tak dlouhá, že v tabulce (formuláři apod.) bude vidět jen její část.

F7

otevře okno pro vyhledávání hodnot položek.

Esc

zrušení operací na položkách aktuálního záznamu (Undo Current Field). První stisk ruší poslední provedenou změnu položky, následující ruší všechny provedené změny. Pokud byl záznam uložen, nabídne činnost menu Undo Saved Record.

CTRL+'

vloží do záznamu stejnou hodnotu, jaká je ve stejné položce předchozího záznamu.

CTRL+;

vloží aktuální datum.

CTRL++

přidá nový záznam.

CTRL+Enter

přidá nový řádek v položce datového typu Memo.



5. Literatura

[1]

Bejček, V.: Databázové systémy. Brno, VUT 1992.

[2]

Bílek, V.: MS Access for Windows krok za krokem. Praha, Grada 1993.

[3]

Brodský, J. - Staudek, J.- Pokorný, J.: Operační a databázové systémy. Brno, VUT 1992.

[4]

Clarkson, M.: SQL s mnoha příchutěmi. Bajt, 1993, č. 7, s. 109- 111.

[5]

Farana, R. - Vojáček, M.: Databázové systémy. Microsoft Access. Ostrava, KAKI/kat.ATŘ VŠB Ostrava, 1993.

[6]

Holeš, D.: O klientech a serverech III. Softwarové noviny, 1995, č. 2, s. 80 - 87.

[7]

Krejčí F. - Fendrych M. - Doležal L.: HIT metoda v kostce. AS sešity INORGA, 1984, č. 109.

[8]

Kroha, P.: Databáze pro mikropočítače. Praha, ČSVTS 1988.

[9]

Microsoft Access. Language Reference. Microsoft Corporation 1994.

[10]

Míka, E. - aj.: Databázový systém ORACLE. Softwarové noviny, 1992, č. 2, s. 4 - 11.

[11]

Molnár, Z.: Moderní metody řízení informačních systémů. Praha, Grada 1992.

[12]

Nesrsta, L. - Malý, V.: Microsoft Access 1.0. Brno, TH' Systems a. s. 1993.

[13]

Paleta, P.: ODBC univerzální datový vysavač. PC World, 1994, č. 8, s. 76 - 78.

[14]

Pěkná, I.: FoxPro for Windows (2). Bajt, 1993, č. 6, s. 44 - 47.

[15]

Pěkná, I.: FoxPro for Windows (3). Bajt, 1993, č. 7, s. 27 - 30.

[16]

Pěkná, I.: FoxPro for Windows. Bajt, 1993, č. 5, s. 15 - 16.

[17]

Plecháč, V.: Access 2.0. Učebnice programování. Praha, GComp 1994.

[18]

Pokorný, J. - Halaška, I.: Databázové systémy. Vybrané kapitoly a cvičení. Praha, UK 1993.

[19]

Pokorný, J.: Databázové systémy a jejich použití v informačních systémech. Praha, Academia 1992.

[20]

Pokorný, J.: FoxPro 2.0 - z příručky uživatele. Softwarové noviny - příloha, 1992, č. 9 - 10, s. 120 - 130

[21]

Průša, M.: Superbase 4 : databáze pro prostředí Windows. Pozoruhodná alternativa. Softwarové noviny, 1992, č. 1, s. 45 - 49.

[22]

Rosík, M. - Bělík, P. - Svoboda V.: Programování v databázích typu XBase. Softwarové noviny - příloha, 1992, č. 8 - 9, s. 102 - 119.

[23]

Scheber, A.: Databázové systémy. Praha, SNTL/Alfa 1988.

[24]

Tietze, P.: Strukturální analýza. Úvod do projektu řízení. Praha, Grada 1992.

[25]

Tsichritzis D. - Lochovský, F.: Databázové systémy. Praha, SNTL 1987.

[26]

Ullman, E.: Architektura klient/server osvobozuje data. Bajt, 1993, č. 7, s. 101 - 105.

[27]

Vlček, J.: Inženýrská informatika. Praha, ČVUT 1994.

[28]

Zajíček, L.: ObjectPAL Paradoxu pro Windows. Bajt, 1993, č. 7, s. 24 - 26.

[29]

Zajíček, L.: Vlevo Access - vpravo Paradox. Databáze Microsoftu a Borlandu pro Windows, dějství první. Bajt, 1992, č. 12, s. 31 - 37.

[30]

Zajíček, L.: Vlevo Access - vpravo Paradox. Databáze Microsoftu a Borlandu pro Windows, dějství druhé. Bajt, 1993, č. 5, s. 12 - 14.

[31]

Zajíček, L.: Vlevo Access - vpravo Paradox. Databáze Microsoftu a Borlandu pro Windows, dějství třetí. Bajt, 1993, č. 6, s. 30 - 43.

[32]

Zůna, P.: Informatika a výpočetní technika. Praha, Grada 1993.


Návrat k obsahu