Opgelost Ingevuld veld vergrendelen (en liefst ook geen tabstop)

Dit topic is als opgelost gemarkeerd
Status
Niet open voor verdere reacties.

jbusser

Gebruiker
Lid geworden
23 feb 2007
Berichten
182
Ik heb al diverse "oplossingen" gevonden maar geen ervan doet wat ik eigenlijk wil.
Wat ik eigenlijk wil is dat (in een doorlopend formulier) een reeds gevuld record wél zichtbaar blijft maar niet aanpasbaar, het liefst dat velden van een compleet record vergrendelen (al denk ik dat dát niet kan)
 
Je vraag is behoorlijk onduidelijk. Sowieso is het totaal niet moeilijk om zichtbare tekstvelden op een formulier te vergrendelen; dat is gewoon een eigenschap van dat tekstveld. Dus dan kun je dat niet muteren, en is het gewoon zichtbaar. Dat werkt zowel op een doorlopend als op een enkelvoudig formulier. En die techniek kun je uiteraard ook op alle velden toepassen, zodat in essentie het complete record is vergrendeld. Al kun je dat laatste uiteraard ook met één functieaanpassing instellen, zodat het niet nodig is om aparte velden te vergrendelen. Vandaar dus de verwarring :rolleyes:
 
Volgens mij lukt dat überhaupt niet op een doorlopend formulier. Het is niet mogelijk om in een bepaalde rij een bepaald veld te vergrendelen. Als je op een doorlopend formulier een veld vergrendelt, is dat veld in alle rijen vergrendeld.
Wat je wil kan alleen op een enkelvoudig formulier.
 
Wat je wil kan alleen op een enkelvoudig formulier.
Dat is een vreemde opmerking die ook niet klopt; als je een formulier opent in Ontwerpweergave, zie je van elk object dat jer op dat formulier zet precies één exemplaar. Met zelf in te stellen eigenschappen. Dus één object dat is gekoppeld aan een veld (afhankelijk object) of één niet-afhankelijk object. Dat formulier kun je dan in verschillende weergaven bekijken zoals enkelvoudig of meervoudig, maar het blijft natuurlijk maar één object.
In dat object zie je per record de opgeslagen waarden bij een afhankelijk object,en de ingetypte/gekozen waarde bij een niet-afhankelijk object. Enige verschil tussen een enkelvoudig en doorlopend formulier? Ach, moet ik dat nog uitleggen?

En overigens is de 'uitleg' van Peter sowieso niet relevant, want stel dát hij gelijk en dat TS inderdaad wil dat je (en dat oók nog eens op een doorlopend formulier!) één 'variant' van een veld 'actief' kan maken, en de anderen 'vergrendeld', wat zou dat dan voor de gebruiker uitmaken? Helemaal niets! Je kunt namelijk nooit meer dan één record tegelijk bewerken, dus als je in het actieve record zit, kun je sowieso nooit in de andere records komen!
Tenzij je een ander record actief maakt, maar dan is het verlaten record dat natuurlijk niet meer, en wordt dat record opgeslagen. En dát kan dan alleen maar als aan de integriteitseisen van de tabel is voldaan. Stel dat je een nieuw record aan het invoegen bent in een tabel met een aantal verplichte velden; als je dan naar een ander record gaat zonder dat alle verplichte velden zijn ingevuld, dan lukt dat niet eens.
Kortom: een doorlopend formulier is in essentie niets anders dan een enkelvoudig formulier, maar je ziet, vandaar de naam, meer records. Meer is het eigenlijk niet.

Dus: zolang TS niet uitlegt wat hij bedoelt, komen we geen steek verder. En heeft verder speculeren helemaal geen zin. Zie mijn uitleg hierboven.

Wat je dus kan doen in een formulier: zorgen dat je records niet kunt muteren, toevoegen en/of verwijderen als je de gegevens wilt aanpassen, en met een knop die instelling veranderen naar <Bewerken toegestaan>, <Verwijderen toegestaan> en/of <Toevoegingen toegestaan>. Afhankelijk van de gewenste mutatiegraad.

Als je dan wilt kunnen toevoegen, moeten alle velden uiteraard 'open' staan voor input, maar je kunt er, als je wilt dat alleen bepaalde gegevens mogen worden gemuteerd, van sommige velden de eigenschappen <Ingeschakeld> op "Ja" zetten en <Vergrendeld> op "Nee" zodat je die velden kunt muteren, en bij de andere velden zet je die twee opties andersom. Maar het is dus een stuk makkelijker om de beveiliging op formulier niveau in te stellen.
 
Het is met wat zoek- en puzzelwerk wel gelukt wat ik wil hebben:
Oplossing: Veld "Completed (true/False)" toevoegen aan tabel.
Indien deze "Waar" is:
Code:
Sub VergrenDelen()
If Me!Completed = True Then
    Me.TeVergrendelenVeld.Enabled = False
    Me.TeVergrendelenVeld.Locked = True
End If
If Me!Completed = False Then
    Me.TeVergrendelenVeld.Enabled= True
    Me.TeVergrendelenVeld.Locked = False
End If
Me.Refresh
End Sub

VerGrendelen activeren in formulier: bij aanwijzen
en na bijwerken van veld TeVergrendelenVeld:

Code:
If Koerier <> "" Then
        Completed = True
        VergrenDelen
        ...
      Else
        Completed = False
        ...
End If

Dit werkt prima voor mij!
Bedankt voor het (mee)denken!
 
Wauw, dat is een ingewikkelde constructie voor iets heel simpels :). Als het puur om het veld [Koerier] gaat volstaat dit toch ook?
Code:
Private Sub Koerier_AfterUpdate()
    Me.TeVergrendelenVeld.Enabled = Me.Koerier = vbNullString
    Me.TeVergrendelenVeld.Locked = Not Me.Koerier = vbNullString
End Sub
Zoals je ziet, wordt hier a) een veel kortere code gebruikt, en is b) het extra veld niet nodig.
 
Als welke van beide codes na bijwerken van het veld dan ook wordt uitgevoerd op een doorlopend formulier, is dat veld echt op alle rijen vergrendelen. Als dat de bedoeling is, prima. Mij lijkt het niet logisch.
 
Nogmaals Peter: het gaat om één object op een (doorlopend of enkel) formulier. Natúúrlijk is dat voor alle records vergrendeld! Zoals ik al schreef: je kunt maar één record tegelijk bewerken, de rest is per definitie altijd gelocked. Daar kun je (en hoef je) niets aan te veranderen.
Mag 100 keer onlogisch zijn voor jou, net zoals ik ook graag op meerdere plaatsen tegelijk zoukunnen zijn, maar helaas is dat niet mogelijk. (en in mijn geval denk ik ook onwenselijk ;))
 
Natuurlijk kan je maar één record tegelijk bewerken. De gein van een doorlopend formulier is dat je meerdere records na elkaar zou kunnen bewerken. En dat kan nu niet meer.
 
De gein van een doorlopend formulier is dat je meerdere records na elkaar zou kunnen bewerken. En dat kan nu niet meer.
Natuurlijk kan dat nog steeds. Ik snap je probleem niet, en ik hoop TS ook niet, want de discussie dwaalt af naar een niveau waar ik liever niet op zit. Nogmaals: als je bericht #4 goed had gelezen, en tot je had laten doordringen: een doorlopend formulier is niets anders dan een enkelvoudig formulier, alleen zie je meer records op het scherm. En is het ietsie makkelijker om een ander record te selecteren door er op te klikken. Maar meer is het niet. Oók met een enkelvoudig formulier kun je 'meerdere records na elkaar bewerken'. Door ofwel met de toetsen te bladeren, ofwel de bladerknoppen te gebruiken. Het idee dat dat níet kan, is belachelijk.

De hele check kun je natuurlijk gewoon zo oplossen, dan ben je van alle 'beveiligingsellende' af:

Code:
Private Sub Koerier_AfterUpdate()
    Me.TeVergrendelenVeld.Enabled = Me.Koerier = ""
    Me.TeVergrendelenVeld.Locked = Not Me.Koerier = ""
End Sub
En op het formulier:
Code:
Private Sub Form_Current()
    Me.TeVergrendelenVeld.Enabled = Me.Koerier = ""
    Me.TeVergrendelenVeld.Locked = Not Me.Koerier = ""
End Sub

Daarmee kun je gelijk bij selecteren een record bewerken of niet. En dat werkt op een doorlopend formulier en een enkelvoudig formulier natuurlijk 100% identiek.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan