Standaardwaarde in een formulier herstellen

Status
Niet open voor verdere reacties.

SanderLooman

Gebruiker
Lid geworden
21 feb 2011
Berichten
12
Hallo,

Ik heb een standaardwaarde voor een aantal velden in een formulier. Nu wil ik graag een knop hebben die deze standaardwaarde kan herstellen indien de standaardwaarde gewijzigd is. Is dat mogelijk met een functie?
 
Dat kan; je zou dan bijvoorbeeld de DefaultValue van die velden uit kunnen lezen, en als de feitenlijke waarde anders is, de waarde vervangen. Daarbij wel filteren op velden die geen default waarde hebben, anders worden die leeggemaakt. En dat wil je denk ik niet...
 
Het kan zijn dat ik je verkeerd begrijp, maar als je bedoelt een aantal waarden in een veld laten vullen door middel van een knop dan zou dit je op weg moeten helpen;

Code:
Private sub JouwKnopNaamHier_click()
me.JouwVeldNaamHier = "jeTekstHier"
End sub

Verandered bij mij de standaardwaarde van het veld in de tekst die ik opgegeven heb bij "jeTekstHier"
Maar nogmaals misschien denk ik te simpel hahaha
 
Ik begrijp de vraag toch iets anders... Volgens mij wil TS alle waarden in een tekstveld resetten op basis van een standaardwaarde in het (tekst)veld. Er zijn twee mogelijkheden: je hebt een standaardwaarde ingesteld in de tabel, of je hebt 'm ingesteld op het formulier. De uiteindelijke werkwijze is bijna gelijk, maar hier dus beide oplossingen.

Wil je de standaardwaarde uit de tabel halen, dan kan dat op de volgende manier:
Code:
With CurrentDb.OpenRecordset("SELECT Vestiging, Schaal FROM Medewerker")
    .MoveLast
    .MoveFirst
    If .RecordCount > 0 Then
        Do While Not .EOF
            If Not Nz(.Fields("Vestiging").DefaultValue, "") = "" Then
                If .Fields("Vestiging").Value <> .Fields("Vestiging").DefaultValue Then
                    .Edit
                    .Fields("Vestiging").Value = .Fields("Vestiging").DefaultValue
                    .Update
                End If
            End If
            If Not Nz(.Fields("Schaal").DefaultValue, "") = "" Then
                If .Fields("Schaal").Value <> .Fields("Schaal").DefaultValue Then
                    .Edit
                    .Fields("Schaal").Value = .Fields("Schaal").DefaultValue
                    .Update
                End If
            End If
        .MoveNext
        Loop
    End If
End With
Me.Requery
Me.Refresh

Wil je de waarde uit het formulier gebruiken, dan kan dat zo:
Code:
Dim iVestiging As Integer, iSchaal As Integer

iVestiging = Nz(Me.txtVestiging.DefaultValue)
iSchaal = Nz(Me.txtSchaal.DefaultValue)
With CurrentDb.OpenRecordset("SELECT Vestiging, Schaal FROM Medewerker")
    .MoveLast
    .MoveFirst
    If .RecordCount > 0 Then
        Do While Not .EOF
            If Not iVestiging = 0 Then
                If .Fields("Vestiging").Value <> iVestiging Then
                    .Edit
                    .Fields("Vestiging").Value = iVestiging
                    .Update
                End If
            End If
            If Not iSchaal = 0 Then
                If .Fields("Schaal").Value <> iSchaal Then
                    .Edit
                    .Fields("Schaal").Value = iSchaal
                    .Update
                End If
            End If
        .MoveNext
        Loop
    End If
End With
Me.Requery
Me.Refresh

Deze voorbeelden gebruiken een 'harde' codering van de velden. Wil je het flexibeler, dan moet je de code nog een beetje verbouwen. Maar dat hoor ik nog wel ;)
 
Beetje aparte aanpak, dat kan simpeler.

Zorg ervoor dat je standaardwaarden in je formulierontwerp hebt gedefinieerd.

Terugzetten van ALLE standaardwaarden

Maak een knop.
Zet deze code in de Bij Klikken gebeurtenis van je knop

Code:
Dim ctl As Control
Dim prp As Property

For Each ctl In Me.Controls
        For Each prp In ctl.Properties
            If prp.Name = "DefaultValue" Then
                'MsgBox prp.Value
                If Len(Trim(ctl.DefaultValue & "")) <> 0 Then
                'And ctl.Value <> ctl.DefaultValue Then
                ctl.Value = ctl.DefaultValue
                End If
            End If
        Next prp
Next ctl

Terugzetten van een standaardwaarde voor een specifiek veld

Maak een knop.
Zet deze code in de Bij Klikken gebeurtenis van je knop

Code:
Me.naamvanjeveld = Me.naamvanjeveld.DefaultValue

Tardis
 
Zo apart is die niet... die van mij kun je prima gebruiken als je alle records wilt resetten. En hij werkt verder prima. Er zijn meerdere wegen die naar een resultaat leiden.
 
Bedankt zover! Heb de opties geprobeerd en die van Tardis doet exact wat ik wil. het enige wat nog niet werkt is dat de standaardwaarde nu als "*" wordt weergeven, maar dat moet een * zijn.
 
Aangepaste code zodat de dubbele aanhalingstekens weg zijn:

Code:
Dim ctl As Control
Dim prp As Property

For Each ctl In Me.Controls
        For Each prp In ctl.Properties
            If prp.Name = "DefaultValue" Then
                'MsgBox prp.Value
                If Len(Trim(ctl.DefaultValue & "")) <> 0 Then
                'And ctl.Value <> ctl.DefaultValue Then
                ctl.Value = Replace(ctl.DefaultValue, """", "")
                End If
            End If
        Next prp
Next ctl

Tardis
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan