sql >> Databáze >  >> RDS >> Access

Visual Basic for Applications v aplikaci Microsoft Access

Úvod

Microsoft Access obsahuje řadu funkcí, které umožňují vývojářům databází vytvářet formuláře pro zadávání dat, sestavy a dotazy, které mohou uživatele vést při dotazování na existující data v databázi a zadávání nových dat. Různé nástroje pro tvorbu dotazů a průvodce usnadňují tento vývojový proces. I s těmito nástroji však mohou nastat situace, kdy by vývojář chtěl přidat ještě více funkcí, které zatím vývojové nástroje MS Access neposkytují. Vývojář si například může přát automaticky opravit špatná data před jejich uložením do databáze, zobrazit upozornění, pokud je porušeno obchodní pravidlo, pomoci uživateli přejít z jednoho formuláře pro zadávání dat do druhého nebo spustit sestavu s některými vlastními filtry. Způsob, jak dosáhnout takového přizpůsobení, je přidat kód pomocí programovacího jazyka Visual Basic for Applications.

Visual Basic for Applications (VBA) je programovací jazyk používaný v řadě softwarových produktů Microsoft Office, jako jsou Excel a Access. Jazyk VBA je odvozen z jazyka „Basic“ vynalezeného v roce 1964, který se stal populárním na osobních počítačích v 70. Část názvu „Visual“ byla přidána společností Microsoft, aby odrážela použití základního programovacího jazyka v systému Microsoft Windows.

Existuje mnoho výukových programů, které představují základní programování. Tento tutoriál se zaměří na malou podmnožinu funkcí jazyka VBA používaného v MS Access.

Obsah

  • Události v aplikaci Microsoft Access
  • Příklad kódu VBA:Zajištění, že názvy jsou ve správném případě
  • Jazyk VBA – deklarování a přiřazování proměnných, podmíněných příkazů a komentářů
  • Jazyk VBA – funkce, metody a příklady
  • Jazyk VBA – vlastnosti
  • Cvičení kódování VBA
  • Ošetření chyb ve VBA
  • Spouštění vlastních dotazů SQL ve VBA

Další stránka představuje události v aplikaci Microsoft Access.

Události v aplikaci Microsoft Access

V Accessu je programovací kód VBA připojen k formulářům a sestavám a lze jej nastavit tak, aby se spouštěl v určitou dobu nebo v reakci na konkrétní událost. Tento styl programování je někdy označován jako programování „založené na událostech“, což znamená, že kód, který vývojář napíše, se spustí v reakci na nějakou událost .

Když je formulář zobrazen ve formulářovém zobrazení, bude se obecně dotazovat na všechna existující data z podkladových tabulek a pak tam bude jen nečinně sedět, dokud uživatel něco neudělá. Uživatel může například kliknout na jedno z navigačních tlačítek a přesunout se na další záznam, může kliknout do textového pole a začít zadávat nová data nebo může kliknout na tlačítko Zavřít pro uzavření formuláře. Každá z těchto akcí vyústí v Událost děje ve formě. Každé kliknutí myší nebo tah na klávesnici se považuje za událost.

Události mají většinou výchozí chování. Kliknutím na navigační tlačítko „další záznam“ se formulář posune na další datový záznam. Zadáním písmene „C“, když je kurzor v textovém poli, se v textovém poli objeví písmeno „C“. Stisknutí klávesy TAB způsobí, že kurzor přeskočí na další textové pole (nebo ovládací prvek) ve formuláři a tak dále. Programátor může toto výchozí chování přepsat nebo vylepšit a vložit svůj vlastní kód, který se má spustit v reakci na událost.

Programování VBA pro Access Forms and Reports se zaměřuje hlavně na psaní kódu, který reaguje na různé události.

Než se ponoříme do podrobností událostí, může být poučné implementovat jednoduchý příklad. Chcete-li vidět nějaký kód v akci, další část tohoto tutoriálu poskytuje návod, jak přidat kód VBA do formuláře pro zadávání dat.

Příklad kódu VBA:Zajištění, aby jména byla ve správných písmenech

Následuje poměrně stručný a jednoduchý příklad přidání kódu VBA do formuláře pro zadávání dat v MS Access. Některé detaily budou kvůli stručnosti přeskočeny. Po tomto příkladu tyto podrobnosti vyplní zbytek tohoto kurzu.

Tento příklad používá Zákazník formulář pro zadávání dat, který byl přizpůsoben v kurzu Advanced MS Access Forms. Než budete pokračovat, možná budete chtít dokončit tento tutoriál (nebo alespoň části týkající se formuláře pro zadání údajů o zákazníkovi).

Při zadávání nových údajů o zákaznících bychom se rádi ubezpečili, že jména Zákazníka jsou zadána ve „správném případě“. To znamená, že první písmeno jména by mělo být velké písmeno a zbytek jména by měl být malými písmeny. Pokud uživatel zadá:„Joe“, chtěli bychom, aby to formulář automaticky opravil na správný případ:„Joe“.

Pokud jde o události, přidáme kód, který je spojen s událostí Po aktualizaci pro pole Jméno na formuláři zákazníka. To znamená, že po něco se změnilo (aktualizováno ) v poli First Name (Křestní jméno) se spustí událost After Update a poté kód, který napíšeme, začne fungovat, aby se zajistilo, že jakékoli zadané jméno bude převedeno na správná velká a malá písmena.

Následující kroky zavedou tento kód.

  1. Otevřete položku Zákaznická data pro v režimu návrhu.
  2. Klikněte pravým tlačítkem na Jméno textového pole a vyberte Vlastnosti z vyskakovací nabídky.
  3. Když se zobrazí Tabulka vlastností klikněte na kartu Událost. To je znázorněno na obrázku níže:

    Všimněte si seznamu událostí, které jsou zobrazeny. Každý z nich lze naprogramovat tak, aby reagoval na konkrétní událost, která se stane s Jméno textové pole.

  4. Vytvořte novou obsluhu události kliknutím na tři tečky napravo od události Po aktualizaci.
  5. Položka Vybrat tvůrce objeví se okno. Vyberte Tvůrce kódu a poté klikněte na OK knoflík.
  6. Zobrazí se okno pro úpravu kódu VBA. Všimněte si, že Access již vytvořil útržek podprogramu, který začíná slovy Private Sub a končí slovy End Sub.
    Název podprogramu je vytvořen pomocí názvu ovládacího prvku formulářů (FirstName) a názvu Událost, na kterou bude tento podprogram reagovat (AfterUpdate).

    Řádek End Sub je místo, kde tento konkrétní podprogram skončí.

  7. Na prázdný řádek mezi Private Sub a End Sub přidejte následující kód:
    FirstName = StrConv(FirstName, vbProperCase)
    
    

    Po dokončení se kód zobrazí takto:

    Tento nový řádek kódu dělá následující:

    StrConv je funkce, která přebírá obsah textového pole Jméno a převádí jej podle druhého daného parametru, kterým je v tomto příkladu vbProperCase. Po dokončení tohoto převodu bude výsledek přiřazen (pomocí rovnítka) zpět do textového pole Jméno. Tím se přepíše vše, co je aktuálně v textovém poli Jméno. Tato funkce například vezme „sally“, převede jej na „Sally“ a poté vloží „Sally“ do textového pole Jméno.

  8. Uložte tento nový kód stažením Soubor dolů a výběrem možnosti Uložit .
  9. Otestujte nový kód. Přepněte zpět na obrazovku Microsoft Access Design Mode. Změňte zobrazení na Form View.
  10. Přejděte na prázdný záznam. Klikněte na pole Jméno a zadejte jméno malými písmeny:

  11. Stiskněte Tab pro přesun do dalšího textového pole. Jméno Joe by se mělo změnit na „Joe“, jak je uvedeno níže:
  12. Pokud se zobrazí chyba, přepněte zpět do editoru kódu VBA a ujistěte se, že jste všechny části kódu napsali správně. Možná budete muset stáhnout Spustit a vyberte Resetovat za účelem zastavení spouštění kódu VBA.

Výše uvedený příklad poskytl rychlý pohled na to, jak lze přizpůsobit chování formuláře, aby pomohl uživateli zadávat do databáze pěkně naformátovaná data. Během tohoto příkladu bylo přeskočeno několik podrobností a tyto podrobnosti budou probrány ve zbytku tohoto tutoriálu.

Jazyk VBA

Tato část stručně představí hlavní části jazyka VBA, jak se používá v MS Access. Komplexní přehled VBA přesahuje rámec tohoto tutoriálu. Odkazy na obsáhlejší knihy a materiály jsou uvedeny na konci tohoto návodu.

Deklarování proměnných

proměnná je název daný zástupnému symbolu, kam může programátor uložit nějaká data. Proměnná může být například použita k uložení čísla, zatímco s ní provádíme nějaké matematické operace nebo porovnáváme její hodnotu s jinými proměnnými. Proměnné lze deklarovat tak, aby obsahovaly hodnoty určitého datového typu jako jsou celá čísla, řetězce nebo data. Chcete-li deklarovat novou proměnnou, použijte příkaz Dim. Chcete-li například deklarovat novou proměnnou s názvem MyName a nastavte jej tak, aby obsahoval řetězec (znaky), proveďte následující:

Dim strMyName As String

Chcete-li deklarovat novou proměnnou s názvem „AccountBalance“ a nastavit ji tak, aby ukládala číslo s desetinnou čárkou, použijte následující:

Dim dblAccountBalance As Double

Přiřazení hodnot

Hodnotu lze přiřadit proměnné nebo ovládacímu prvku ve formuláři pomocí znaménka rovná se. Například pro uložení jména „Alex“ do proměnné MyName použijte následující:

strMyName =“Alex”

Chcete-li zkopírovat obsah textového pole Jméno do proměnné MojeJméno, použijte:

strMyName =[FirstName]

Hodnoty lze také vypočítat před přiřazením. Například následující výraz převezme zůstatek účtu aktuálního zákazníka z textového pole [Zůstatek], přidá 1% úrok (vynásobením zůstatku krát 1,01) a poté sníží výsledek o 10 $. Nakonec je výsledek přiřazen k proměnné AccountBalance.

dblAccountBalance =( [Zůstatek] * 1,01 ) – 10,00

Podmíněné příkazy

Podmíněný příkaz používá logický test k určení, které řádky kódu se mají spustit jako další. Podmíněný příkaz If … Then se používá poměrně často. Například:

If AccountBalance < 1000 Then
      MonthlyFee = 10
Else
      MonthlyFee = 0
End If

Vyhodnocuje se logický výraz AccountBalance <1000. Pokud je tento výraz pravdivý (například je-li AccountBalance 400 $), spustí se další řádek za Potom. V tomto příkladu je měsíční poplatek =10.

Pokud je tento výraz False, pak se spustí řádek za Else.

Logický výraz může obsahovat několik částí, které jsou spojeny booleovskými operátory OR, AND a NOT. Důkladnější diskusi o booleovských výrazech lze nalézt v tomto tutoriálu o programování. Předpokládejme například, že upustíme od měsíčního poplatku, pokud je účet mladší než rok. Předpokládejme, že máme AccountAge jako stáří účtu v měsících. Pak by kód byl:

If AccountBalance < 1000 AND AccountAge > 12 Then
      MonthlyFee = 10
Else
      MonthlyFee = 0
End If

V příkazu If … Then a If … Then lze spustit více než jeden řádek kódu.

Komentáře

Při programování v jakémkoli programovacím jazyce je dobrou praxí zahrnout komentáře, které kód popisují. Ve VBA lze komentář zahrnout tak, že začnete jedinou uvozovkou. Vezmeme-li výše uvedené jako příklad, můžeme přidat následující komentáře:

Další části jazyka VBA jsou popsány na další stránce.

Jazyk VBA – pokračování

Funkce

Jazyk VBA má velké množství vestavěných funkcí a metod, které lze použít k provádění různých úloh, jako jsou matematické funkce (sin, cos, tan), funkce řetězců a mnoho dalších. Funkce mají obvykle jeden nebo více vstupních parametrů, které funkce používá. Například ve funkci Cos(45) je „45“ vstupní úhel, se kterým bude fungovat funkce kosinus. Funkce StrConv vyžaduje dva vstupní parametry:Řetězec k převodu a styl převodu:

StrConv(Jméno, vbProperCase)

Mezi užitečné funkce patří:

MsgBox( prompt, buttons, title) Zobrazte vyskakovací okno se zprávou s textem výzvy, tlačítky a názvem
StrConv( výraz, styl ) Převeďte řetězcový výraz na velká, malá nebo správná písmena
Vlevo( výraz, znaky ) Vezměte z řetězcového výrazu znaky nejvíce vlevo
Střed (výraz, začátek, znaky ) Vezměte střední sadu znaků z řetězcového výrazu začínajícího na začátku
JeNull( výraz ) Otestujte, zda řetězcový výraz (nebo textové pole) nemá žádný obsah (je null)
Nz( výraz, hodnota_if_null ) Pokud je výraz null, vyplňte výchozí hodnotu
Nyní() Vrátí aktuální datum a čas
Zaokrouhleno(výraz, desetinná místa ) Zaokrouhlí číselný výraz na určitý počet desetinných míst
RGB( červená, zelená, modrá ) Vrátí barevné celé číslo na základě kombinace červené, zelené a modré

Metody

Metody ve VBA jsou jako funkce, ale jsou spojeny s ovládacím prvkem nebo jiným objektem ve formuláři nebo sestavě.

Mezi užitečné metody patří:

DoCmd.CancelEvent Zruší aktuální událost, která je zpracovávána
DoCmd.Close Zavřete aktuální formulář (nebo databázi)
DoCmd.OpenForm Otevře nový formulář
DoCmd.OpenReport Spusťte příkaz MS Access, jako je uložení nových nebo aktualizovaných dat, vrácení změny nebo ukončení formuláře
.SetFocus Nastavte fokus na ovládací prvek ve formuláři
. Zpět Vrátí zpět poslední změnu nebo příkaz
. Obnovit Aktualizuje všechna data tvořící základ formuláře
.Vyžádat dotaz Vyžádá si data zadaná do formuláře
. Překreslit Překreslí všechny ovládací prvky ve formuláři

Mnoho dalších funkcí a metod je uvedeno na tomto webu společnosti Microsoft.

Následující sada příkladů využívá různé funkce a metody v různých kombinacích.

Příklady

Ukažte uživateli varování, pokud je zůstatek na účtu nižší než 1 000 $

If AccountBalance < 1000 Then
      MsgBox("Warning: The Account Balance is now less than $1,000.")
End If

Pokud textové pole Jméno ve formuláři něco obsahuje, převeďte jej na správná velká a malá písmena

If Not IsNull( [FirstName] ) Then
   FirstName = StrConv( [FirstName], vbProperCase )
End If

další stránka představuje Vlastnosti různých objektů.

Vlastnosti

Každý prvek ve formuláři pro zadávání dat nebo sestavě má ​​sadu vlastností s tím spojené. Vlastnosti řídí umístění, barvu, písmo, pozadí a další atributy vzhledu a formátování každého ovládacího prvku. Například některé z mnoha vlastností textového pole zahrnují:

Viditelné Určuje, zda je textové pole ve formuláři viditelné
Zamčeno Určuje, zda lze data v textovém poli změnit
Index karty Pořadí každého ovládacího prvku podle toho, jak se uživatel pohybuje ve formuláři stisknutím klávesy Tab
Štítek Identifikuje název štítku spojeného s textovým polem
Šířka, výška, poloha nahoře a dole Označuje relativní polohu a velikost textového pole
Styl a barva pozadí Nastaví styl pozadí a barvu textového pole
Styl a barva ohraničení Nastaví styl a barvu okraje kolem textového pole
Velikost písma, váha, podtržení, kurzíva, barva a zarovnání Nastaví písmo a styl
Okraje a mezery odsazení – Nastaví okraje a odsazení kolem vnitřní části textového pole

Vlastnosti lze nastavit pomocí návrhového zobrazení a uložit s formulářem nebo sestavou. Vlastnosti lze také změnit pomocí kódu VBA během běhu formuláře. Chcete-li získat přístup k vlastnosti ve VBA, použijte název ovládacího prvku, poté tečku a poté název vlastnosti. Například následující kód změní barvu písma textového pole KódZákazníka na červenou:

CustomerID.ForeColor =vbRed

Následující části obsahují některá cvičení, která kombinují různé části programovacího jazyka VBA za účelem přizpůsobení chování různých formulářů pro zadávání dat.

Cvičení kódu VBA

Vyzkoušejte následující cvičení, která přizpůsobí formuláře. Vraťte se zpět do předchozích sekcí pro příklady kódu, který lze upravit tak, aby odpovídal aktuálnímu cvičení.

Cvičení 1

Upravte formulář CustomerDataEntry a přidejte dva obslužné rutiny události AfterUpdate, které převedou křestní jméno a příjmení na správná velká a malá písmena (vytvořte samostatnou obslužnou rutinu AfterUpdate pro každé textové pole). Před pokusem o převod textu nejprve zapište kód, abyste se ujistili, že textové pole není prázdné.

Cvičení 2

Upravte formulář AccountsDataEntry a přidejte obslužnou rutinu události AfterUpdate, která zobrazí okno s upozorněním, pokud je zůstatek účtu nižší než 5 000 $. Také změňte barvu písma textového pole Balance na červenou.

Cvičení 3

Upravte formulář pro zadání zákaznických dat. Vytvořte podprogram On Lost Focus, který změní popisek pro textové pole Jméno na červenou (vbRed), pokud uživatel opustí textové pole Jméno, aniž by cokoli napsal. Pokud je něco v textovém poli, nastavte štítek na modrý (vbBlue). V níže uvedeném příkladu nebylo nic zapsáno do textového pole Jméno a poté uživatel přešel na další textové pole, což způsobilo, že štítek Jméno zčervenal.

Další stránka tohoto kurzu pojednává o tom, jak zacházet s chybami v kódu VBA.

Ošetření chyb ve VBA

Kód VBA občas narazí na chybu. Pokud je například textové pole prázdné a my se pokusíme převést obsah textového pole na správná velká a malá písmena, funkce StrCnv selže. Dalším příkladem je dělení nulou. Bez ošetření chyb mohou tyto problémy způsobit selhání programu VBA. Když dojde k chybě, speciální kód může začít pracovat, aby chybu zpracoval a pokračoval ve zpracování kódu VBA.

Dvě hlavní funkce zpracování chyb VBA jsou příkaz On Error Goto a příkaz Resume Next. Tyto dva příkazy kódu VBA spolupracují, aby zabránily VBA zhroucení aplikace.

Příkaz On Error Goto informuje VBA o tom, co dělat, když v podprogramu dojde k chybě. Část příkazu Goto odkazuje na štítek jinde v kódu, kde bude VBA pokračovat v práci. Jakmile se program VBA dostane na štítek, jakákoli chyba se zobrazí v objektu nazvaném Err. Vlastnost Err.Description bude obsahovat textový popis poslední zjištěné chyby. Příkaz Resume Next způsobí, že program VBA bude pokračovat v běhu od okamžiku, kdy došlo k chybě.

Následující příklad rozšiřuje rutinu FirstName_AfterUpdate představenou na začátku tohoto kurzu. Nyní si program VBA dokáže poradit se všemi chybami, které se mohou v programu vyskytnout.

Private Sub FirstName_AfterUpdate
     ' Subroutine to convert the FirstName of the customer to Proper Case
    On Error Goto FirstName_AfterUpdate_Error_Handler
     FirstName = StrConv(FirstName, vbProperCase)
     ' If the conversion was successful, exit this subroutine
     Exit Sub
FirstName_AfterUpdate_Error_Handler:
       ' If there is an error show the description of the error
      MsgBox Err.Description
      ' Resume with the next statement In the subroutine
     Resume Next
End Sub

další část tohoto kurzu pojednává o tom, jak zahrnout kód SQL do jazyka VBA.

Spouštění vlastních dotazů SQL ve VBA

Structured Query Language (SQL) je programovací jazyk používaný v relačních databázích, jako jsou MS Access, SQL Server, Oracle a mnoho dalších. Příkazy SQL lze použít k vkládání, aktualizaci, mazání a načítání (výběru) datových záznamů z tabulek (mimo jiné). Jednoduchý příklad příkazu SQL by byl:

SELECT customerid, firstname, lastname
FROM  customer

SQL kód lze napsat v rámci VBA a spustit ve vhodnou dobu. Například lze zapsat podprogram VBA, aby se dotazoval na tabulku Customer a našel nejvyšší CustomerID. Pak bychom k tomuto číslu mohli přidat 1, abychom získali nové, nepoužité, CustomerID pro nový záznam.

Obecné kroky pro provedení tohoto typu úlohy jsou:

Vytvořte příkaz SQL

Spusťte příkaz SQL pomocí připojení k otevřené databázi (pojmenované ve VBA CurrentDb)

Získejte výsledné záznamy a použijte získaná data

Chcete-li vytvořit tento podprogram VBA, otevřete formulář CustomerDataEntry a získejte vlastnosti pole KódZákazníka. Na kartě události klikněte na tři tečky napravo od události On Dbl Click. Vyberte Tvůrce kódu a útržek se vytvoří následovně:

Private Sub CustomerID_DblClick(Cancel As Integer)

End Sub

Přidejte následující kód:

Private Sub CustomerID_DblClick(Cancel As Integer)
    ' Create a new CustomerID when user double-clicks in the CustomerID field
    On Error GoTo ErrorHandler
    Dim rstResults As Recordset ' This will hold the set of result records
    Dim strSQL As String        ' This variable will hold the text of the SQL Statement
    ' If there is nothing in the CustomerID text box
    If IsNull(CustomerID) Then
       ' Make the SQL statement
       strSQL = "SELECT MAX(customerid) + 1 AS NewID FROM customer"
       ' Run the SQL query against the current database
       Set rstResults = CurrentDb.OpenRecordset(strSQL)
       ' If at least 1 record is returned
       If rstResults.EOF = False Then
          ' Assign the NewID to the CustomerID field
          CustomerID = rstResults!NewID
       End If

        rstResults.Close              ' Close up the result set
       Set rstResults = Nothing      ' Empty out the result set
    End If
    Exit Sub

ErrorHandler:
    Set rstResults = Nothing
End Sub

Jakmile bude vše na svém místě, bude kód vypadat takto:

Uložte soubor a zobrazte formulář CustomerDataEntry. Přejděte na nový záznam a poté poklepejte na pole KódZákazníka. Nové CustomerID by mělo být vytvořeno automaticky.


  1. Jak vybrat první řádek pro každou skupinu v MySQL?

  2. Smyčka SQL Server – jak mohu procházet sadou záznamů

  3. JDBC vrací výjimku MySQLSyntaxError se správným příkazem

  4. 7 způsobů, jak vrátit všechny tabulky s primárním klíčem na SQL Server