Prisijunkite prie „Microsoft“
Prisijunkite arba sukurkite paskyrą.
Sveiki,
Pasirinkti kitą paskyrą.
Turite kelias paskyras
Pasirinkite paskyrą, kurią naudodami norite prisijungti.

Čia pateiktas turinys gali būti taikomas "Northwind 2.0 Developer Edition" ir "Starter Edition". 

VBA ("Visual Basic for Applications") yra programavimo kalba, naudojama visuose "Office" produktuose. Mokymosi VBA leidžia dirbti su visais "Office" produktais (ne tik "Access").
Ieškodami "how-to", būtinai ieškokite konkrečių "Access" pavyzdžių ir į iešką įtraukite "Microsoft Access". Dažnai veiks kitų "Office" produktų sprendimai, tačiau garantijų nėra. "Microsoft Access" yra suaugęs produktas; tai reiškia, kad čia yra daug pavyzdžių; kuris yra puikus jums! 

Tai taip pat reiškia, kad senesnės knygos dėl "Access" programavimo vis dar yra gyvybingos, kad galėtumėte peržiūrėti. Daugelis senesnių knygų vis dar yra naudojamose knygų svetainėse už jų pradinę kainą dalį. Peržiūrėkite "Microsoft" svetainę ir išsiaiškinkite, kurios "Access" versijos vis dar palaikomos, ir eikite su jomis.

"Office" palaikymo išteklių pabaiga – "Office" diegimas | Microsoft Learn  

Toliau pateikiami kai kurie saitai į "Access" dokumentaciją "Microsoft".

"Microsoft Access" failai yra "Office" failai. "Office" failai turi būti "patikimoje vietoje" arba turi būti įgalinti jų "turinys". Šie elementai laikomi patikimais, nes juos sukūrėte arba jie yra iš patikimo šaltinio. Tikrinti, ar yra patikimų vietų, įvyksta kiekvieną kartą atidarius bet kurį "Office" failą. Iš čia vadinsime jį patikimu / įgalintu. PASTABA: jei nauja programos versija bus išleista ir atidaryta iš nepatikimos vietos, turinio įgalinimo procesas pasikartos.

Sužinokite daugiau apie patikimas vietas.: 

Makrokomandos, funkcijos ir antriniai elementai yra verslo logikos pritaikymas "Access" duomenų bazei. Svarbu prieš pradedant suprasti aprėptį ir matomumą .


Formos valdiklių (pvz., mygtukų, teksto laukų, žymų ir t. t.) įvykiai (pvz., valdiklio spustelėjimas) suaktyvina kitus procesus, pvz., įrašų įtraukimą, naikinimą arba formų atidarymą. Šiuos procesus galima įgyvendinti naudojant makrokomandas arba VBA. "Northwind Starter Edition" daugiausia naudojamos makrokomandos, o kai kurios VBA – negali atlikti būtinų funkcijų. "Northwind Developer Edition" pirmiausia naudojama VBA. 

Kai kurie valdiklių tipai turi įtaisytuosius vediklius, kurie automatiškai sukuria makrokomandą. Pavyzdžiui, įtraukus komandos mygtuką į formą, atidaromas vediklis, siūlantis kelis mygtuko funkcijų pasirinkimus. Įtraukus pasirinktinio įvedimo lauką atidaromas vediklis, kurį galima konfigūruoti norint formoje rasti konkretų įrašą. 

Naršymo sritis yra pagrindinis būdas peržiūrėti ir pasiekti visus duomenų bazės objektus ir pagal numatytuosius parametrus rodoma "Access" lango kairėje pusėje. 
"Northwind" naršymo sritis buvo tinkinta. Sukūrėme pasirinktinę kategoriją pavadinimu "Northwind Starter 2.0". Tai leidžia mums tvarkyti objektus pagal funkcinę sritį.

Kartais reikia, kad kintamasis egzistuoti po objekto, kuris jį sukūrė, nepatenka į aprėptį. Žr. anksčiau pateiktą aprėptį ir matomumą . Tai atlikti galima trimis pagrindiniais būdais: Viešieji kintamieji, Laikinieji kintamieji ir Reikšmių saugojimas vietinėje lentelėje. Daugelis kūrėjų naudoja šiuos derinius. Kiekvienas turi savo privalumus ir trūkumus.  Daugiau apie kiekvieną čia: 

VBA modulis viešasis kintamasis: 

Laikiniejivarai: 

Reikšmių saugojimas vietinėje lentelėje

  • Dabartiniame seanse yra viešųjų kintamųjų ir laikinų kintamųjų, kurie uždarant programą nepatenka į aprėptį. Tačiau ką daryti, jei norite išlaikyti konkretaus vartotojo kintamuosius seansuose? Šių tipų reikšmes galite saugoti vietinėje lentelėje. "Northwind 2.0" vienas toks kintamasis įrašomas lentelėje, kuri vadinama "SystemSettings". Reikšmė lentelėje yra ShowWelcome. Ši reikšmė nurodo "Access", jei norite matyti darbo pradžios ekraną kiekvieną kartą prisijungę arba ne.

Kūrėjams dažnai reikia perduoti parametrus iš vienos formos į kitą arba iš formos į ataskaitą. Šie parametrai perteikia svarbią informaciją, kurią iškvies funkcija naudos konfigūruojant. Yra keli būdai, kaip antroji forma arba ataskaita gali gauti informacijos iš pirmosios formos. Štai keletas iš šių būdų: 

  1. Antroji forma gali "grąžinti" į pirmąją formą, kad paimtų kai kurias reikšmes, galbūt matomą arba nematomą valdiklį.  Pavyzdžiui:
    lngCustomerID = Forms!FirstForm!cboCustomerID 

  2. Pirmojoje formoje galima įrašyti reikšmes į visuotinius kintamuosius arba į laikinuosius kintamuosius. Pavyzdžiui:
    g_lngUserID = Me.cboUserID 
    TempVars.Add "UserID", Me.cboUserID 

Metodas, kuris dažnai naudojamas "Northwind Developer Edition" ir mūsų profesionaliame gyvenime, naudoja DoCmd.OpenForm arba OpenReport argumentą OpenArgs. Pavyzdžiui:

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

Sujungiame du būdus čia: (1) OpenArgs naudojimą, kad būtų galima perduoti VendorID ir VendorType, ir (2) funkcijos StringFormat() naudojimą, pvz., šiai eilutei sukurti: 

CompanyID=5&CompanyTypeID=2 

Ši eilutė atrodo labai panašiai kaip užklausos eilutė, naudojama naršyklėje. Jame yra viena ar daugiau "vardų / reikšmių porų", atskirtų ampersando simboliu: 

name1=value1&name2=value2


Tokios eilutės pranašumas yra tas, kad kiekviena reikšmė turi pavadinimą. Palyginkite tai su paprastesniu požiūriu, kai "OpenArgs" reikėtų nustatyti tik kaip "5,2".  Tokiu atveju reikėtų stengtis sužinoti, ką reiškia kiekviena reikšmė. Pavadinus kiekvieną reikšmę, užklausos eilutė "save apibūdina" yra gera programavimo praktika.

DoCmd.OpenForm gavimo pabaigoje paprastai esame Form_Open arba Form_Load įvykyje ir norime išanalizuoti "OpenArgs" eilutę į jos komponentus.

Programoje "Northwind" tai galite padaryti naudodami funkciją StringToDictionary . Užklausas primenanti funkcija analizuoja ją į komponentus. Tada šie komponentai saugomi objekte Scripting.Dictionary . Atkreipkite dėmesį, kad tam reikia naudoti įrankius > nuorodas ir nustatyti "Microsoft" scenarijų vykdymo laiko (scrrun.dll) nuorodą.

Žodyno objekto funkcijos ir pranašumai:  

  • Elementų tvarka nėra svarbi

  • Paprastos rinkinio elementų įtraukimo ir šalinimo funkcijos

  • Funkcijos, kurias naudojant kartojamas kolekcijos ciklas, kad galėtumėte sužinoti, kas joje yra

  • Funkcija Exists , todėl galite patikrinti, ar yra tam tikras elementas

Žodyno objekto naudojimas rodomas visoje "Northwind". Pvz., Form_Load įvykį frmGenericDialog.

Makrokomandos, sukurtos naudojant "Access" valdymo vediklius, retai apima klaidų tvarkymą; VBA, sukurtas naudojant valdymo vediklius, gali būti apribotas bendrąja MsgBox Err.Description.

"Northwind 2.0" parodysime, kaip tai padaryti geriau naudojant VBA kodą. Įdiegėme tai, kas vadinama visuotine klaidų apdorojimo programa. Bet kurioje procedūroje įvykusios klaidos iškviečia funkciją visuotiniu lygiu, kad būtų rodoma klaida. Didelis privalumas yra tai, kad klaidų tvarkymas yra nuoseklus. Ir jei reikia pakeisti pranešimą (pvz., papildomai rodyti klaidos numerį arba registruoti klaidą į failą), tai reikia padaryti tik vienoje vietoje. 

clsErrorHandler yra klasės modulis, kuris vykdo klaidos apdorojimo kodą. Klasės modulis visas pagrindines ir pagalbines funkcijas laiko kartu viename vienete, taip sudėdamas kodą.

Makrokomanda AutoExec iškviečia paleisties funkciją naudojant modStartup. "Starter Edition" funkcija sukuria "clsErrorHandler" egzempliorių ir įrašo jį kaip visuotinį kintamąjį, kurį galima naudoti visoje programoje. "Dev" leidime naudojama statinė klasė – peržiūrėkite komentarus klasės modulio viršuje.

Tiesą sakant, klaidų apdorojimo kodas procedūrose yra toks nuoseklus, kad galėtume jį sukurti per mažiau nei penkias minutes naudodami konkretų VBA kodą, kuris kiekvieną procedūrą pritrinko su tinkama klaidų apdorojimo programa. (Kodas neįtraukta į šabloną). "Northwind 2.0 Starter" ir "Developer" šablonų leidimai iš pradžių buvo pritaikyti taikant šį klaidų apdorojimo metodą. 
'

PATOBULINTAS KLAIDŲ APDOROJIMAS

Pradedant nuo "Northwind Developer Edition" 2.2 versijos, dėl "Access" bendruomenės atsiliepimų patobulinta klaidų apdorojimo programa. "Starter" leidimas nekeičiamas. 

Iš esmės ankstesnės versijos (2.0 – išleista 2023 m. balandžio mėn.) klaidų apdorojimo programa yra:

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


2.2 versijoje versija atnaujinta į:

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


Norėdami suprasti, kodėl šis pakeitimas buvo atliktas, pirmiausia supraskime, kuo vykdomas kodas:

  • Makrokomanda AutoExec iškviečia paleisties procedūrą, kuri atlieka kai kuriuos inicijavimus prieš atidarant pirmąją formą.

  • Vartotojas sąveikauja su programa, pvz., atidaro formą arba spustelėja mygtuką, todėl suaktyvėja įvykio procedūros, pvz., Form_Load ir cmdPrintInvoice_Click.
    '

Be įvykio procedūrų, programos turi paprogramių ir funkcijų – daugiausia moduliuose – ir tas kodas iškviečiamas iš įvykio procedūrų. Tai vadinama "standartinėmis" procedūromis.

"Northwind" 2.0 versijoje standartinės procedūros tvarkytų savo klaidas su pranešimais, tačiau jos kažkaip nepraneštų skambinimo įvykio procedūrai, kad įvyko klaida. Tai gali būti blogai, jei įvykio procedūroje yra paskesnis kodas, kuris turėtų veikti neatsižvelgiant į ankstesnę klaidą, kurią apdoroja iškviestos procedūros. Žinoma, paprogramę galėjome pakeisti funkcija, kuri grąžina sėkmingą arba nesėkmingą klaidą, ir atitinkamai koduoti įvykio procedūrą, bet tai ne visada yra parinktis.

Naudojant "Northwind" 2.2 versiją, standartinės procedūros neapdoroja klaidų pranešimų, o naudojant Err.Raise praneša apie jas atgal į skambinimo įvykio procedūrą. Tada skambinimo įvykio procedūra rodo kilusią klaidą ir tęsiama Exit_Handler. Tai geriau, nes tai leidžia skambinimo procedūrai sklandžiai užbaigti.

Norint naudoti "Northwind" 2.2 versijos kodą, įvykio procedūros turi pereiti į HandleError trečias argumentas, nurodantis, kad skambinantysis yra įvykio procedūra. "Northwind Dev Edition" buvo atnaujintas, kad tai padarytų.

Dar galingesnis klaidų apdorojimo modulis palaikytų "stūmimą ir iššokantį" procedūras "šūsnies" (masyvo) metu. Pirmasis elementas visada būtų įvykio procedūra, todėl papildomo argumento nereikia. Šis įgyvendinimas nėra "Northwind Dev Edition" tikslų.

MRU arba Vėliausiai naudoti yra vėliausiai naudotų užsakymų ir pirkimo užsakymų sąrašas. Galbūt norėsite dažnai prie jų grįžti, kad būtų rodoma kita būsena. MRU sąrašai dažnai "Office" produktuose matomi kaip vėliausiai naudotų failų, kuriuos galbūt norėsite vėl atidaryti, sąrašas.

"Northwind Dev" leidime, norėdami įdiegti MRU funkciją (kurios nėra "Starter" leidime), pirmiausia turite nustatyti šiuos elementus: 

  1. Lentelė, kurioje saugoma MRU informacija.

  2. Kodas, skirtas atnaujinti lentelę, kai atidaromas užsakymas arba pirkimo užsakymas (PU).

  3. Kodas, skirtas juostelės išplečiamajame sąraše MRU atnaujinti.

  4. Kodas, skirtas įkelti elementą, kai juostelėje pasirenkamas MRU elementas.

Apžvelkime kiekvieną iš jų išsamiau. 


1. Lentelė, kurioje saugoma MRU informacija.

Mru yra verta peržiūrėti lentelės dizainą, ypač jo indeksus. Atkreipkite dėmesį, kad yra pasikartojantis indekso SortIdx , padedantis greitai surikiuoti MRU elementus juostelės išplečiamajame sąraše, taip pat unikalus indeksas, įgalinantis verslo taisyklę, kad kiekvienas vartotojas gali atsirasti tik vieną kartą. Pvz., atidarant tą pačią tvarką du kartus, lentelėje MRU nesukuriate dviejų įrašų.


Lentelėje naudojamas faktas, kad visi duomenų bazės su MRU susiję FK (pirminio rakto) laukai yra automatinis numeravimas, todėl ilgojo sveikojo skaičiaus duomenų tipą galima naudoti PKValue.

2. Kodas, skirtas atnaujinti lentelę, kai atidaromas užsakymas arba P.O.

NW2 pasirinkome įtraukti į MRU sąrašą tik tada, kai buvo sukurtas naujas įrašas, o ne tada, kai esamas buvo atnaujintas dar kartą. Tikrai galime perkelti AddToMRU skambutį iš Form_AfterInsert į Form_AfterUpdate , kad palaikytume.

Procedūros AddToMRU ir DeleteFromMRU įgyvendinamos modGlobal, kuris yra standartinis modulis, kurio viešosios procedūros matomos iš bet kurios formos.

AddToMRU (kaip nurodyta pavadinime) įtraukia naują elementą į lentelę MRU, tada pasirinktinai panaikina seniausią įrašą, jei jis viršijo maksimalų dydį (MAX_MRU_COUNT). Paskutinis veiksmas tikriausiai yra mažiausiai žinomas "Access" kūrėjams: juostelės išplečiamasis sąrašas turi būti atnaujintas ir tai pavyksta iškviečiant InvalidateControl. Tai signalas juostelei iš naujo paleisti inicijavimo procesą. 

3. Kodas, skirtas atnaujinti MRU išplečiamąjį sąrašą juostelėje. 

Paleidžiant ir iškvietus InvalidateControl , vykdomas sudėtinis funkcijų rinkinys, kad būtų užpildyta juostelė.  Šias procedūras iš dalies nurodo lentelės uSysRibbons juostelės XML.

<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>

Šios keturios atgalinio skambinimo funkcijos automatiškai užpildo išplečiamąjį sąrašą. Atkreipkite dėmesį, kad tai yra labai pati idėja, kaip aprašyta čia standartinių pasirinktinio įvedimo dėžučių.

Jei atšauksite " Debug.Print " linijų modRibbonCallback ir iš naujo paleisite programą, tiesioginis langas pateiks tokią seką: 

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


Čia matome, kad "Access" pirmiausia iškviečia procedūrą, kuri pateikia elementų, kuriuos reikia įkelti, skaičių ddMRU_GetItemCount argumente ByRef. Tai taip pat laikas, kai atidarome užklausą MRU lentelėje ir ją laikome talpykloje, nes ji bus naudojama kelis kartus. 

Tada juostelė kelis kartus iškviečia dvi procedūras, kad gautų dviejų stulpelių išplečiamojo sąrašo ID ir žymos reikšmes. 

Galiausiai, ji ragina atlikti procedūrą, kad būtų galima pašalinti, kuris elementas turėtų būti pasirinktas. (Mūsų atveju tai pirmas.) 

4. Prekės įkėlimo kodas, kai mru elementas pasirenkamas iš juostelės.

Kaip ir bet kurio kito juostelės elemento atveju, juostelės XML ypatybė OnAction nurodo atgalinio iškvietimo funkciją, kuri bus naudojama veiksmui atlikti:

onAction="ddMRU_OnAction"

Ši procedūra įdiegta modRibbonCallback. Jis iš naujo naudoja jau atidarytą įrašų rinkinį, kad rastų įrašą su pasirinktu elementu, tada, atsižvelgiant į būtiną Lentelėspavadinimas, atidaro atitinkamą formą, perduodamą Įkeliama FK reikšme.

Reikia daugiau pagalbos?

Norite daugiau parinkčių?

Sužinokite apie prenumeratos pranašumus, peržiūrėkite mokymo kursus, sužinokite, kaip apsaugoti savo įrenginį ir kt.

Bendruomenės padeda užduoti klausimus ir į juos atsakyti, pateikti atsiliepimų ir išgirsti iš ekspertų, turinčių daug žinių.

Ar ši informacija buvo naudinga?

Ar esate patenkinti kalbos kokybe?
Kas turėjo įtakos jūsų įspūdžiams?
Paspaudus mygtuką Pateikti, jūsų atsiliepimai bus naudojami tobulinant „Microsoft“ produktus ir paslaugas. Jūsų IT administratorius galės rinkti šiuos duomenis. Privatumo patvirtinimas.

Dėkojame už jūsų atsiliepimą!

×