Waarde checkbox voor een specifiek record (uit andere tabel) checken

Status
Niet open voor verdere reacties.

Anras

Nieuwe gebruiker
Lid geworden
7 jul 2018
Berichten
2
Hallo allemaal,

Ik werk als docent op een oogzorgopleiding waar studenten tijdens praktijklessen verschillende soorten druppels in het oog toegedient krijgen. Ik ben een aantal weken geleden gestart een database op de zetten voor de registratie hiervan. Access is nieuw voor mij. Ik maak uitsluitend gebruik van tabellen en formulieren (geen querys). Ook heb ik geen relaties tussen tabellen gemaakt. Het geheel is zeer zeker onnodig omslachtig geworden maar het werkt.

De opbouw van mijn database:
Tabel 'Studenten' bevat o.a. variabelen 'Studentnummer' (cijfer) en 'Druppelkaart' (checkbox)
Tabel 'Druppels' bevat o.a. variabelen 'Studentnummer'
Formulier 'frmDruppelsKlas' met o.a. de velden 'txtStudentnummer' en 'Studentnummer'

Op dit formulier klikt de docent aan welke druppels in welk oog worden toegediend. Vervolgens wordt er met een barcodescanner de studentenkaart gescant waarvan het studentennummer wordt afgelezen. Dit nummer komt in het veld 'txtStudentnummer' te staan. Indien het studentennummer in de tabel 'Studenten' voorkomt wordt de record opgeslagen in de tabel 'Druppels'.

Nu is het zo dat alleen studenten met een z.g.n. Druppelkaart druppels toegedient mogen krijgen. Wat ik graag zou willen is dat er een melding komt wanneer er een studentennummer wordt ingevoerd waarvan de student geen druppelkaart heeft (waarvan in de tabel 'Studenten' de checkbox 'Druppelkaart' niet is aangevinkt).

Dus in het formulier 'frmDruppelsKlas' wordt in het veld 'txtStudentnummer' een studentnummer ingevoerd. Deze waarde wordt gekopieerd naar het veld 'Studentnummer'. Wat ik graag zou willen (denkt dat een goed idee is) is de waarde van de checkbox 'Druppelkaart' in de tabel 'Studenten' voor dit speciefieke 'Studentnummer' tijdelijk opslaan als een variabele. Wanneer deze variabele False of 0 is (de checkbox niet is aangeklikt) moet er een melding komen.

Ik heb zelf het onderstaande geprobeert maar dat werkt voor geen meter helaas:

Code:
varDruppelkaart = DLookup("Druppelkaart", "Studenten", Studentnummer = "& Me!Studentnummer")
If varDruppelkaart = "0" Then
    MsgBox ("Geen druppelkaart")
End If

Ik hoop dat ik op de goede weg ben en iemand op dit formum mij verder kan helpen of misschien wel een veel beter idee heeft :)
 
k hoop dat ik op de goede weg ben
Ik vrees dat ik slecht nieuws voor je heb: dat ben je niet :). Toen ik halverwege je vraag was, en je schreef dat je een veld txtStudentnummer hebt, en een veld Studentnummer, wist ik al dat er iets niet klopte aan je opzet. En daar dan nog een veld bijzetten, is natuurlijk helemaal geen goede opzet. Ik was overigens al achterdochtig toen je (trots?) meldde dat je geen queries gebruikt (wat is daar op tegen?) en geen relaties hebt gelegd (en dat is echt een slechte zaak).

Het feit dat je met een scanner werkt, zou voor de werking niet zoveel uit mogen maken, maar maakt het er niet makkelijker op. Zo te zien gebruik je die alleen om de student op te zoeken, en dan kun je m.i. net zo goed een keuzelijst gebruiken waarin je de beginletters intypt om de persoon op te zoeken. Ik denk dat dat minstens zo snel werkt als een scanner. Maar goed, ik ga daar natuurlijk niet over.

Wat dat formulier zou moeten hebben, en nu niet heeft, is één veld voor het studentnummer, waar je dus een keuzelijst met invoervak op basis van de tabel Studenten aan hangt. Daarin zoek je de student op (en dat kan dus best met een scanner) en dat kan dan twee reacties genereren: ofwel de gezochte student bestaat, en wordt dus gevonden, ofwel hij bestaat niet en dan vindt de keuzelijst hem niet. En dat is het leuke van keuzelijsten: dan treedt dus de gebeurtenis <Bij niet in lijst> op. Zo’n Msgbox lijkt mij een onzinnig resultaat; je wilt dat er iets gebeurt op basis van het scannen. Ofwel mag je doorgaan, ofwel wil je dat je de student kunt invoeren, zijn gegevens aanpassen (wel een druppelkaart maken) danwel het formulier sluiten. Een Msgbox alleen is dus in mijn ogen nutteloos en overbodig.
 
Bedankt voor je reactie. Ik ben 'maar gewoon' begonnen met 2 tabellen en formulieren omdat ik niet beter wist. Ik heb gaandeweg tutorials gekeken en het een en ander op forums gelezen en ben er zo achter gekomen dat mensen met ervaring het anders aanpakken (de querys en relaties). Ik wilde niet de indruk wekken dat ik er trots op ben. Alles werkt op dat laatste na en ik hoop dat nog voor elkaar te kunnen krijgen.

Het is overigens zo dat alle studenten van de opleiding in de tabel Studenten staan. Die wil ik in deze stap niet toe gaan voegen. De controle op het studentennummer voer ik uit zodat er geen onzin kan worden opgeslagen (mocht de scanner de kaart niet goed aflezen of iemand handmatig een niet bestaand studentennummer invoeren)

De docent klikt nu aan welke druppel in welk oog wordt gedaan en kan binnen een minuut alle collegekaarten scannen. Ik wil juist niet handmatig individuele studenten op zoeken door voorletters in te moeten typen. De actie die wordt uitgevoerd na het scannen is dus het opslaan van een record met het studentnummer en informatie over de drubbels.. Hierbij krijgt de docent echter niet de gegevens van de individuele student in beeld. Dat hoeft ook niet. De msgbox moet de docent waarschuwen dat een student zijn collegekaart aan biedt terwijl de student geen druppelkaart heeft. De student krijgt dus geen druppels en er moet geen record worden opgeslagen.

Voor die druppelkaart moet de student overigens onderzocht worden. Dat is dus niet iets wat ik ter plaatse aan wil kunnen passen.

Dus over het formulier en de barcodescanner heb ik wel goed nagedacht. Dat gaat goed werken. Ik zou alleen die laatste beveiliging toe willen voegen en denk dat dat met DLookup functie moet kunnen. Ik weet alleen nog niet hoe. Je tips zijn welkom en ik zal het geen tweede keer zo aanpakken. Maar ik zou het zonde vinden opnieuw te beginnen als het met een paar regels code op te lossen is :)
 
De docent klikt nu aan welke druppel in welk oog wordt gedaan en kan binnen een minuut alle collegekaarten scannen.
Als dat zo is, en we gaan er even vanuit dat de totale actie (kaart scannen, oog kiezen, druppel selecteren en op OK klikken) zo’n 5 secondes duurt, dan heb je het dus over 12-15 studenten. Die vind je in een keuzelijst echt wel net zo snel. Dus op die minuut zullen er wellicht een paar secondes bijkomen. Dat moet qua werktijd wel te verantwoorden zijn :). Bovendien heeft een keuzelijst als voordeel dat je op je formulier de overige studentgegevens (zoals naam of foto) kunt laten zien. En dat maakt het formulier ook een stuk gebruiksvriendelijker.

Maar de scanner is natuurlijk het probleem niet, dat is de rest van de database. Een scanner kan je ook aan een keuzelijst hangen tenslotte, zoals ik al schreef. Die keuzelijst is namelijk sowieso gekoppeld aan het StudentID, en dat is dus het nummer dat je scant. Dat alle studenten in de tabel Studenten staan lijkt mij niet meer dan logisch; niet-bestaande studenten scannen kan dan ook alleen voorkomen als die kaart niet bestaat. En dat kan natuurlijk altijd. Je hoeft maar een verkeerde kaart te scannen. Dus dat moet je wel degelijk afvangen in de database. Maar heeft ook weer niet de hoogste prioriteit. In een happy-clappy omgeving gaat nooit iets fout, en hoef je dus ook geen rekening te houden met fouten. Zelf bouw ik foutroutines dus ook altijd pas op het laatst in.

Dat brengt mij weer op die (in mijn ogen overbodige) Msgbox. Normaal gesproken is het onzinnig om inde keuzelijst met studenten alle studenten op te nemen. Je wilt immers alleen studenten druppelen waar dat vonkje aan staat want die hebben een druppelkaart. Dus de keuzelijst laat niet alle studenten zien. En het scannen levert dus wel degelijk als resultaat dat de student gevonden wordt (heeft druppelkaart) of niet (geen druppelkaart). En op basis daarvan ga je dus verder, of doe je wat anders.
Kortom: stap van je oorspronkelijke plan af, en zet het tekstveld om naar een keuzelijst met invoervak, en al je problemen zijn opgelost. Lijkt mij een veel betere oplossing dan blijven doormodderen met teveel tekstvakken en DLOOKUP functies...
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan