Records vergrendelen als formulier wordt heropent

Status
Niet open voor verdere reacties.

Peer44

Gebruiker
Lid geworden
25 jan 2008
Berichten
224
Hallo, ik ben opzoek naar een manier om records te vergrendelen.
Wanneer het formulier voor de eerste maal wordt geopend mogen alle records aangepast worden. men sluit af door op een button te drukken.
Code:
Private Sub closeCNT1_Click()

Me.AllowEdits = False
DoCmd.close
    
End Sub

in de code van die button heb ik allowedits toegevoegd, maar dit werkt niet zoals ik wil.

Wanneer nu het formulier opnieuw wordt geopend kunnen alle records nog worden veranderd, dit wil ik geblokkeerd hebben.
Dus eerste keer openen wijzigingen toegestaan, formulier afsluiten na druk op de button, lock records.
heropenen formulier records vergrendeld.

hoe kan dit worden gerealiseerd?
 
Gaat niet lukken zo. Als het al kan. Een formulier open je met een bepaalde status (AllowEdits is True of False). Bij het openen van het formulier wordt gekeken hoe de eigenschap is ingesteld bij de Formuliereigenschappen. Bij het sluiten van het formulier gebeurt daar niets mee, ook al voer je de knop 100 keer uit. Beter is het om de standaardeigenschap AllowEdits op False te zetten, en bij het openen de eigenschap op True. Dan kan de code onder de knop weg. De twee regels kun je beter vervangen door deze:
Code:
DoCmd.Close acForm, Me.Form.Name
Close sluit namelijk wat-ie tegen komt, en dat kan net zo goed de db zelf zijn. En je wilt neem ik aan alleen het formulier sluiten, niet de db.
 
Okee, bedankt voor de tip.
aangepast.

Is er wellicht een andere optie om de gegevens van de eerste invoer te vergrendelen?
 
Riekt als een andere vraag...
Hallo, ik ben opzoek naar een manier om records te vergrendelen.
Wanneer het formulier voor de eerste maal wordt geopend mogen alle records aangepast worden. men sluit af door op een button te drukken.
Eerste record vergrendelen is iets anders als alle records aanpassen. Wat bedoel je precies?
 
Het gaat om een kwaliteitscontrole van een product,

als men de controle voor het betreffende product (record ) uitgevoerd heeft moet het formulier worden gesloten.
Het moet nu niet meer mogelijk zijn om dit record te wijzigen.
als optie dacht ik dus om dit record te vergrendelen voor aanpassingen.
als 2e optie bedenk ik me nu wellicht een eenvoudigere weg;

als men het formulier sluit moet dit worden ondertekend met de username via een dropdown menu, wanneer de dropdown leeg is mag het formulier geopend worden, is dit ingevuld dan moet het formulier niet openen.
 
het blijkt maar weer eens dat er meerdere wegen naar Rome leiden...

Code:
 If Me.GebruikerID1 > 1 Then
    DoCmd.close acForm, Me.Form.Name
    
    Else: End If

in het formload event.

opgelost!
 
De vraag is natuurlijk: is dit de beste? Lijkt mij van niet, want hoe open je het formulier nu om records te bekijken? Zelf zou ik het dus zo doen:
Code:
Private Sub Form_Current()
    If Not Me.cboUserID = vbNullString Then
            Me.AllowEdits = False
    Else
        Me.AllowEdits = True
    End If
End Sub
Daarmee bereik je dat je per record kunt bladeren, en ofwel kunt bewerken, ofwel alleen kunt lezen.
 
dat is de betere oplossing, maar als ik allowedits op false zet kan ik nog steeds wijzigingen doorvoeren.

zal te maken hebben met de wijze waarop ik dit het geregeld:
Code:
Option Compare Database
Option Explicit

Private Sub closeCNT1_Click()
DoCmd.close acForm, Me.Form.Name
  
End Sub

'Laden van het subformulier in het huidige scherm.

Private Sub Form_Load()
    Form.Move Left:=4800, Top:=2000, Width:=14500, Height:=11000
    If Me.GebruikerID1 > 1 Then
    Me.AllowEdits = False
   
    Else: Me.AllowEdits = True
     
    End If
  End Sub


'ja / nee buttons
Private Sub nrAkkoord1_Click()
    Me.Requery
End Sub

'íngave van de materiaal afwijking
Private Sub MTnn1m_Click()
    Me.Materiaal = Me.Materiaal1 - 0.01
    Me.Requery
End Sub
Private Sub mtn1m_Click()
    Me.Materiaal1 = Me.Materiaal1 - 0.1
    Me.Requery
End Sub
Private Sub mt1m_Click()
    Me.Materiaal1 = Me.Materiaal1 - 1
    Me.Requery
End Sub
Private Sub mtnn1p_Click()
    Me.Materiaal1 = Me.Materiaal1 + 0.01
    Me.Requery
End Sub
Private Sub mtn1p_Click()
    Me.Materiaal1 = Me.Materiaal1 + 0.1
    Me.Requery
End Sub
Private Sub mt1p_Click()
    Me.Materiaal1 = Me.Materiaal1 + 1
    Me.Requery
End Sub
'de vergelijkingen met de query om te zien of er een blokkade moet worden ingesteld.

Private Sub Form_Current()
On Error Resume Next

If IsNull(Me.Werkelijk1) Then
Exit Sub
ElseIf Me.Werkelijk1 > Me![subformulier qryAfwijkingen].Form!TEST Then
    Me.BLOK.Visible = True
ElseIf Me.nrAkkoord1 = False Then
    Me.BLOK.Visible = True

Else
      
    Me.BLOK.Visible = False
End If


End Sub


'ingave van het tanknummer
Private Sub tank1min_Click()
    Me.Tanknummer1 = Me.Tanknummer1 - 1
End Sub
Private Sub tank1plus_Click()
    Me.Tanknummer1 = Me.Tanknummer1 + 1
End Sub


'ingave van het tijdstip van de controle, de standaard waarde is de huidige tijd.
Private Sub tijd10m_Click()
    Me.TijdstipControle1 = Me.TijdstipControle1 - TimeSerial(0, 10, 0)
End Sub
Private Sub tijd10p_Click()
    Me.TijdstipControle1 = Me.TijdstipControle1 + TimeSerial(0, 10, 0)
End Sub
Private Sub tijd1m_Click()
    Me.TijdstipControle1 = Me.TijdstipControle1 - TimeSerial(0, 1, 0)
End Sub
Private Sub tijd1p_Click()
    Me.TijdstipControle1 = Me.TijdstipControle1 + TimeSerial(0, 1, 0)
End Sub
Private Sub tijd60m_Click()
    Me.TijdstipControle1 = Me.TijdstipControle1 - TimeSerial(1, 0, 0)
End Sub
Private Sub tijd60p_Click()
    Me.TijdstipControle1 = Me.TijdstipControle1 + TimeSerial(1, 0, 0)
End Sub

een idee waardoor dit wordt veroorzaakt?
 
Zoek de verschillen in de code.... Ik gebruik <Bij aanwijzen>, jij gebruikt <Bij laden>. Eén van de twee werkt eenmalig, de ander bij elke verandering van record. Drie keer raden welke waar hoort. Als je code overneemt, doe het dan wel goed :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan