Access ja/nee veld automatisch vullen op basis van andere velden

Status
Niet open voor verdere reacties.

DStultiens

Gebruiker
Lid geworden
2 nov 2012
Berichten
10
Beste allen,

Voor een laboratorium ben ik een database aan het maken waarin meetwaarden geregistreerd kunnen worden. De norm waarden per analyse staan in een tabel (minimale en maximale waarde). De meetwaarden staan in een andere tabel. De normen worden telkens in de meetgegevens tabel naast de meetwaarden gezet (normen kunnen veranderen in de loop van de tijd, op deze manier staan de historische normen nog naast de juiste meetwaarden).

Nu wil ik graag per meetwaarde in de meetwaarden tabel een ja/nee veld maken die beoordeeld of de meetwaarde tussen de normen valt. Als deze er buiten valt, wil ik graag een vinkje (true) in de ja/nee kolom. Dit lijkt mij de meest handige manier om later op diverse manieren te filteren en selecties te maken voor rapporten.

Enige probleempje; ik weet niet eens hoe ik moet beginnen om voor elkaar te krijgen dat er automatische een vinkje komt in het ja/nee veld als de meetwaarde kleiner is dan de minimale waarde of groter is dan de maximale waarde. Zou iemand me op weg kunnen helpen.

Super bedankt!!

mvg,
Danny
 
Je hebt dat hele selectieveldje ook niet nodig, want uit je gegevens blijkt al of een meetwaarde binnen de range valt of niet: kwestie van de meetwaarde vergelijken met de minimale en maximale waarde. Dus niet zo moeilijk denken zou ik zeggen!
 
Hoi Michel,

Dank voor de snelle reactie!
Helemaal mee eens dat ik de benodigde data al heb. Op die manier zit nu ook een conditional formatting in het formulier waar de laboranten de data gaan invullen (buiten norm = rood, binnen normen = groen).

Maar voor rapportage doeleinden is een selectieveld voor mij heel handig. Er worden ongeveer 50 meetwaarden per dag gegenereerd over diverse analyses, procesonderdelen en afdelingen. Daarvan wil ik over lange periodes rapportages kunnen draaien (Top 10 van meest voorkomende meetwaarden buiten spec in de afgelopen 12 maanden, totaal aantal meetwaarden buiten spec afgelopen 12 mnd, laatste 5 metingen buiten spec per afdeling, per procesonderdeel etc.). Daarnaast komt waarschijnlijk nog de vraag voor allerlei andere rapporten die ik nu nog lastig kan inschatten, maar waar een filter-bare waarde bijzonder handig kan werken. Voor dat doel wil ik graag een veld waarin automatisch wordt weergegeven of een meetwaarde buiten spec is (normen verschillen ook per analyse, dus kan er geen vaste waarde in hangen).

Ik zoek iets in deze richting;
IF [meetwaarde] < [MinNorm] OR [meetwaarde] > [maxNorm] THAN [selectieveld] = true ELSE false.

Al deze componenten zijn aanwezig in het invul formulier voor de laboranten en gekoppeld naar een tabel. Alleen hoe ik dat in Access (VBA) taal erin krijg is voor mij nog een puzzel.

Hulp is welkom.
 
Je hebt nog steeds geen veld in een tabel nodig, want je kunt e.e.a. prima berekenen in een query, zoals ik al eerder aangaf. En dat berekende veld levert dat TRUE of FALSE op, en in je rapport koppel je dat dan aan een selectievakje. Heb je toch in je rapportage dat selectieveld. Maar probeer dubbele gegevens te vermijden in tabellen, dat leidt alleen maar tot fouten. En op zijn minst tot de mogelijkheid van fouten, want wie voorkomt dat iemand het selectievakje in je tabel aanklikt terwijl de gemeten waarde wél correct is? Velden in één record hebben in beginsel geen afhankelijkheid van elkaar. Vanwege dezelfde redenering is het ook heel onverstandig om in een persoonstabel aparte selectievakjes te maken voor Man en Vrouw; je kunt dan niet voorkomen dat iemand ze allebei aanklikt. (misschien niet het beste voorbeeld ;) ).
Om bij jouw dummy code te blijven krijg je in een query iets als:
Code:
Afwijkend: IIF([meetwaarde] >= [MinNorm] AND [meetwaarde] <= [maxNorm];False;True)
 
Hoi Michel,

Weer dank voor je snelle en inhoudelijke reactie.

De query doet inderdaad met een berekend veld dat wat ik ervan had verwacht. Dat puntje is wat mij betreft afgerond. Ik heb je expressie ook nog in het formulier geprobeerd, maar daar werkt het niet zoals gehoopt. De query was dus inderdaad de juiste weg.

Nog ter info; ik had de selectiebox op het formulier verborgen. Dus bij normaal gebruik was er geen aanpassingen door de gebruiker mogelijk.Als ze het bewust willen doen kunnen ze natuurlijk ook de ruwe data in de tabel aanpassen of de meetwaarde zo invoeren dat hij wel binnen norm valt. Daar moet ik even uitgaan van het goede van de mensen :thumb:

mvg,
Danny
 
Hoi Danny,
Nog een paar aanvullingen:
Ik heb je expressie ook nog in het formulier geprobeerd, maar daar werkt het niet zoals gehoopt. De query was dus inderdaad de juiste weg.
Het principe werkt op een formulier niet zo goed, maar je zult de berekening dan moeten maken met VBA. Een formulier laat gegevens in beginsel eenmalig zien, tenzij ze gekoppeld zijn aan een tabelveld. Dat lijkt logisch, want anders zou je steeds dezelfde gegevens zien bij het bladeren. Maar alle labels bijvoorbeeld staan óók op het formulier, en die worden maar één keer ingelezen (bij het openen/laden van een formulier). Dat geldt ook voor niet-gebonden tekstvakken met formules: die worden één keer uitgerekend en getoond. Je moet dus, als de onderliggende gegevens veranderen bij het bladeren, ook de formules opnieuw laten berekenen. Doorgaans doe je dat met een stukje programmeren in de gebeurtenis <Bij aanwijzen> van het formulier. Als je dat doet, zul je zien dat je formulier óók netjes bijwerkt.
Door de formule in de onderliggende query te zetten omzeil je het hele probleem, omdat de berekening dan weer onderdeel uitmaakt van de recordset, en die oplossing is dus veel beter.
Als ze het bewust willen doen kunnen ze natuurlijk ook de ruwe data in de tabel aanpassen ...
Gebruikers horen echt niet in een tabel te grutten :). Ik zou de db dus in ieder geval zodanig inrichten dat gebruikers alleen via formulieren en rapporten kunnen werken. Want daarin kun je alles afschermen wat afgeschermd moet worden.
 
Hoi Michel,

Je geeft aan dat ik het beste de DB zo kan inrichten dat gebruikers niet in de tabel kunnen werken. De tabellen staan nu in de back-end db, formulieren en queries staan in de front-end. Hoe krijg ik het voor elkaar dat ze de tabellen zelf niet kunnen bewerken, maar de gegevens die ze invullen in de formulieren invullen wel in de tabel weggeschreven kunnen worden?

mvg,
Danny
 
Bijvoorbeeld door met een Runtime versie te werken, of met een mde/accde versie van de database. Daarmee geef je de gebruikers een zelfstandige applicatie met alle werkende functionaliteiten, zonder dat ze in het beheersdeel kunnen. Ook kun je alle tabellen/queries onzichtbaar maken, en de knoppen en navigatievenster uitschakelen. En als je de db standaard opstart met een startformulier, en de gebruikers daar niet meer vanaf kunnen, dan ben je al een heel eind.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan