B3 MS Access Practicumopdracht 8 - Institute For Computing And .

Transcription

KUN: B3: Systematisch ontwikkelen van eenvoudige informatiesystemenPracticumopdracht 8B3 – cursusMS Access practicumopdracht 8Inhoud: Losse opmerkingen over: Immediate IF-functie (IIF) en het SendKeys-commando Form voor een één-op-véél-op-véél –relatie via 2 subforms Form voor een één-op-véél-op-véél –relatie via keuzelijst subform Het locken van file/pages/. . Menu- en werkbalken, opstarten e.d.Tip: er bestaat een met MS Office meegeleverde MS Access-database met ‘Antwoorden voorontwikkelaars’ die je aan kunt treffen bij de ‘Noordenwind’-database (zoek in de MSOffice / Office /Voorbeeld-directory.8.1 Een aantal ‘losse opmerkingen’ ter voorbereiding8.1.1De Immediate-IF-functie IIF voor gebruik in expressiesHet komt wel vaker voor, dat we een ‘berekende’ waarde aan een ‘berekend’-besturingselement willentoekennen, terwijl de uitkomst van die ‘berekening’ af kan hangen van bijvoorbeeld het al dan nietingevuld zijn van een andere waarde.Uit de MS Access-Help halen we:Voorbeelden van het als resultaat geven van één van twee mogelijke waarden in formulierenen rapportenDe volgende tabel bevat voorbeelden van expressies die u kunt gebruiken in berekendebesturingselementen in formulieren en rapporten.Expressie IIf([Bevestigd] "Ja"; "Orderbevestigd"; "Order niet bevestigd") IIf(IsNull([Land]); " "; [Land]) IIf(IsNull ([Land]); [Postcode] & " "& [Plaats]; [Postcode] & " " & [Plaats]& " " & [Land])BeschrijvingHier wordt de functie IIf gebruikt om het bericht 'Orderbevestigd' weer te geven als het besturingselementBevestigd de waarde Ja heeft. Anders wordt het bericht'Order niet bevestigd' weergegeven.Hier wordt de functie IIf gebruikt om een lege tekenreeksweer te geven als het besturingselement Land een Nullwaarde heeft. Anders wordt de waarde van hetbesturingselement Land weergegeven.Hier wordt de functie IIf gebruikt om de waarden van debesturingselementen Postcode en Plaats weer te geven alsLand een Null-waarde heeft. Anders worden de waardenvan Postcode, Plaats en Land weergegeven.Vooral in combinatie met de functie IsNull ( . . ) kunnen er krachtige expressies worden samengesteld.Die IsNull-functie kan bijvoorbeeld gebruikt worden om te laten bepalen of nog niets in een invoerveldis ingevoerd, of er al een keuze via een keuzelijst is bepaald etc.8.1.2Het SendKeys-commandoUit de MS Access-Help halen we:Via de SendKeys -instructie kun je een of meer toetsaanslagen naar het actieve venster zenden alsof deze ophet toetsenbord werden getypt . . . Als u tekens wilt zenden die niet worden weergegeven wanneer u op eentoets drukt (bijvoorbeeld ENTER of TAB ) en toetsen die een handeling in plaats van een teken weergeven,gebruikt u de onderstaande programmacode:ToetsBACKSPACEBREAK(C) NIII School voor InformaticaProgrammacode{BACKSPACE}, {BS} of {BKSP}{BREAK}1KUN Nijmegen

KUN: B3: Systematisch ontwikkelen van eenvoudige c.Practicumopdracht 8{DOWN}{END}{ENTER}of {ESC}{HELP}{HOME}Zendt een of meer toetsaanslagen naar het actieve venster alsof deze op het toetsenbord werden getypt.Syntax:SendKeys string[, wait]waarbij het argument ‘string’ vereist is en een tekenreeksexpressie is die de te zenden toetsaanslagenaangeeft (denk vanwege dat ‘string’ aan het plaatsen tussen “ en ”). Het argument ‘wait’ is een optioneleBoolean-waarde die de wachtmodus aangeeft.Als je dus bijvoorbeeld een push button ‘Afbreken’ (of ‘Cancel’) wilt gebruiken om ergens ‘uit tebreken’ (bijvoorbeeld omdat niet voldaan wordt aan een validatieregel en je ergens beslist een geldigegegevenswaarde moet intikken, terwijl je die niet tot je beschikking hebt), dan kun je als code onderzo’n push button het volgende commando gebruiken: SendKeys “{ ESC }”Het naar boven of naar beneden verplaatsen van ‘de selectie’ in bijvoorbeeld een keuzelijst, kan [als diekeuzelijst de focus heeft] gebeuren via SendKeys “{UP}” respectievelijk SendKeys “{DOWN}”.8.2 Form voor een één-op-véél-op-véél -relatie via 2 subformsUit de MS Access-Help, behorend bij de database ‘Antwoorden voor ontwikkelaars’ halen we:Toegepaste technieken in het formulier Omzettotalen:Aan de hand van het formulier Omzettotalen wordtuitgelegd hoe de verkoopcijfers van een medewerker steedsgedetailleerder kunnen worden weergegeven. De volgendetechniek is toegepast in het getoonde formulier:Een een-op-veel-formulier makenBij het bekijken van gegevens is het mogelijk dat u de enekeer een samenvatting en de andere keer een gedetailleerdoverzicht wilt weergeven. Met het formulier Omzettotalenkunt u de jaarlijkse omzettotalen weergeven voor degeselecteerde verkoper en vervolgens voor dezelfdeverkoper de omzettotalen per kwartaal weergeven voor hetgeselecteerde jaar.Overzicht/aanpak:Maak een subformulier waarin de totalen per jaar worden weergegeven en maak een ander subformulierwaarin de totalen per kwartaal worden weergegeven. Maak een hoofdformulier dat afhankelijk is van de tabelWerknemers. Maak in de formulierkoptekst van het hoofdformulier een niet-afhankelijke keuzelijst metinvoervak waarin u records voor de geselecteerde werknemer kunt zoeken. Maak in de detailsectie van hethoofdformulier een niet-afhankelijk tekstvak waarmee het tweede subformulier wordt gekoppeld aan het eerstesubformulier. Stel de eigenschap Besturingselementbron (ControlSource) van het tekstvak in op een expressiewaarmee de waarde wordt weergegeven uit Doeljaar, het veld in het eerste subformulier waaraan wordtgekoppeld. Stel de eigenschappen Subvelden koppelen (LinkChildFields) en Hoofdvelden koppelen(LinkMasterFields) van het tweede subformulier in op de velden die de medewerker en het jaar aanduiden,namelijk Werknemer-id en Doeljaar.De grote truuk bij dit geheel is nu het via een onzichtbaar veld getrapte koppelingsmechanisme:Maak in de detailsectie een verborgen tekstvak en stel de eigenschappen van het tekstvak als volgt in:EigenschapInstellingNaam (Name)DoeljaarBesturingselementbron (ControlSource) [Subformulier Omzettotalen 1]![Doeljaar]Zichtbaar (Visible)NeeTabstop (TabStop)NeeOpmerking: Met behulp van de waarde in dit tekstvak worden de waarden in het Subformulier Omzettotalen 2gekoppeld aan de geselecteerde rij in het Subformulier Omzettotalen 1.(C) NIII School voor Informatica2KUN Nijmegen

KUN: B3: Systematisch ontwikkelen van eenvoudige informatiesystemenPracticumopdracht 8We zullen deze aanpak in een heel [overdreven] simpel voorbeeldje toepassen.We willen voor informatie over de bekendemuziekdatabase een Form maken, waarbij we eerstuit een keuzelijst kunnen kiezen uit een bepaaldmuziekgenre; vervolgens verschijnt in een subformeen overzicht van artiesten/groepen die in dat genreopnames hebben uitgebracht en na klikken op denaam van zo’n artiest/groep, verschijnt in een tweedesubform een overzicht van de door die artiest/groepuitgebrachte nummers.Het benodigde ‘hulpveldje’ is in deze figuur noggetoond, maar moet uiteraard later op ‘onzichtbaar’worden gesteld.Let er op, dat in het subform op de een of anderemanier duidelijk gemaakt moet worden dat op een bepaald record geselecteerd is en dat met dat recordgeassocieerde gegevens in het tweede subform worden getoond! Daarvoor kun je (minimaal), zoals inde figuur getoond, de ‘Recordselectors’ van het eerste subform voor op ‘Aan’ zetten!Maar ook dan zijn er nog wat verdere probleempjes:1. Als je daarvoor geen voorzorgsmaatregelen neemt en in het (nog zichtbare) ‘Hulpveld’ de [welerg lange] expressie ‘ [Subformulier Opnames met alleen artiest groep]![Recording Artist ID]’ opneemt, danzal bij het ‘openen’ van dit Form in het ‘Hulpveld’ te zien zijn: ‘#Fout’. Blijkbaar wordt bij hetopenen van het Form gedetecteerd dat er nog geen gegevens aanwezig zijn in het eerste subform,omdat er nog geen genre gekozen is. Een oplossing voor dit probleem is, om daar een immediateIIf-constructie te gebruiken (zie figuur).2.Een ander vreemd probleem dat zich voordoet is, dat als je in een situatie (zoals in de eerdergetoonde figuur) gekozen hebt voor een genre, waar meerdere resultaatregels bij worden getoonden dan in het tweede record van het eerste subform gaat staan en vervolgens een genre kiest metslechts één record in het eerste subform, dat dan in het ‘Hulpveld’ als vreemde inhoud verschijnt:‘#Naam?’ en [wat erger is:] in het tweede subform niks getoond wordt (alsof daar dus geendetailgegevens bijhoren). Dit ongewenste gedrag is te verhelpen door bij de keuzelijst als ‘Nabijwerken’-gebeurtenis een sprong naar de nieuwe (vulling van het) eerste subform op te nemen:OokPrivate Sub Genrekeuzelijst AfterUpdate ( )[Subformulier Opnames met alleen artiest groep].SetFocusEnd Subeen Form.Refresh-opdracht voldoet.Het gehele Form ziet er in Design-modus alshiernaast getoond uit.Hieronder zijn in aparte figuren de koppelingengetoond tussen de verschillende Form-objecten(keuzelijst/subform 1 en hulpveld/subform 2).(C) NIII School voor Informatica3KUN Nijmegen

KUN: B3: Systematisch ontwikkelen van eenvoudige informatiesystemenPracticumopdracht 8.aPracticumopdracht 8Eén-op-véél-op-véél-relaties via 2 subformsMaak een samengesteld Form zoals hiernaastgetoond, waarbij je na selectie van eenplaatsnaam in het eerste subform een overzichtkrijgt van de belangrijkste gegevens van dedaar wonende leden en waarbij je naaanklikken van het ‘nader te bekijken lid’ ineen tweede subform een overzicht krijgt van debetalingsgegevens van het betreffende lid. Zorgervoor, dat boven dat tweede subform ook denaam getoond wordt van het betreffende lid!N.B. Het ‘Hulplidnr’ (rechts) moet uiteraardnog onzichtbaar gemaakt worden!8.3 Form voor één-op-véél-op-véél -relatie via keuzelijst subformIn de voorgaande situatie is het eleganter (maar wat meer werk) om in plaats van het eerste subformeen ‘(keuze)lijst’-object in het Form te zetten en daarmee (via het bekende ‘Hulpveld’) de inhoud vanhet andere subform ‘aan te sturen’. Dit heeft als groot voordeel, dat bij een (keuze)lijst-object er veelmeer soorten gebeurtenis-procedures aan gekoppeld kunnen worden (klikken, dubbelklikken etc.).Een ander groot voordeel is de wijze waarop in eenkeuzelijst (zonder dat we daarvoor extra VBA-codemoeten gaan schrijven) het geselecteerde elementduidelijk wordt aangegeven. We geven hiernaast dekeuzelijst subform-variant op het eerder besprokenvoorbeeld met genres/groepen/opnames-met-2subforms (bekijk in die figuur speciaal de wijzewaarop het geselecteerde item in de keuzelijst wordtweergegeven).We bespreken nu de wijze waarop we het bijgaandescherm hebben geïmplementeerd.De keuzelijst krijgt zijn inhoud bij Eigenschappen/Gegevens/Rijbron via:SELECT DISTINCT [Recording Artist ID], [Music Category ID]FROM [Opnames] WHERE [Music Category ID] GenrekeuzelijstIn het ‘Hulpveld’ staat: Iif ( IsNull ( [ Genrekeuzelijst ]) ; " " ; [ KeuzelijstGroepOpname ].[ Column ](0))nieuw daarbij is de uitdrukking Column (0), waarbij aan de éérste kolom van de keuzelijst gerefereerdwordt.En om steeds de inhoud van het ‘Hulpveld’ actueel te houden, gebruiken we:Private Sub Genrekeuzelijst AfterUpdate ( )KeuzelijstGroepOpname.SetFocusSendKeys "{DOWN}"Form.RefreshEnd SubLet hier vooral op het gebruik van het SendKeys “{DOWN}” , waardoor van een niets-geselecteerd-hebbende toestand van de keuzelijst overgaat in een geselecteerde eerste element. Voordat we deze SendKeysinstructie gebruiken, moeten we eerst de keuzelijst gefocussed hebben.(C) NIII School voor Informatica4KUN Nijmegen

KUN: B3: Systematisch ontwikkelen van eenvoudige informatiesystemenPracticumopdracht 8.bPracticumopdracht 8Eén-op-véél-op-véél-relaties via keuzelijst subformMaak een samengesteld Form zoals in opdracht 8.a,waarbij je na selectie van een plaatsnaam in degetoonde keuzelijst een overzicht krijgt van debelangrijkste gegevens van de daar wonende leden.De rest van de werking van het Form is volkomengelijk aan dat van de vorige opdracht (behalve dan datje met behulp van de ‘up’ en ‘down’-pijltjestoetsenhet geselecteerde element in de keuzelijst kuntveranderen.N.B. Ook hier moet het ‘Hulplidnr’ (rechts) uiteraardnog onzichtbaar gemaakt worden!8.4 In netwerksituaties: het ‘locken’ van bestanden/records/ e.d.Indien we een Form baseren op een gegevenstabel en bij‘Eigenschappen/Gegevens’ kijken, dan zien we dat ookdaar [uiteraard bij het onderdeel ‘Type recordset’] hetbegrip ‘Dynaset’ te voorschijn komt. Ook zien we daaro.a. de optie ‘Snapshot’.Blijkbaar wordt er zelfs bij het via een wizard maken vaneen Form impliciet gewerkt met recordsets!Dit is slechts ‘onderdeel’ van een veel ingrijpendermechanisme dat aanwezig is om ongewenste interacties bij multi-user gebruik te vermijden.Uit de MS Access-Help halen we:Met de eigenschap Recordvergrendeling (RecordLocks) kunt u bepalen hoe records worden vergrendeld enwat er gebeurt wanneer twee gebruikers proberen dezelfde record te bewerken. U kunt bijvoorbeeld instellendat een record automatisch wordt vergrendeld zodra een gebruiker het record gaat bewerken. U voorkomthiermee dat andere gebruikers het record wijzigen terwijl dit door iemand anders wordt gebruikt. Formulieren. Bepaalt hoe records in de onderliggende tabel of query worden vergrendeld wanneergegevens in een database voor meerdere gebruikers worden bijgewerkt.Rapporten. Bepaalt of records in de onderliggende tabel of query worden vergrendeld wanneer eenrapport wordt weergegeven als afdrukvoorbeeld of wanneer het wordt afgedrukt.Query's. Bepaalt of records in een query (meestal een actiequery in een database voor meerderegebruikers) worden vergrendeld tijdens het uitvoeren van de query.InstellingenDe eigenschap Recordvergrendeling (RecordLocks) kent de volgende instellingen:InstellingGeenAlle recordsBeschrijving(Standaard) In formulieren kunnen twee of meer gebruikers gelijktijdig hetzelfderecord bewerken. Dit wordt ook wel beperkt vergrendelen genoemd. Als tweegebruikers proberen hetzelfde record op te slaan, krijgt de tweede gebruiker eenbericht te zien. De gebruiker kan de wijzigingen in het record vervolgens annuleren,het record kopiëren naar het Klembord of de wijzigingen overnemen die door deandere gebruiker zijn aangebracht. Deze instelling [‘Geen’] wordt meestal gebruiktvoor formulieren met het kenmerk alleen-lezen of in databases die niet gelijktijdigtoegankelijk zijn voor meerdere gebruikers. De instelling kan ook worden gebruikt indatabases voor meerdere gebruikers als een record op hetzelfde moment doorverschillende gebruikers mag worden gewijzigd. In rapporten worden records nietvergrendeld tijdens het bekijken van een afdrukvoorbeeld of tijdens het afdrukken.Inquery's worden records niet vergrendeld tijdens het uitvoeren van de query.Alle records in de onderliggende tabel of query worden vergrendeld terwijl hetformulier is geopend in de formulierweergave of de gegevensbladweergave, terwijlhet rapport wordt afgedrukt of weergegeven als afdrukvoorbeeld of terwijl de querywordt uitgevoerd. Hoewel andere gebruikers de records wel kunnen bekijken,kunnen records pas worden toegevoegd, verwijderd of gewijzigd nadat het formulieris gesloten, het rapport volledig is afgedrukt of de query is voltooid.(C) NIII School voor Informatica5KUN Nijmegen

KUN: B3: Systematisch ontwikkelen van eenvoudige informatiesystemenPracticumopdracht 8Bewerkterecord(Alleen voor formulieren en query's) Een pagina met records wordt vergrendeld ophet moment dat een gebruiker wijzigingen aanbrengt in een veld in het record en hetrecord blijft vergrendeld totdat de gebruiker naar een andere record gaat. Een recordkan op hetzelfde moment maar door één gebruiker worden gewijzigd. Dit wordt ookwel volledig vergrendelen genoemd.U kunt deze eigenschap instellen met het eigenschappenvenster van een formulier, met een macro of metVisual Basic.Aanvullende informatieDe instelling Geen mag u alleen gebruiken voor formulieren als slechts één gebruiker werkt met deonderliggende tabellen of query's of als alle wijzigingen in gegevens worden aangebracht door dezelfdegebruiker. In een database voor meerdere gebruikers kunt u de instelling Geen gebruiken om beperktevergrendeling in te schakelen en gebruikers te waarschuwen wanneer deze proberen hetzelfde record tewijzigen in een formulier.De instelling Bewerkte record kunt u gebruiken om te voorkomen dat twee of meer gebruikers gegevens ophetzelfde moment wijzigen.De instelling Alle records kunt u gebruiken om ervoor te zorgen dat gegevens niet meer worden gewijzigdzodra u een afdrukvoorbeeld van een rapport bekijkt, het rapport afdrukt of een toevoegquery,verwijderquery, tabelmaakquery of bijwerkquery uitvoert.In de formulierweergave en de gegevensbladweergave verschijnt in de recordkiezer voor elk vergrendeldrecord de indicator Vergrendelde record.Tip U kunt in formulieren een andere standaardinstelling opgeven voor de eigenschap Recordvergrendeling(RecordLocks) door Opties te kiezen in het menu Extra. Klik vervolgens op het tabblad Geavanceerd vanhet dialoogvenster Opties en selecteer de gewenste optie bij Standaardrecordvergrendeling.Wanneer de gegevens in het formulier, rapport of query afkomstig zijn uit een ODBC-database (OpenDatabase Connectivity), wordt altijd de instelling Geen toegepast, ongeacht de instelling van de eigenschapRecordvergrendeling (Record Locks).In de alinea hiervoor werd reeds als interessant scherm genoemd over het gedeeld/beveiligd gebruikenvan een (lees: de onderhavige) database, het scherm dat we kunnen oproepen via de MS Accessmenubalk via Extra/Opties/Geavanceerd:Ter toelichting hiervan halen we verder uit de Help:Databases standaard openen in gedeelde of exclusieve modusDeze procedure heeft alleen invloed op de manier waarop een database op uw computer wordt geopend. Destandaardinstelling voor het openen van de database op andere computers wordt niet beïnvloed.Als u wilt dat anderen de database kunnen openen terwijl u deze hebt geopend, klikt u op Gedeeld.Als u wilt dat anderen de database niet kunnen openen terwijl u deze hebt geopend, klikt u op Exclusief.Aanvullende informatie· Wanneer u in een omgeving met meerdere gebruikers een database opent, kunt u deze in exclusieve en/ofalleen-lezen modus openen, ook als u standaard de gedeelde modus hebt ingesteld.U kunt een database openen voor gedeeld gebruik in een omgeving met meerdere gebruikers door hetselectievakje Exclusief uitgeschakeld te laten. U opent een database voor exclusief gebruik door hetselectievakje Exclusief in te schakelen.(C) NIII School voor Informatica6KUN Nijmegen

KUN: B3: Systematisch ontwikkelen van eenvoudige informatiesystemenPracticumopdracht 8U kunt een database openen voor alleen-lezen-toegang door achtereenvolgens op Opdrachten en instellingenen Als alleen-lezen openen te klikken.Er zijn vier instellingen waarmee u in een omgeving met meerdere gebruikers conflicten overgegevensvergrendeling kunt vermijden:· Interval voor vernieuwen (sec). Hiermee stelt u het aantal seconden in waarna de records automatischworden bijgewerkt in de gegevensblad- of de formulierweergave. Geldige waarden liggen tussen 1 en 32.766seconden. Wanneer u het huidige gegevensblad of formulier vernieuwt, worden de records niet opnieuwgesorteerd, worden geen nieuwe records toegevoegd en geen verwijderde records weggelaten. Als u dezewijzigingen wilt zien, moet u opnieuw een query uitvoeren op de onderliggende records van hetgegevensblad of formulier.· Interval voor opnieuw proberen (msec). Hiermee stelt u het aantal milliseconden in waarna automatischwordt geprobeerd een gewijzigde record op te slaan die is vergrendeld door een andere gebruiker. Geldigewaarden liggen tussen 0 en 1000 milliseconden.· Aantal keren opnieuw proberen. Hiermee stelt u in hoe vaak wordt geprobeerd een gewijzigde record op teslaan die is vergrendeld door een andere gebruiker. Geldige waarden liggen tussen 0 en 10.· Interval voor ODBC-vernieuwing (sec). Hiermee stelt u het interval in waarna de records die u met behulpvan ODBC hebt geopend, automatisch worden vernieuwd. Geldige waarden liggen tussen 1 en 32.766seconden.In het algemeen geldt [in een multi-user-omgeving], dat je moet proberen een record (of eigenlijk eenzogenaamde ‘pagina’; een blok van 2 kB met het record dat je bewerkt) zo kort mogelijk tevergrendelen en bijna altijd geldt, dat je geen ‘gehele bestanden’ [‘Alle records’] moet gaanvergrendelen (als je het werk van anderen belemmert geldt in bedrijfsomgevingen: ‘tijd is geld’).Kortom: als je voor een bepaalde bewerking (bijvoorbeeld: in het ons bekende ‘opnamen’-voorbeeld:het ophogen met ‘1’ van het ‘aantal keren’ dat een bepaalde opname is gespeeld) de keuze hebt tussenhet handmatig in een ‘Dynaset’-Form-op-een-tabel veranderen van die waarde, of het via een zelfgemaakte recordset/dynaset veranderen via een bliksemsnelle operatie:With MijnRecordset.Edit!Aantal Keren !Aantal Keren 1.UpdateEnd Withof via handmatig intikken in een form, waarbij een telefoontje of een kop koffie tussendoor de recordpagina kan blokkeren, dan moet de keuze duidelijk zijn.Voor meer informatie over ‘locking’ en toegangsrechten verwijzen we je naar de MS Access-Help.8.5 Menu- en werkbalken, opstarten e.d.Om de gemaakte programma’s voor een gebruiker makkelijk toegankelijk te maken, zal er meermoeten gebeuren dan alleen het databasevenster weergeven. Een gebruiken wil niet met tabellen,query’s, rapporten, etc. worden geconfronteerd, maar wil via een schakelbord alle formulieren kunnenopenen. Daarnaast wil hij of zij een goed overzicht krijgen van het programma en er makkelijk gebruikvan maken met behulp van menu’s. Je hebt in de voorgaande opdrachten reeds gezien hoe eenschakelbord wordt gemaakt. Hier wordt uitgelegd hoe bij opstarten van het programma het schakelborddirect kan worden weergegeven en de bijbehorende menu’s kunnen worden gemaakt.Binnen MS Access is het mogelijk zelf menubalken samen te stellen. Dit is een standaardfunctionaliteit die werkbalken op de Windows manier maakt. Dat houdt in dat ze hetzelfde eruit zienals in bijvoorbeeld Word of Excel, maar ook als in een willekeurig ander Windows programma. Zowelde menu’s als werkbalken zijn volledig zelf op te bouwen.Er is een subtiel verschil tussen een menu en een werkbalk. Een menu komt eigenlijk in elk Windowsprogramma voor. Hierop zijn onder andere de standaard functies als ‘Bestand’, ‘Bewerken’, ‘Beeld’ en‘Venster’ terug te vinden. Menu’s zijn tekstueel opgebouwd, al bestaat de mogelijkheid om hiericoontjes in op te nemen. Een werkbalk is een manier om sneller bepaalde functies uit te voeren. Zezijn meestal opgebouwd uit duidelijke iconen, zoals een diskette voor het opslaan en een schaar voorhet knippen. Met één druk op de knop kun je bepaalde functies sneller uitvoeren.(C) NIII School voor Informatica7KUN Nijmegen

KUN: B3: Systematisch ontwikkelen van eenvoudige informatiesystemenPracticumopdracht 8Je kunt een eigen menu of werkbalk maken door op een reeds bestaand menu of werkbalk met derechter muisknop te klikken. Het context menu bevat de bestaande werkbalken en als onderste optie‘Aanpassen’. Klik hierop om een nieuwe aan te maken.Er verschijnt een scherm als hiernaast getoond, waargekozen kan worden voor ‘Nieuw’, een nieuwe werkbalkof menu aanmaken.Klik hierop en geef de werkbalk een naam. Je merkt dandat die naam toegevoegd wordt aan het overzicht uit het‘Aanpassen’-scherm.Vervolgens kun je die eigen balk selecteren en deeigenschappen ervan wijzigen door op ‘Eigenschappen’te klikken (zie volgende figuur).Het belangrijkste is hier dat je aangeeft of het eenMenubalk of Werkbalk betreft. Het type ‘Pop-up’gebruiken we hier (nog) niet, want dat is voor het makenvan eigen context-menu’s. De overige opties sprekenvoor zich, waarbij gemeld kan worden dat dit allemaalinstellingen zijn, die weergeven wat je de gebruiker voormogelijkheden wilt bieden. Een onbekende term zal‘dokken’ zijn. Dit houdt in dat je de gebruiker demogelijkheid biedt, al dan niet de werkbalk of het menute laten verplaatsen.Als je deze eigenschappen hebt ingesteld, kun je dewerkbalk vullen door van het tabblad ‘Opdrachten’verschillende items naar de werkbalk te slepen. Je kuntkiezen uit standaard Windows / MSAccess items of deitems die je zojuist zèlf in je database hebt aangemaakt(de formulieren, rapporten, etc). De onderste optie(‘Nieuw menu’) is voor het aanmaken van een nieuw‘menu’-item (zoals ‘Bestand’, ‘Bewerken’ e.d.), waardoor een nieuw pull-down menu wordttoegevoegd, waar je vervolgens weer opties in kunt opslaan.OpstarteigenschappenOm een gebruiksvriendelijk programma te maken, dient de gebruiker niet zelf het schakelbord tehoeven openen. Ook kan het handig zijn een door jezelf gedefinieerde menubalk automatisch weer tegeven en een eigen icoontje aan het programma te verbinden. Dit kun je allemaal bepalen in menu‘Extra’ ‘Opstarten ’.Je kunt in dit scherm het programma een naamgeven. Deze naam zal, in plaats van ‘MSAccess’, onder op de taakbalk verschijnen.Verder kun je een eigen icoontje gaangebruiken, als het icoon maar de extensie .icoheeft. Bij menubalk kun je kiezen voor een(eventueel zelf gedefinieerde) menubalk, diestandaard bij het hele programma gebruiktwordt. De optie ‘Formulier weergeven’ kun jeinstellen op de naam van het (hoofd)schakelbord. Op deze manier wordt direct dit formulier geopendbij opstarten. De overige opties spreken redelijk voor zich en de F1 toets kan wederom uitkomst biedenbij het achterhalen van de exacte functionaliteit.(C) NIII School voor Informatica8KUN Nijmegen

KUN: B3: Systematisch ontwikkelen van eenvoudige informatiesystemenPracticumopdracht 8Nog twee opmerkingen uit de praktijk (door ex-studentassistent Linus Wiggers)Het is verstandig, hoe lager het niveau van de gebruiker, zo veel mogelijk af te sluiten. De hierbovenbesproken velden zijn nuttig om in te vullen, maar verder kun je beter alle opties uit klikken. Hierdoorkan een gebruiker alleen de door jou aangegeven functionaliteit gebruiken van MSAccess en functiesdie in MSAccess zitten, die je niet goed afvangt of coördineert, uitsluiten van gebruik.Komt er meteen nog een tweede opmerking, eigenlijk waarschuwing uit de praktijk. Door alles af tesluiten en vooral door een eigen menubalk te definiëren, bestaat de mogelijkheid dat je jezelf‘buitensluit’. Als je namelijk een menubalk maakt waar de optie ‘Opstarten ’ geen deel van uit maakt(dat is zeer gewenst als je een programma voor de gebruiker wilt afsluiten), dan kun je zelf dezefunctionaliteit ook niet meer gebruiken. In combinatie met de mogelijkheid een opstartformulier tedefiniëren en alle andere functionaliteit uit te schakelen, kunt je zelf ook het programma niet meer in!Om dit probleem te voorkomen, dient je pas als laatste de opstarteigenschappen in te stellen, liefst opeen kopie van de echte applicatie. Mocht het nu toch verkeerd gaan, dan bestaat er een mogelijkheidhet programma alsnog in te komen. Je dient dan eerst MSAccess te openen. Bij het openen van debestaande database, houd je de SHIFT -toets ingedrukt. Hiermee omzeil je alle opstarteigenschappenen heb je de mogelijkheid diverse opties opnieuw in te stellen.Ter afsluiting dient gemeld te worden dat zowel werkbalken/menubalken als de opstarteigenschappenook met VBA kunnen worden gemaakt en ingesteld. Dit gaat te ver voor deze cursus, maar mocht jeeen extra oefening willen hebben: de benodigde informatie is via de F1-help beschikbaar. In VBAbestaat ook de mogelijkheid de SHIFT -toets tijdens het opstarten uit te schakelen, waardoor eenprogramma hermetisch wordt afgesloten.N.B. maak voor de hierna volgende opdracht eerst een reservekopie van je database(voor als er iets mis gaat . . )!!Practicumopdracht 8.cEen eigen menu-balkPas de MS Access-menubalk zodanig aan, dat je vanuit demenu-balk je eigen Forms die in de huidige database zitten,kunt opstarten. Zorg ervoor, dat je menubalk er min ofmeer uitziet zoals in de figuur hiernaast getoond.Een mogelijkheid kan uiteraard ook zijn om de standaardMS Access menubalk [bij opstarten] geheel uit teschakelen (zie de tweede figuur hiernaast).Een ‘menu-kolom’ zoals ‘Leden’, ‘Betalingen’ en ‘Varia’ krijg jevia de optie ‘Nieuw menu’; later kun je er dan een ‘File’-optiezoals het hier getoonde ‘Afsluiten’ in plaatsen. Probeer ook dezemogelijkheid en overleg met de ontwerpers van je projectgroepwelke van deze twee mogelijkheden de beste mogelijkhedenbiedt.Lever je in de (opgeschoonde) database opgeslagen uitwerkingenuiterlijk ten tijde van het volgende B3-werkcollege onder een ‘eigennaam’ in per email naar jeroen.claassens@p12.nl‘Compacteer’ (via Tools/Database Utilities/Compact Database) jedatabase voordat je hem inlevert !!!(C) NIII School voor Informatica9KUN Nijmegen

(C) NIII School voor Informatica 1 KUN Nijmegen B3 - cursus MS Access practicumopdracht 8 Inhoud: Losse opmerkingen over: Immediate IF-functie (IIF) en het SendKeys-commando Form voor een één-op-véél-op-véél -relatie via 2 subforms Form voor een één-op-véél-op-véél -relatie via keuzelijst subform