Data niet wijzigen bij sluiten tabel

Status
Niet open voor verdere reacties.

Pinokkio89

Gebruiker
Lid geworden
23 okt 2006
Berichten
104
Goedendag,

Ik heb een form gemaakt waarin ik orders kan toevoegen aan een tabel. Door middel van de knop "add record" worden de gegevens aan de tabel toegevoegd.

Ik wil voorkomen dat een gebruiker data invult, vervolgens het form afsluit (zonder op "add record" te klikken) en er data wordt toegevoegd aan het tabel. Ik heb dit kunnen realiseren door de volgende code te gebruiken:

Code:
Private Sub Exit_Click()
On Error GoTo Err_Exit_Click

[b]    Me.Undo
    DoCmd.Close[/b]

Exit_Exit_Click:
    Exit Sub

Err_Exit_Click:
    MsgBox Err.Description
    Resume Exit_Exit_Click
    
End Sub
In dit geval wordt de data alleen toegevoegd aan het tabel wanneer de gebruiker op de knop "add record" klikt, en niet bij het sluiten van het form.

Het form kan ook als acEdit geopend worden, in dit geval wil ik ervoor zorgen dat de gebruiker weer eerst op een knop moet drukken nadat deze wijzigingen heeft aangebracht, waarna de data in het tabel gewijzigd wordt. Ik heb dit gerealiseerd door middel van de volgende code:

Code:
Private Sub Update_Click()
On Error GoTo Err_Update_Click


    DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70

Exit_Update_Click:
    Exit Sub

Err_Update_Click:
    MsgBox Err.Description
    Resume Exit_Update_Click
    
End Sub

Ook dit werkt goed.

Het probleem is nu echter dat, wanneer een gebruiker data wijzigt en direct naar een andere order gaat (zonder op de "Update" knop te klikken), de data in het tabel ook gewijzigd wordt. Dit wil ik voorkomen. Ik wil dus alleen dat er data gewijzigd wordt wanneer er daadwerkelijk gebruik wordt gemaakt van de "Update" knop.

Kan iemand mij vertellen hoe ik dit kan realiseren?

Alvast bedankt!
 
Zelf werk ik niet met een update knop, mijn database onthoud alles wat gewijzigd is. Wel zo makkelijk maar er kan natuurlijk een reden zijn waarom je voor deze constructie gekozen heb.
Je kan natuurlijk een controle toevoegen op de knop die je gebruikt om naar de andere orders te gaan, welke controleerd of de gegevens in het scherm gewijzigd zijn en hier de gebruiker op attendeert.

Of bijvoorbeeld een ACsaveRecord bij het <bij wijzigen> event van de velden, is dat misschien iets voor je ?
 
Jeroen, bedankt voor uw antwoord.

Ik heb inderdaad een reden waarom ik voor deze constructie heb gekozen.

Ik heb geen knop waarmee wordt genavigeerd naar andere orders. Door middel van ctrl + F en de scroll knop kan er naar andere orders worden genavigeerd.

Of bijvoorbeeld een ACsaveRecord bij het <bij wijzigen> event van de velden, is dat misschien iets voor je ?
Wat zou ik hiermee dan kunnen? Ik wil namelijk alleen dat het record geupdate kan worden wanneer er op de "Update" knop wordt geklikt.
 
Je kunt de status van het record afvangen met Me.Dirty. Hiermee check je of het record is gewijzigd (Me.Dirty=True) of niet (Me.Dirty=False). Op basis van deze status kun je dan een knop activeren of niet, bijvoorbeeld.
 
Sorry voor de late reactie.

Ik heb even een simpele testdatabase gemaakt, zie de bijlage.

Wanneer je op de button Edit klikt, wordt frm_Namen geopend in de acEdit mode.

Als je nu bijvoorbeeld van de naam "Piet", "Pieter" maakt, en vervolgens op Exit klikt, dan wordt de naam in tabel tbl_Namen niet veranderd, dit is zoals ik het hebben wil.

Als je nu bijvoorbeeld opnieuw van de naam "Piet", "Pieter" maakt, en vervolgens op Update record klikt, dan wordt de naam in tabel tbl_Namen wel aangepast, dit is zoals ik het hebben wil.

Probleem is nu het volgende:

Als je nu bijvoorbeeld opnieuw van de naam "Piet", "Pieter" maakt, je nu vervolgens naar een ander record scrollt / navigeert en je dan op Exit klikt; de naam "Piet" in tabel tbl_Namen wel veranderd is. Dit terwijl er geen gebruik is gemaakt van de Update record button.

In dit laatste geval zou de naam dus niet gewijzigd moeten zijn van "Piet" in "Pieter".

Heeft iemand een idee hoe ik dit kan realiseren?

Alvast bedankt!
 
't Is laat.... geen bijlage :)
 
Met deze code vang je een wijziging af met een msgbox.

Code:
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim iCheck As Integer
    If Me.Dirty = True Then
        iCheck = MsgBox("Wil je het record bewaren?", vbYesNo + vbDefaultButton2)
        If iCheck = vbNo Then
            Me.Undo
        End If
    End If
End Sub
Je hebt zoiets wel nodig, omdat je uiteraard ook met de toetsen <PageUp> en <PageDown> naar een ander record kunt gaan, onafhankelijk van de navigatieknoppen.
 
Laatst bewerkt:
OctaFish, hartelijk dank!

Mocht je eens in de buurt van Haarlem komen, dan voorzie ik je graag van bier of iets anders ;).
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan