AfterUpdate

Status
Niet open voor verdere reacties.

so10070

Gebruiker
Lid geworden
4 feb 2014
Berichten
424
AfterUpdate-event werkt, dat is geen probleem. Maar wanneer ik de "formulier sluiten"-knop indruk, wordt de AfterUpdate code ook nog doorlopen, maar sluit toch het formulier af. Ik wil een specifiek veld de focus geven en zolang de afsluiten-knop niet ingedrukt wordt, werkt dat event. Hoe kan ik de "afsluiten" toch negeren indien via AfterUpdate niet aan de voorwaarden is voldaan? :confused:
 
Een AfterUpdate gebeurtenis trigger je als je iets doet met een object. De knop Sluiten is ook een object, maar een klik daarop komt chronologisch nu eenmaal altijd na de gebeurtenis die je op het voorgaande object hebt getriggerd. Dus wordt die altijd uitgevoerd, wat je ook doet met je knop. Maar verder heb ik totaal geen flauw idee wat je nu wilt doen...
 
Na update van een formulier wil ik nagaan of een bepaald veld (datum) een waarde gekregen heeft. De gebeurtenis <AfterUpdate> zet ik dus op het formulier. Bij het indrukken van de knoppen <Volgende>, <Vorige>, enz. geeft de update de mededeling "Het veld opleverdatum is verplicht in te vullen" en zet de focus op het datumveld. Bij afsluiten van het formulier krijgt de gebruiker eveneens de mededeling "Het veld..." maar wordt het formulier toch afgesloten. En dit zou ik willen voorkomen. De focus wordt bij afsluiten gezet op het bewuste veld maar het formulier wordt toch afgesloten. Ik denk eraan om een variabele voor de module te gebruiken die, bijvoorbeeld de waarde 1 (true) meekrijgt indien het veld "opleverdatum" een waarde gekregen heeft en 0 (false) indien de gebruiker geen opleverdatum ingevoerd heeft. Bestaat er een andere methode?
 
Als je de code op het formulier gebruikt, kun je beter BeforeUpdate gebruiken dan AfterUpdate. Je wilt tenslotte voorkomen dat het formulier wordt opgeslagen als het veld niet is ingevuld, en niet achteraf ingrijpen. De code die je onder de afsluiten knop hebt zitten wordt blijkbaar zonder restricties uitgevoerd. Al zet je de focus op 100 verschillende tekstvakken, als d laatste regel is dat het formulier wordt gesloten, is al het voorgaande voor niks geweest. Je moet dus een check maken op het datumveld, en op basis daarvan het formulier sluiten of niet. Klinkt dat als een IF THEN END IF?
 
Zelfs met <BeforeUpdate> wordt het formulier afgesloten bij het klikken op de knop "Formulier sluiten", zoals je reeds aangaf. Ik los dit nu zo op.
1. Ik stel een private-variabele op moduleniveau in, type Boolean (OpleverdatumOK) >> deze wordt in drie procedures aangewend (<BeforeUpdate>, <BijVerlaten> en <BijFormulierSluiten>)
2. Bij het event <BeforeUpdate> wordt gecontroleerd of het veld "txtAOpleverdatum" een waarde bevat met als resultaat hetzij "Cancel = True", hetzij "OpleverdatumOK = True"
3. Controle op het verlaten van het veld "txtAOpleverdatum"
a. Indien verkeerd ingevuld >> mededeling en "Cancel = true"​
b. Indien correct ingevuld >> "OpleverdatumOK = True"​
4. Op het event <FormulierSluiten> moeten twee zaken gecontroleerd worden
a. Opent de gebruiker het formulier om te kijken en niets te wijzigen >> enkel controleren of het veld "txtAOpleverdatum" een waarde gekregen heeft >> Ja: "OpleverdatumOK = True", anders "False"​
b. Het formulier mag afgesloten worden indien de waarde "OpleverdatumOK" true is. (volgens 2. en 4.a.)​
 
Correctie op vorig bericht. Bij 4.a. moet de eigenschap "Dirty" op het formulier gecontroleerd worden ("Me.Dirty = False" dan "OpleverdatumOK = True"). Anders sluit het formulier niet af indien de gebruiker vanuit een blanco formulier wil afsluiten. :o
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan