sommige velden van een record blokkeren, afhankelijk van een ander veld

Status
Niet open voor verdere reacties.

Bospeen

Gebruiker
Lid geworden
23 aug 2005
Berichten
150
Vraag:

Ik heb een doorlopend (sub)formulier, waarin records met enkele muteerbare velden worden getoond. Echter als één ja/nee veld in een record is gevinkt, moeten enkele andere velden van dat record geblokkeerd worden voor verdere mutaties. Hoe kan ik dit doen?

Bij voorbaat dank voor het meedenken!
 
Dat kun je met een gebeurtenis wel doen lijkt mij. Die gebeurtenis zou ik dan op het selectievakje hangen aan <Bij klikken> want dat is uiteindelijk wat je wilt volgens mij: je klikt op het selectievakje en dan blokkeren de gewenste velden.
Hou rekening met het feit dat dan alle velden in het formulier de blokkade krijgen, ook de records die een ander vinkje hebben!
 
Dat is niet helemaal wat ik wil... in de 1e plaats: alleen de velden van het record waar het vinkje in is gezet moeten geblokkeerd worden. En ten 2e: als het vinkje weer weggehaald wordt, dan moeten de betreffende velden weer muteerbaar zijn.
Ik ben het bij voorbaat met je eens, dit lijkt onzinnig. Het gaat hier echter om een gebruikerswens, om iets meer veiligheid in te bouwen bij onjuiste recordmutaties.

Ik heb ook al gedacht aan zoiets als de volgende code (gehangen aan bij openen van het subformulier), maar ik krijg dat niet werkend... (het veld Afgedaan is het bewuste ja/nee vinkje)

Private Sub Form_Open(Cancel As Integer)

If Me.Afgedaan = True Then
Me.AllowEdits = False
Else
Me.AllowEdits = True

End If
End Sub
 
Dat is niet helemaal wat ik wil... in de 1e plaats: alleen de velden van het record waar het vinkje in is gezet moeten geblokkeerd worden.
Dat snap ik, en als je dat echt wilt, moet je een Enkelvoudig formulier gebruiken. Dan heb je in beginsel hetzelfde probleem, alleen dan zie je het niet :). Wat is namelijk het probleem: in je formulier heb je voor elk veld in je tabel/query één tekstvak of keuzelijst staan. Dat object laat per record de bij dat record behorende veldwaarde zien. So far so good. Maar wat is het geval? Op je formulier heb je maar een exemplaar van dat object staan: het veld PersoonID hangt weliswaar aan het object PersoonID, maar dat object kan maar één waarde (uit het actieve record) laten zien; je ziet niet gelijk alle persoonID's in dat ene tekstobject. Gelukkig maar natuurlijk!

In een enkelvoudig formulier heb je van dat beginsel geen last, want je ziet maar één record. Op een meervoudig formulier zit je echter een beetje in de penarie, omdat je nu meerdere exemplaren ziet van elk object. Staan er 20 records op je doorlopende formulier, dan zie je ook 20 PersoonID's. In 20 tekstvakken. Maar je weet zelf natuurlijk ook wel dat je bij het ontwerpen van het formulier maar één tekstvak op het formulier hebt gezet! En als je dat ene tekstvak met een klik op een selectievakje uitschakelt, dan is dus ook echt dat ene tekstvak uitgeschakeld. Inclusief de 19 andere 'neefjes', want dat zijn geen 19 andere tekstvakken, dat is gewoon hetzelfde tekstvak. En dat heb je net uitgezet. Of aan, dat maakt natuurlijk voor het verhaal niets uit.

Er is dus (gelukkig) wel een workaround, waar je mee kunt stoeien. Gek genoeg heb je die al bijna gevonden :). Je hebt een code bedacht die wordt uitgevoerd bij het openen van het formulier. Dat openen doe je maar één keer, dus de code wordt ook maar één keer uitgevoerd. En wel voor de status van het eerste record. De rest van de records is dan de sjaak.... Je kunt de code dus veel beter bij de gebeurtenis <Bij aanwijzen> zetten; die procedure wordt uitgevoerd als je een ander record selecteert. En dat is exact het moment dat je de controle wilt uitvoeren!
Code:
Private Sub Form_Current()
    If Me.Afgedaan = True Then
        Me.AllowEdits = False
    Else
        Me.AllowEdits = True
    End If
End Sub
Overigens zit hier een vet probleem in..... Op het moment dat je de code uitvoert bij een niet-beveiligd record, is alles gelocked. Je kunt dus ook niet meer op het selectievakje klikken! Ergo: de status is onomkeerbaar! Het heeft ook geen zin om een ander niet-beveiligd record te selecteren (al staat dan wel dus het hele formulier in bewerkingsmodus) want zodra je de cursor verplaatst naar het gelockte record, ben je weer net zo ver van huis. Ik zou dat dus anders aanpakken.... Maar wel bij deze gebeurtenis.
 
Echter als één ja/nee veld in een record is gevinkt, moeten enkele andere velden van dat record geblokkeerd worden voor verdere mutaties. Hoe kan ik dit doen?
Gebruik 'voorwaardelijke opmaak' op die velden
 
Octa, ik begrijp je verhaal, bedankt hiervoor.
Maar de oplossing van Harry en Duke zijn voor mijn gebruikerswens echter toereikend, simpel en doeltreffend! Bedankt ook voor het voorbeeld Duke!

Ik sluit hiermee deze topic, bedankt voor jullie hulp!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan