Opzet Formulier in ACCESS

Status
Niet open voor verdere reacties.

RadboudAKF

Gebruiker
Lid geworden
3 nov 2010
Berichten
219
Goedemorgen lezer,

Vooraf: ik ben (nog steeds) een beginner met ACCESS en heb totaal geen ervaring met programmeren. Het meeste lukt me wel, maar nu loop ik ergens tegenaan wat ik niet voor elkaar krijg. Ik heb veel geprobeerd maar zie de oplossing niet.

Ik ben met een Access-database (bijgesloten een extraxt) bezig die hoeveelheden ‘beestjes’ moet meten in een steriele ruimte waar mensen geneesmiddelen bereiden in onze Ziekenhuis-Apotheek.

Er zijn een paar ‘soorten’ metingen; bv. Metingen via vingerafdrukken, via sedimentatieplaten en via contactplaten. Ik zal u niet vermoeien met de betekenis hiervan. Het zijn gewoon 3 ‘soorten’ meting.

Ik beperk mij in mijn verhaal nu tot de contactplaten….

De ruimtes waar de bereiding plaatsvindt zijn via een kwaliteits-eis ingedeeld in KLASSEN. (Bv. Ruimte 1.112 is een KLASSE A ruimte.) De klassen zijn gelinkt aan Eisen die voor die klassen gelden voor de verschillende metingen.
Klassen tabel ziet er als volgt uit:

Klassen
Klasse Contact Sediment Vingerafdruk
A <1 <1 <1
B <5 <5 -
C <25 <50 -
D <50 <100 -


Dit betekent bv. Een ruimte die aan Klasse A moet voldoen mag voor de meting ‘contactplaten’ geen meting opleveren groter “1” en een ruimte klasse B mag geen meting opleveren groter dan “5”.
Nu heb ik een formulier gebouwd waarin in het veld [KVE-7] de meting wordt ingevuld.

Stel nu dat we in een “klasse A”-ruimte een meting doen die groter is dan <1 dan moet er een waarschuwing komen als “VOLDOET NIET AAN EIS”.

In het formulier Frm_Contactplaat maakte ik een TEKSTveld waarin ik dat dacht te kunnen programmeren via het Veld KVE-7. Ik dacht dat bij de gebeurtenis “Na bijwerken” een klein stukje code dit voor mij zou doen.

Kennelijk doe ik iets heel doms want het lukt mij niet op de manier die ik zou willen.
Bij “na Bijwerken” worden ALLE records ingevuld.
Wat doe ik fout?
Of ligt het aan de hele opzet van tabellen en formulieren?

Ik zou het zeer op prijs stellen als iemand mij hier ‘een duwtje’ kan geven zodanig dat ik weer zie waar het probleem eigenlijk zit.
 

Bijlagen

  • Contactplaat1.zip
    84,3 KB · Weergaven: 14
Je gebruikt een doorlopend formulier, en daar heb je een niet-gebonden tekstveld op gezet. Het is logisch dat dit veld (wat op je formulier uiteraard maar één keer bestaat) maar één waarde kan bevatten. Dat een doorlopend formulier de velden net zo vaak herhaalt als er ruimte is op het formulier, doet daar niets aan af. Ergo: zodra je het tekstveld vult, wordt het in alle zichtbare velden op je formulier ook gevuld met dezelfde waarde. Zet je het tekstvak in de koptekst, dan zie je wel één tekst. Nog steeds hetzelfde tekstvak natuurlijk... Maar nu één exemplaar, en niet gekloond.

Verder ga je een beetje de teil in doordat je niet met getallen werkt, maar met een string in je tabel Klassen. Veel beter is het natuurlijk om daarin de waarden op te slaan, en niet <1, <5 etc. Die vergelijking maak je al in je code. In bijgaand voorbeeld heb ik dus de klassen aangepast naar getallen.

En om het verhaal af te maken: die loopt in jouw geval meestal naar de verkeerde uitkomst omdat je evalueert met de verkeerde waarde. Value verandert alleen als je tussen records switcht. Als je een waarde intypt, en vervolgens verandert, wordt de oude waarde nog gebruikt. Beter is dus deze variant:

Code:
Private Sub Meting_AfterUpdate()

    If Me.Dirty Then Me.Dirty = False
    If Me.Meting.Text < Me.Contact Then
        Me.Tekst40 = "AKKOORD"
    ElseIf Me.Meting.Text = Me.Contact Then
        Me.Tekst40 = "Gelijk"
    ElseIf Me.Meting.Text > Me.Contact Then
        Me.Tekst40 = "Slecht"
    End If

End Sub
En dat je VBA code niet snapt, maar die ingewikkelde macro structuur wel? Petje af....
 
Beste OctaFish ,

Ik ga hiernaar kijken. Interessante opmerkingen die mij zullen helpen.

Zeer bedankt. Dank ook voor jouw "petje af" .... trouwens: binnenkort heb ik een heuse VBA-cursus!!

Jan
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan