Prihláste sa s kontom Microsoft
Prihláste sa alebo si vytvorte konto.
Dobrý deň,
Vyberte iné konto.
Máte viacero kont
Vyberte konto, s ktorým sa chcete prihlásiť.

Obsah tu sa môže vzťahovať na Northwind 2.0 Developer Edition a Starter Edition. 

Programovací jazyk VBA (Visual Basic for Applications) sa používa vo všetkých produktoch balíka Office. Výučba VBA vám umožňuje pracovať so všetkými produktmi balíka Office (nielen s Accessom).
Pri vyhľadávaní výrazu "how-to" vyhľadajte konkrétne príklady Accessu a do vyhľadávania zahrňte Microsoft Access. Riešenia pre ostatné produkty balíka Office budú často fungovať , ale neexistuje žiadna záruka. Microsoft Access je vyspelý produkt. to znamená, že existuje veľa príkladov tam; čo je skvelé pre vás! 

To tiež znamená, že staršie knihy o programovaní v Accesse sú stále životaschopné, aby ste sa na ne mohli pozrieť. Mnohé zo starších kníh sú stále k dispozícii na stránkach používaných kníh za zlomok ich pôvodných nákladov. Na webovej lokalite spoločnosti Microsoft zistite, ktoré verzie Accessu sa stále podporujú, a prejdite s týmito verziami.

Ukončenie podpory pre Office – Nasadenie balíka Office | Microsoft Learn  

Nižšie je uvedených niekoľko prepojení na dokumentáciu k Accessu v spoločnosti Microsoft.

Súbory programu Microsoft Access sú súbory balíka Office. Súbory balíka Office musia byť v dôveryhodnom umiestnení alebo musia mať povolený obsah. Tieto položky sa považujú za bezpečné, pretože ste ich vytvorili alebo pochádzajú z dôveryhodného zdroja. Kontrola dôveryhodných umiestnení sa vyskytuje pri každom otvorení ľubovoľného súboru balíka Office. Odteraz to budeme označovať ako dôveryhodné/povolené. POZNÁMKA: Ak je vydaná a otvorená nová verzia aplikácie z nedôveryhodného umiestnenia, proces povolenia obsahu sa zopakuje.

Ďalšie informácie o dôveryhodných umiestneniach: 

Makrá, funkcie a podradené položky sú spôsob, akým implementujete obchodnú logiku do databázy Accessu. Je dôležité, aby ste pred začatím pochopili rozsah a viditeľnosť .


Udalosti (napríklad kliknutie na ovládací prvok) v ovládacích prvkoch vo formulári (napr. tlačidlá, textové polia, označenia atď.) spúšťajú iné procesy, ako napríklad pridávanie, odstraňovanie záznamov alebo otváranie formulárov. Tieto procesy možno implementovať pomocou makier alebo jazyka VBA. Northwind Starter Edition používa väčšinou makrá a niektoré VBA, kde makrá nedokážu vykonávať potrebné funkcie. Northwind Developer Edition používa predovšetkým jazyk VBA. 

Niektoré typy ovládacích prvkov obsahujú vstavaných sprievodcov na automatické vytvorenie makra. Pridaním tlačidla príkazu do formulára sa napríklad otvorí sprievodca, ktorý ponúka niekoľko možností funkcií pre tlačidlo. Pridaním rozbaľovacieho poľa sa otvorí sprievodca, ktorý môže byť nakonfigurovaný na vyhľadanie konkrétneho záznamu vo formulári. 

Navigačná tabla je hlavný spôsob zobrazenia a prístupu ku všetkým objektom databázy, ktorý sa predvolene zobrazuje na ľavej strane okna Accessu. 
Navigačná tabla Northwind bola prispôsobená. Vytvorili sme vlastnú kategóriu s názvom Northwind Starter 2.0. To nám umožňuje usporiadať objekty podľa funkčnej oblasti.

Niekedy budete potrebovať premennú, ktorá bude existovať po tom, ako objekt, ktorý ju vytvoril, zmizne z rozsahu. Pozri rozsah a viditeľnosť vyššie. Existujú tri hlavné spôsoby: verejné premenné, dočasné premenné a ukladanie hodnôt v lokálnej tabuľke. Mnohí vývojári používajú kombináciu týchto. Každý z nich má svoje klady a nevýhody.  Ďalšie informácie o každej z nich nájdete tu: 

Verejná premenná modulu VBA: 

Dočasné premenné: 

Ukladanie hodnôt v lokálnej tabuľke

  • Verejné premenné a dočasné premenné existujú pre aktuálnu reláciu a po zatvorení aplikácie sa z nej vymenia. Čo však v prípade, ak chcete zachovať premenné špecifické pre jednotlivých používateľov v rámci relácií? Tieto typy hodnôt môžete uložiť do lokálnej tabuľky. V Northwind 2.0 je jedna takáto premenná uložená v tabuľke, ktorá sa nazýva SystemSettings. Hodnota v tabuľke je ShowWelcome. Táto hodnota informuje Access o tom, či chcete zobraziť uvítaciu obrazovku vždy, keď sa prihlásite alebo nie.

Vývojári často potrebujú odovzdať parametre z jedného formulára do druhého alebo z formulára do zostavy. Tieto parametre sprostredkúvajú dôležité informácie, ktoré potom nazývaná funkcia použije na konfiguráciu samej seba. Existuje niekoľko spôsobov, ako môže druhý formulár alebo zostava získať informácie z prvého formulára. Tu je niekoľko z týchto spôsobov: 

  1. Druhý formulár sa môže "obzrieť" do prvého formulára a vyzdvihnúť niektoré hodnoty, prípadne vo viditeľnom alebo neviditeľnom ovládacom prvku.  Príklad:
    lngCustomerID = Forms!FirstForm!cboCustomerID 

  2. Prvý formulár môže uložiť hodnoty do globálnych premenných alebo do dočasných premenných. Príklad:
    g_lngUserID = Me.cboUserID 
    TempVars.Add "UserID", Me.cboUserID 

Metóda, ktorá sa často používa v Northwind Developer Edition, rovnako ako v našom profesionálnom živote, používa argument OpenArgs formátu DoCmd.OpenForm alebo OpenReport. Príklad:

DoCmd.OpenForm "frmCompanyDetail", OpenArgs:=StringFormat("CompanyID={0} &CompanyTypeID={1}", Me.VendorID, ctVendor)

Tu kombinujeme dve techniky: (1) použitie argumentov OpenArgs na odovzdanie hodnôt VendorID a VendorType a (2) použitie funkcie StringFormat() na vytvorenie napríklad tohto reťazca: 

CompanyID=5&CompanyTypeID=2 

Tento reťazec vyzerá veľmi podobne ako reťazec dotazu, ako sa používa v prehliadači. Obsahuje jeden alebo viac "párov názvov/hodnôt" oddelených znakom ampersand: 

name1=value1&name2=value2


Výhodou takéhoto reťazca je, že každá hodnota má názov. Porovnajte to s jednoduchším prístupom, kde by ste parametre OpenArgs nastavili iba na hodnotu 5,2.  V takom prípade by bolo potrebné úsilie zistiť, čo každá hodnota znamená. Pomenovaním každej hodnoty sa reťazec dotazu "popíše", čo je dobrý programovací postup.

Na prijímacom konci súboru DoCmd.OpenForm sa zvyčajne nachádzame v udalosti Form_Open alebo Form_Load a chceme analyzovať reťazec OpenArgs do jeho súčastí.

V Northwind to môžete urobiť pomocou funkcie StringToDictionary . Použije funkciu, ktorá sa podobá reťazca dotazu, a analyzuje ju do svojich súčastí. Tieto súčasti sa potom uložia do objektu Scripting.Dictionary . Všimnite si, že tento krok vyžaduje použitie nástrojov > referencií a nastavenie odkazu na program Microsoft Scripting Runtime (scrrun.dll).

Medzi funkcie a výhody objektu slovníka patria tieto:  

  • Poradie prvkov nie je dôležité

  • Jednoduché funkcie na pridávanie a odstraňovanie prvkov kolekcie

  • Funkcie, ktoré sa majú cyklicky preniesť do kolekcie, aby ste vedeli, čo sa v nej nachádza

  • Funkcia Exists , aby ste mohli otestovať, či je k dispozícii určitý prvok

Použitie objektu slovníka sa zobrazí v celom Northwind. Napríklad udalosť Form_Load v frmGenericDialog.

Makrá vytvorené pomocou sprievodcov ovládacími prvkami v Accesse zriedkavo zahŕňajú spracovanie chýb. Jazyk VBA vytvorený pomocou sprievodcov ovládacími prvkami môže byť obmedzený na všeobecný súbor MsgBox Err.Description.

V Northwind 2.0 vám ukážeme, ako to urobiť lepšie pri používaní kódu VBA. Implementovali sme tzv. globálnu obsluhu chýb. Chyby, ktoré sa vyskytnú v ľubovoľnom postupe, volajú funkciu na globálnej úrovni na zobrazenie chyby. Veľkou výhodou je, že spracovanie chýb je konzistentné. Ak sa správa musí zmeniť (napríklad na ďalšie zobrazenie čísla chyby alebo na zaznamenanie chyby do súboru), musí sa vykonať len na jednom mieste. 

clsErrorHandler je modul triedy, ktorý implementuje kód spracovania chýb. Modul triedy uchováva všetky hlavné a pomocné funkcie pohromade v jednej lekcii, čím sa kód zapuzdruje.

Makro AutoExec volá funkciu Startup v modStartup. V Starter Edition vytvorí funkcia inštanciu clsErrorHandler a uloží ju ako globálnu premennú, ktorá je k dispozícii na použitie v celej aplikácii. Vo vydaní Dev sa používa statická trieda – pozrite si komentáre v hornej časti modulu triedy.

Kód spracovania chýb v postupoch je v skutočnosti taký konzistentný, že sme ho mohli vytvoriť za menej ako päť minút pomocou konkrétneho kódu VBA, ktorý vybavil každý postup riadnym obslužným programom chýb. (Kód nie je súčasťou šablóny). Oba vydania šablón Northwind 2.0 Starter aj Developer boli spočiatku vybavené týmto prístupom na spracovanie chýb. 
'

VYLEPŠENÉ SPRACOVANIE CHÝB

Počnúc verziou 2.2 verzie Northwind Developer Edition bola obsluha chýb vylepšená vďaka pripomienkam komunity Accessu. Úvodné vydanie sa nezmení. 

Obsluha chýb v predchádzajúcej verzii (2.0 - vydanej v apríli 2023) je v podstate:

Public Sub HandleError(…)
    MsgBox Err.Description
End Sub


Vo verzii 2.2 sa inovuje na:

Public Sub HandleError (…, Optional ByVal IsEventProcedure As Boolean = False)
    If Not IsEventProcedure Then
        Err.Raise lngError, strErrSource
    End If
    MsgBox Err.Description
End Sub


Ak chcete pochopiť, prečo bola táto zmena vykonaná, najskôr pochopme, čo spôsobuje spustenie kódu:

  • Makro AutoExec volá procedúru spustenia, ktorá vykonáva niektoré inicializácie pred otvorením prvého formulára.

  • Používateľ pracuje s aplikáciou, napríklad otvára formulár alebo kliká na tlačidlo, čo spôsobuje spustenie procedúr udalostí, ako sú napríklad Form_Load a cmdPrintInvoice_Click.
    '

Okrem procedúr udalostí majú aplikácie podprogramy a funkcie - väčšinou v moduloch - a tento kód je volaný z procedúr udalosti. Nazývajú sa to "štandardné" postupy.

Vo verzii 2.0 northwind by štandardné procedúry spracovávali vlastné chyby so správami, ale nejako by neoznámili procedúru volajúcej udalosti, že sa vyskytla chyba. Môže to byť zlé, ak procedúra spúšťaná udalosťou má nasledujúci kód, ktorý by sa mal spustiť bez ohľadu na predchádzajúcu chybu spracovanú volaným postupom. Iste, podprogram by sme mohli nahradiť funkciou, ktorá vráti úspech alebo neúspech, a kódovať procedúru udalosti zodpovedajúcim spôsobom, ale to nie je vždy možnosť.

V Northwind verzii 2.2 štandardné procedúry nespracujú chybové hlásenia, ale namiesto použitia chyby Err.Raise ich nahláste späť do procedúry udalosti volania. Procedúra volania udalosti potom zobrazí vyvolanú chybu a obnoví sa v Exit_Handler. Je to lepšie, pretože to umožňuje, aby sa proces volania ukončil elegantne.

Ak chcete použiť kód Northwind verzie 2.2, procedúry udalostí musia odovzdať do funkcie HandleError tretí argument označujúci, že volajúci je procedúrou spúšťanou udalosťou. Spoločnosť Northwind Dev Edition bola aktualizovaná, aby tak urobila.

Ešte výkonnejší modul obsluhy chýb by mal podporu pre postupy "tlačenia a odprýskávání" na "zásobníku" (pole). Prvým prvkom by bola vždy procedúra spúšťaná udalosťou, takže dodatočný argument nie je potrebný. Táto implementácia je nad rámec cieľov northwind Dev Edition.

MRU alebo Naposledy použité je zoznam naposledy použitých objednávok a nákupných objednávok. Možno sa budete chcieť vrátiť k týmto často, aby ste ich dostali do nasledujúceho stavu. Zoznamy MRU sa často zobrazujú v produktoch balíka Office ako zoznam naposledy použitých súborov, ktoré možno budete chcieť znova otvoriť.

vo vydaní Northwind Dev, na implementáciu funkcie MRU (ktorá neexistuje vo vydaní Starter) je potrebné najprv vytvoriť nasledujúce položky: 

  1. Tabuľka na uloženie informácií mru.

  2. Kód na aktualizáciu tabuľky pri otvorení objednávky alebo objednávky.

  3. Kód na aktualizáciu rozbaľovacieho zoznamu mru na páse s nástrojmi.

  4. Kód na načítanie položky pri výbere položky MRU z pása s nástrojmi.

Pozrime sa na každú z týchto možností podrobnejšie. 


1. Tabuľka na uloženie informácií o MRU.

Návrh mru tabuľky stojí za preskúmanie, najmä jeho indexy. Všimnite si, že existuje duplicitný index SortIdx , ktorý pomáha pri rýchlom zoraďovaní položiek MRU v rozbaľovacom zozname pása s nástrojmi, ako aj jedinečný index na vynútenie obchodného pravidla, že pre každého používateľa sa položka môže vyskytnúť len raz. Ak napríklad dvakrát otvoríte rovnaké poradie, nevytvorí sa v tabuľke MRU dva záznamy.


Tabuľka využíva skutočnosť, že všetky polia PK súvisiace s MRU (primárny kľúč) v databáze sú automatické číslovanie, takže typ údajov Long Integer možno použiť pre hodnotu PKValue.

2. Kód na aktualizáciu tabuľky pri otvorení objednávky alebo P.O.

V NW2 sme sa rozhodli pridať do zoznamu MRU len vtedy, keď bol vytvorený nový záznam, nie keď bola existujúca znova aktualizovaná. Určite by sme mohli presunúť volanie AddToMRU z Form_AfterInsert do Form_AfterUpdate na podporu.

Postupy AddToMRU a DeleteFromMRU sa implementujú v modGlobal, čo je štandardný modul, ktorého verejné postupy sú viditeľné z akéhokoľvek formulára.

Funkcia AddToMRU (ako už názov napovedá) pridá novú položku do tabuľky MRU a potom ju voliteľne oreže späť, čím odstráni najstarší záznam, ak prekračuje maximálnu veľkosť (MAX_MRU_COUNT). Posledný krok je pravdepodobne najmenej známy vývojárom v Accesse: rozbaľovací zoznam na páse s nástrojmi sa musí obnoviť a vykoná sa to volaním funkcie InvalidateControl. Toto je signál pre pás s nástrojmi na opätovné spustenie procesu inicializácie. 

3. Kód na aktualizáciu rozbaľovacieho zoznamu MRU na páse s nástrojmi. 

Pri spustení a po volaní invalidateControl sa spustí zložitá množina funkcií na vyplnenie pása s nástrojmi.  Tieto postupy sú volané pásom s nástrojmi XML v tabuľke uSysRibbons , ktorý hovorí čiastočne:

<group id="gCurrentStatus" label="MRU">
    <box id="bxMRU" boxStyle="vertical">
        <dropDown id="ddMRU"
                  getItemCount="ddMRU_GetItemCount"
                  getItemLabel="ddMRU_GetItemLabel"
                  getSelectedItemIndex="ddMRU_GetSelectedItemIndex"
                  getItemID="ddMRU_GetItemID"
                  onAction="ddMRU_OnAction"
                  screentip="Most Recently Used Objects">
        </dropDown>
    </box>
</group>

Tieto štyri funkcie spätného volania vyplnia rozbaľovací zoznam. Všimnite si, že ide o veľmi rovnakú myšlienku, ako je popísané v tomto článku pre štandardné rozbaľovacie polia.

Ak dekommentujete riadky Debug.Print v modRibbonCallback a reštartuje aplikáciu, okamžité okno bude prezentovať postupnosť takto: 

ddMRU_GetItemCount    ddMRU    6 
ddMRU_GetItemLabel    ddMRU    0      Order 60, Proseware, Inc.
ddMRU_GetItemID       ddMRU    0       2 
ddMRU_GetItemLabel    ddMRU    1      Order 62, Best For You Organics Company
ddMRU_GetItemID       ddMRU    1       4 
ddMRU_GetItemLabel    ddMRU    2      Order 63, Wide World Importers
ddMRU_GetItemID       ddMRU    2       5 
ddMRU_GetItemLabel    ddMRU    3      Order 66, Proseware, Inc.
ddMRU_GetItemID       ddMRU    3       8 
ddMRU_GetItemLabel    ddMRU    4      Order 67, Best For You Organics Company
ddMRU_GetItemID       ddMRU    4       9 
ddMRU_GetItemLabel    ddMRU    5      Order 68, Adatum Corporation
ddMRU_GetItemID       ddMRU    5       10 
ddMRU_GetSelectedItemIndex  ddMRU    0


Tu vidíme, že Access najprv volá procedúru, ktorá vráti počet položiek, ktoré sa majú načítať v argumente ByRef ddMRU_GetItemCount. Toto je tiež čas, kedy otvoríme dotaz v tabuľke MRU a uložíme ho do vyrovnávacej pamäte, pretože sa bude používať niekoľkokrát. 

Pás s nástrojmi potom opakovane volá dva postupy na získanie hodnôt ID a Označenie pre rozbaľovací zoznam s dvoma stĺpcami. 

Nakoniec vyvolá procedúru na odstránenie položky, ktorá by mala byť vybratá. (V našom prípade je to prvá.) 

4. Kód na načítanie položky, keď je položka MRU vybratá z pása s nástrojmi.

Podobne ako pri iných položkách pása s nástrojmi, aj vlastnosť OnAction v XML páse s nástrojmi určuje funkciu spätného volania, ktorá sa použije na vykonanie akcie:

onAction="ddMRU_OnAction"

Tento postup je implementovaný v modRibbonCallback. Opätovne použije už otvorenú množinu záznamov na vyhľadanie záznamu s vybratou položkou. Potom v závislosti od požadovanej položky TableName otvorí zodpovedajúci formulár odovzdaním hodnoty PK, ktorá sa má načítať.

Potrebujete ďalšiu pomoc?

Chcete ďalšie možnosti?

Môžete preskúmať výhody predplatného, prehľadávať školiace kurzy, naučiť sa zabezpečiť svoje zariadenie a ešte oveľa viac.

Komunity pomôžu s kladením otázok a odpovedaním na ne, s poskytovaním pripomienok a so získavaním informácií od odborníkov s bohatými znalosťami.

Boli tieto informácie užitočné?

Aká je podľa vás jazyková kvalita textu?
Čo sa vám páčilo, prípadne čo nie?
Stlačením tlačidla Odoslať sa vaše pripomienky použijú na zlepšenie produktov a služieb spoločnosti Microsoft. Váš správca IT bude môcť tieto údaje zhromažďovať. Vyhlásenie o ochrane osobných údajov.

Ďakujeme za vaše pripomienky!

×