sql >> Database teknologi >  >> RDS >> Access

Visual Basic til applikationer i Microsoft Access

Introduktion

Microsoft Access indeholder en række funktioner, der giver databaseudviklere mulighed for at oprette dataindtastningsformularer, rapporter og forespørgsler, der kan guide brugere i at forespørge om eksisterende data i databasen og indtaste nye data. Forskellige forespørgselsbygger- og guideværktøjer letter denne udviklingsproces. Selv med disse værktøjer kan der dog være situationer, hvor udvikleren gerne vil tilføje endnu mere funktionalitet, som ikke allerede leveres af MS Access-udviklingsværktøjerne. For eksempel kan udvikleren ønske automatisk at rette dårlige data, før de gemmes i databasen, vise en advarsel, hvis en forretningsregel er overtrådt, hjælpe brugeren med at navigere fra en dataindtastningsformular til en anden eller starte en rapport med nogle tilpassede filtre. Måden at opnå en sådan tilpasning er ved at tilføje kode ved hjælp af Visual Basic for Applications-programmeringssproget.

Visual Basic for Applications (VBA) er det programmeringssprog, der bruges i Microsoft Office-familien af ​​softwareprodukter såsom Excel og Access. VBA-sproget er afledt af "Basic"-sproget opfundet i 1964, som blev populært på personlige computere i 1970'erne. Den "Visuelle" del af navnet blev tilføjet af Microsoft for at afspejle brugen af ​​det grundlæggende programmeringssprog i Microsoft Windows.

Der er mange tutorials, der introducerer grundlæggende programmering. Denne vejledning vil fokusere på en lille undergruppe af funktioner i VBA-sproget, som bruges i MS Access.

Indhold

  • Begivenheder i Microsoft Access
  • VBA-kodeeksempel:Sikring af, at navnene er korrekte
  • VBA-sproget – Erklæring og tildeling til variabler, betingede erklæringer og kommentarer
  • VBA-sproget – funktioner, metoder og eksempler
  • VBA-sproget – egenskaber
  • VBA-kodningsøvelser
  • Håndtering af fejl i VBA
  • Kørsel af tilpassede SQL-forespørgsler i VBA

Den næste side introducerer begivenheder i Microsoft Access.

Begivenheder i Microsoft Access

I Access er VBA-programmeringskode knyttet til formularer og rapporter og kan sættes op til at køre på et bestemt tidspunkt eller som reaktion på en specifik hændelse. Denne programmeringsstil omtales nogle gange som "begivenhedsbaseret" programmering, hvilket betyder, at koden udvikleren skriver vil køre som svar på en begivenhed .

Når en formular vises i formularvisning, vil den generelt forespørge på eksisterende data fra de underliggende tabeller og så bare sidde der i tomgang, indtil brugeren gør noget. For eksempel kan brugeren klikke på en af ​​navigationsknapperne for at gå til den næste post, de kan klikke ind i en tekstboks og begynde at indtaste nogle nye data, eller de kan klikke på knappen Luk for at lukke formularen. Hver af disse handlinger resulterer i en begivenhed sker i form. Hvert klik med musen eller tastaturet håndteres som en begivenhed.

For det meste har begivenheder en standardadfærd. Hvis du klikker på navigationsknappen "næste post", får formularen til at rulle til den næste datapost. Hvis du skriver bogstavet "C", når markøren er i en tekstboks, vises bogstavet "C" i tekstboksen. Et tryk på TAB-tasten får markøren til at hoppe til næste tekstfelt (eller kontrolelement) på formularen og så videre. En programmør kan tilsidesætte eller forbedre denne standardadfærd og indsætte deres egen kode, der skal køres som svar på hændelsen.

VBA-programmering på adgangsformularer og -rapporter er hovedsageligt fokuseret på at skrive kode for at reagere på forskellige hændelser.

Før du dykker ned i detaljerne i begivenheder, kan det være lærerigt at implementere et simpelt eksempel. For at se noget kode i aktion giver næste afsnit af denne øvelse en gennemgang af tilføjelse af VBA-kode til en dataindtastningsformular.

VBA-kodeeksempel:Sikring af, at navnene er korrekte

Det følgende er et relativt kort og enkelt eksempel på tilføjelse af VBA-kode til en dataindtastningsformular i MS Access. Flere detaljer vil blive sprunget over for kortheds skyld. Efter dette eksempel vil resten af ​​denne øvelse udfylde disse detaljer.

Dette eksempel bruger Kunden dataindtastningsformular, der blev tilpasset i selvstudiet Advanced MS Access Forms. Du ønsker måske at fuldføre selvstudiet (eller i det mindste de dele, der omhandler formularen til indtastning af kundedata), før du fortsætter.

Ved indtastning af nye kundeoplysninger vil vi gerne sikre os, at kundens navne er indtastet med "korrekt bogstav". Det vil sige, at det første bogstav i navnet skal være et stort bogstav, og resten af ​​navnet skal være med små bogstaver. Hvis brugeren indtaster:"Joe", vil vi gerne have, at formularen automatisk retter dette til korrekte bogstaver:"Joe".

Med hensyn til hændelser tilføjer vi kode, der er forbundet med Efter opdatering-begivenheden for feltet Fornavn på kundeformularen. Det betyder, at efter noget er blevet ændret (opdateret ) i feltet Fornavn udløses begivenheden Efter opdatering, og derefter vil koden, vi skriver, træde i kraft for at sikre, at det navn, der blev indtastet, konverteres til store og små bogstaver.

Følgende trin sætter denne kode på plads.

  1. Åbn kundedataindtastningen i designtilstand.
  2. Højreklik på Fornavn tekstboks og vælg Egenskaber fra pop op-menuen.
  3. Når Ejendomsarket vises, skal du klikke på fanen Begivenhed. Dette er vist i nedenstående figur:

    Bemærk listen over begivenheder, der vises. Hver enkelt kan programmeres til at reagere på den specifikke hændelse, der sker med Fornavn tekstboks.

  4. Opret en ny hændelseshandler ved at klikke på de tre prikker til højre for begivenheden Efter opdatering.
  5. Vælg Builder vinduet vises. Vælg Code Builder og klik derefter på OK knap.
  6. VBA-koderedigeringsvinduet vises. Bemærk, at Access allerede har oprettet underrutine-stubben, som begynder med ordene Private Sub og slutter med ordene End Sub.
    Navnet på underrutinen oprettes ved at bruge navnet på formularkontrollen (FirstName) og navnet på Hændelse, som denne underrutine vil reagere på (AfterUpdate).

    Linjen End Sub er, hvor denne særlige underrutine vil afslutte.

  7. Tilføj følgende kode på den tomme linje mellem Private Sub og End Sub.:
    FirstName = StrConv(FirstName, vbProperCase)
    
    

    Når den er fuldført, vises koden som følger:

    Denne nye kodelinje gør følgende:

    StrConv er en funktion, der tager indholdet af FirstName-tekstboksen ind og konverterer det i henhold til den anden parameter, der er givet, som er vbProperCase i dette eksempel. Efter denne konvertering er udført, vil resultatet blive tildelt (ved hjælp af lighedstegnet) tilbage til Fornavn tekstboksen. Dette vil overskrive alt, der i øjeblikket er i tekstboksen Fornavn. For eksempel vil denne funktion tage "sally", konvertere den til "Sally" og derefter sætte "Sally" i Fornavn tekstboksen.

  8. Gem denne nye kode ved at trække ned i Filer menuen og vælg Gem .
  9. Test den nye kode. Skift tilbage til skærmbilledet Microsoft Access Design Mode. Skift visningen til formularvisning.
  10. Naviger til en tom post. Klik på feltet Fornavn og indtast et navn med små bogstaver:

  11. Tryk på fanen tasten for at gå til næste tekstfelt. Joes navn skal ændres til "Joe" som vist nedenfor:
  12. Hvis du modtager en fejl, skal du skifte tilbage til VBA-kodeeditoren og sikre dig, at du har stavet alle dele af koden korrekt. Du skal muligvis trække Kør ned menuen og vælg Nulstil for at stoppe VBA-koden i at køre.

Ovenstående eksempel gav et hurtigt kig på, hvordan man kan tilpasse adfærden af ​​en formular for at hjælpe brugeren med at indtaste pænt formaterede data i databasen. Flere detaljer blev sprunget over i dette eksempel, og disse detaljer vil blive diskuteret i resten af ​​denne øvelse.

VBA-sproget

Dette afsnit introducerer kort de vigtigste dele af VBA-sproget, som det bruges i MS Access. En omfattende oversigt over VBA ligger uden for denne tutorials omfang. Referencer til mere omfattende bøger og materialer findes i slutningen af ​​denne øvelse.

Angivelse af variabler

En variabel er et navn givet til en pladsholder, hvor programmøren kan gemme nogle data. For eksempel kan en variabel bruges til at gemme et tal, mens vi udfører nogle matematiske operationer på det eller sammenligner dets værdi med andre variable. Variabler kan erklæres til at indeholde værdier af en specifik datatype såsom heltal, strenge eller datoer. For at erklære en ny variabel skal du bruge Dim-sætningen. For eksempel at erklære en ny variabel ved navn MitNavn og sæt den op til at holde en streng (tegn), gør følgende:

Dim strMyName As String

For at erklære en ny variabel ved navn "AccountBalance" og indstille den til at gemme et tal med en decimal, skal du bruge følgende:

Dim dblAccountBalance As Double

Tildeling af værdier

En værdi kan tildeles til en variabel eller til en kontrol på formularen ved hjælp af lighedstegnet. For at gemme navnet "Alex" i MyName-variablen, skal du f.eks. bruge følgende:

strMyName =“Alex”

Brug:

for at kopiere indholdet af tekstboksen Fornavn til variablen Mit Navn

strMitNavn =[Fornavn]

Værdier kan også beregnes, før de tildeles. For eksempel tager det følgende udtryk den aktuelle kundes kontosaldo fra tekstboksen [Saldo], tilføjer 1 % rente (ved at gange saldoen gange 1,01) og reducerer derefter resultatet med 10 USD. Til sidst tildeles resultatet til variablen AccountBalance.

dblAccountBalance =( [Saldo] * 1,01 ) – 10,00

Betingede erklæringer

En betinget sætning bruger en logisk test til at bestemme, hvilke linjer kode der skal køres næste gang. If … Then betinget sætning bruges ret ofte. For eksempel:

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

Det logiske udtryk AccountBalance <1000 evalueres. Hvis dette udtryk er sandt (for eksempel hvis AccountBalance er $400), køres den næste linje efter Then. I dette eksempel er MonthlyFee =10.

Hvis dette udtryk er falsk, køres linjen efter Else.

Det logiske udtryk kan omfatte flere dele, der er forbundet med de boolske operatorer OR, AND og NOT. En mere grundig diskussion af booleske udtryk kan findes i denne programmeringsvejledning. Antag for eksempel, at vi giver afkald på det månedlige gebyr, hvis kontoen er mindre end et år gammel. Antag, at vi har AccountAge som alderen på kontoen i måneder. Så ville koden være:

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

Mere end én kodelinje kan køres i If … Then-sætningen og If … Then-sætningerne kan indlejres i hinanden.

Kommentarer

Når du programmerer i et hvilket som helst programmeringssprog, er det god praksis at inkludere kommentarer, der beskriver koden. I VBA kan en kommentar medtages ved at starte med et enkelt citat. Tager vi ovenstående som et eksempel, kan vi tilføje følgende kommentarer:

Flere dele af VBA-sproget diskuteres på næste side.

VBA-sprog – fortsat

Funktioner

VBA-sproget har en lang række indbyggede funktioner og metoder, der kan bruges til at udføre forskellige opgaver såsom matematiske funktioner (sin, cos, tan), strengfunktioner og mange andre. Funktioner har typisk en eller flere inputparametre, som bruges af funktionen. For eksempel, i funktionen Cos(45) er "45" inputvinklen, som cosinusfunktionen vil fungere på. StrConv-funktionen kræver to inputparametre:strengen, der skal konverteres, og konverteringsstilen:

StrConv(FirstName, vbProperCase)

Nogle praktiske funktioner omfatter:

MsgBox( prompt, knapper, titel) Vis en pop op-meddelelsesboks med prompttekst, knapper og titel
StrConv( udtryk, stil ) Konverter strengudtrykket til store, små eller rigtige bogstaver
Venstre( udtryk, tegn ) Tag de mest venstre tegn fra strengudtrykket
Mid (udtryk, start, tegn ) Tag det midterste sæt af tegn fra strengudtrykket startende ved start
IsNull( udtryk ) Test om strengudtrykket (eller tekstboksen) ikke har noget indhold (er null)
Nz( udtryk, værdi_hvis_nul ) Hvis udtrykket er null, skal du indtaste en standardværdi
Nu() Returnerer den aktuelle dato og det aktuelle klokkeslæt
Runde(udtryk, decimaler ) Runder det numeriske udtryk til et eller andet antal decimaler
RGB( rød, grøn, blå ) Returnerer farveheltallet baseret på en kombination af rød, grøn og blå

Metoder

Metoder i VBA er ligesom funktioner, men de er forbundet med en kontrol eller et andet objekt på en formular eller rapport.

Nogle praktiske metoder omfatter:

DoCmd.CancelEvent Annullerer den aktuelle begivenhed, der håndteres
DoCmd.Close Luk den aktuelle formular (eller database)
DoCmd.OpenForm Åbner en ny formular
DoCmd.OpenReport Kør en MS Access-kommando, såsom at gemme nye eller opdaterede data, fortryde en ændring eller afslutte en formular
.SetFocus Sæt fokus på kontrollen på formularen
.Fortryd Fortryd den seneste ændring eller kommando
.Opdater Opdaterer alle de data, der ligger til grund for en formular
.Forespørgsel Anmoder om de data, der leveres til en formular
.Genmaling Genmaler alle kontrolelementerne på en formular

Mange flere funktioner og metoder er angivet på dette Microsoft-websted.

Det følgende sæt eksempler gør brug af forskellige funktioner og metoder i forskellige kombinationer.

Eksempler

Vis brugeren en advarsel, hvis kontosaldoen er under $1.000

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

Hvis tekstfeltet Fornavn på formularen indeholder noget, så konverter det til store og små bogstaver

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

den næste side introducerer egenskaber for forskellige objekter.

Egenskaber

Hvert element i en dataindtastningsformular eller rapport har et sæt egenskaber forbundet med det. Egenskaber styrer placering, farve, skrifttype, baggrund og andre udseende- og formateringsattributter for hver kontrol. For eksempel inkluderer nogle af de mange egenskaber ved en tekstboks:

Synlig Afgør, om tekstboksen er synlig på formularen
Låst Afgør, om data i tekstboksen kan ændres
Faneindeks Rækkefølgen af ​​hvert kontrolelement, når brugeren navigerer i formularen ved at trykke på Tab
Etiket Identificerer navnet på den etiket, der er knyttet til tekstboksen
Bredde, Højde, Top og Bund position Angiver den relative placering og størrelse af tekstboksen
Baggrundsstil og -farve Indstiller baggrundsstilen og farven på tekstboksen
Kantstil og farve Indstiller stilen og farven på rammen omkring tekstboksen
Skriftstørrelse, vægt, understregning, kursiv, farve og justering Indstiller skrifttype og stil
Margener og udfyldningsafstand – Indstiller margener og udfyldning omkring indersiden af ​​tekstboksen

Egenskaber kan indstilles ved hjælp af designvisningen og gemmes med formularen eller rapporten. Egenskaber kan også ændres ved hjælp af VBA-kode, mens formularen kører. For at få adgang til en ejendom i VBA skal du bruge navnet på kontrollen, derefter et punktum og derefter navnet på ejendommen. Følgende kode ændrer f.eks. skriftfarven på tekstboksen CustomerID til Rød:

CustomerID.ForeColor =vbRed

De følgende afsnit indeholder nogle øvelser, der kombinerer forskellige dele af VBA-programmeringssproget for at tilpasse adfærden for forskellige dataindtastningsformer.

VBA-kodeøvelser

Prøv følgende øvelser, der tilpasser formularer. Se de foregående afsnit for eksempler på kode, der kan tilpasses til den aktuelle øvelse.

Øvelse 1

Rediger CustomerDataEntry-formularen for at tilføje to AfterUpdate-hændelseshandlere, der konverterer fornavnet og efternavnet til store og små bogstaver (Opret en separat AfterUpdate-handler for hver tekstboks). Skriv kode for først at kontrollere, at tekstboksen ikke er nul, før du forsøger at konvertere teksten.

Øvelse 2

Rediger AccountsDataEntry-formularen for at tilføje en AfterUpdate-hændelseshandler, der viser en advarselsboks, hvis kontosaldoen er under $5.000. Gør også skriftfarven i tekstboksen Balance til rød.

Øvelse 3

Rediger formularen til indtastning af kundedata. Opret en ved mistet fokus-underrutine, der gør etiketten for tekstfeltet Fornavn rød (vbRed), hvis brugeren forlader tekstfeltet Fornavn uden at skrive noget. Indstil etiketten til blå (vbBlue), hvis der er noget i tekstboksen. I eksemplet nedenfor blev der ikke skrevet noget i tekstfeltet Fornavn, og brugeren gik derefter med tabulator til næste tekstfelt, hvilket fik Fornavn-etiketten til at blive rød.

Den næste side i denne vejledning diskuterer, hvordan man håndterer fejl i VBA-kode.

Håndtering af fejl i VBA

Af og til vil VBA-kode løbe ind i en fejl. For eksempel, hvis en tekstboks er tom, og vi forsøger at konvertere indholdet af tekstboksen til store og små bogstaver, vil StrCnv-funktionen mislykkes. Et andet eksempel er, når division med nul sker. Uden fejlhåndtering kan disse problemer få VBA-programmet til at gå ned. Når der opstår en fejl, kan en speciel kode komme i gang for at håndtere fejlen og fortsætte med at behandle VBA-koden.

De to vigtigste fejlhåndteringsfunktioner i VBA er On Error Goto-erklæringen og Resume Next-erklæringen. Disse to VBA-kodesætninger arbejder sammen for at forhindre, at VBA crasher applikationen.

On Error Goto-erklæringen informerer VBA om, hvad der skal gøres, når der opstår en fejl i en underrutine. Goto-delen af ​​erklæringen henviser til en etiket andetsteds i koden, hvor VBA'en vil fortsætte med at arbejde. Når først VBA-programmet kommer til etiketten, vil enhver fejl dukke op i et objekt kaldet Err. Ejendommen Err.Description vil indeholde en tekstbeskrivelse af den seneste fejl. Resume Next-sætningen vil få VBA-programmet til at fortsætte med at køre fra det punkt, efter fejlen opstod.

Følgende eksempel udvider rutinen FirstName_AfterUpdate, der blev introduceret i starten af ​​denne øvelse. Nu kan VBA-programmet håndtere eventuelle fejl, der måtte opstå i programmet.

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

det næste afsnit af denne øvelse diskuterer, hvordan man inkluderer SQL-kode i VBA.

Kørsel af tilpassede SQL-forespørgsler i VBA

Structured Query Language (SQL) er programmeringssproget, der bruges i relationelle databaser som MS Access, SQL Server, Oracle og mange andre. SQL-sætninger kan bruges til at indsætte, opdatere, slette og hente (vælge) dataposter fra tabeller (blandt mange andre muligheder). Et simpelt eksempel på en SQL-sætning ville være:

SELECT customerid, firstname, lastname
FROM  customer

SQL-kode kan skrives i VBA og køres på et passende tidspunkt. For eksempel kunne en VBA-underrutine skrives for at forespørge i kundetabellen for at finde det højeste kunde-id. Så kunne vi tilføje 1 til dette tal for at opnå et nyt, ubrugt, kunde-id for en ny rekord.

De generelle trin til at udføre denne type opgave er:

Opret en SQL-sætning

Kør SQL-sætningen ved hjælp af den åbne databaseforbindelse (kaldet CurrentDb i VBA)

Hent de resulterende poster og brug de hentede data

For at oprette denne VBA-underrutine skal du åbne CustomerDataEntry-formularen og få egenskaberne for feltet CustomerID. Under fanen begivenheder skal du klikke på de tre prikker til højre for begivenheden On Dbl Click. Vælg Code builder og stubben vil blive oprettet som følger:

Private Sub CustomerID_DblClick(Cancel As Integer)

End Sub

Tilføj følgende kode:

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

Koden vil se sådan ud, når den er på plads:

Gem filen, og se derefter CustomerDataEntry-formularen. Naviger til en ny post, og dobbeltklik derefter i feltet CustomerID. Der skal automatisk oprettes et nyt kunde-id.


  1. Kan ikke oprette forbindelse til lokal PostgreSQL

  2. INDIEN, STD Code Finder Script i PHP, MYSQL, JQUERY

  3. Sådan skriver du udvalgte erklæringer

  4. Kan ikke trække offset-naive og offset-bevidste datotider