Hallo,
in Access werden die Daten ja immer gespeichert sobald man in das nächste Feld springt. Wie kann ich vor dem speichern immer zuerst einen VBA-Code durchlaufen lassen?
Also immer wenn ein Datensatz gespeichert wird soll zuerst ein VBA-Code durchlaufen werden.
Hallo,
da gibts verschieden Möglichkeiten!
Zitatin Access werden die Daten ja immer gespeichert sobald man in das nächste Feld springt
Das stimmt so nicht ganz - die Daten werden automatisch in die Tabelle geschrieben, wenn der aktuelle Datensatz verlassen wird.
Du kannst dazu jedoch m.E. am Besten das Ereignis 'BeforeUpdate' also 'Vor Aktualisierung' des Formulars benutzen.
Was möchtest du denn mit deinem geplanten Code bewirken?
Grüße
Peter
Ich möchte dort eine If-Anweisung vor setzen. Je nach dem welche Daten ausgefüllt wurden soll dann dem Datensatz ein "status" verpasst werden.
Bei meinem "Speicher-Button" funktioniert das schon.
Ich hatte gedacht ich könnte einfach bei "vor Aktualisierung" des Formulares schreiben call button_save_click. Aber dann kommt immer eine Fehlermeldung und springt in diese Zeile:
DoCmd.RunCommand (acCmdSaveRecord)
Fehlermeldung= Das Makro oder die Funktion, das bzw. die für dieses Feld auf die Eigenschaft 'VorAktualisierung' oder 'Gültigkeitsregel' festgelegt ist, hindert Microsoft Office Access daran, die Daten im Feld zu speichern.
Hallo,
im Prinzip geht's ja auch so nur den Aufruf des Klick-Ereignisses des Speicherbuttons kannst du dir sparen.
Nimm deine Bedingung und schreib sie ins BeforeUpdate-Ereignis.
Zitat...soll dann dem Datensatz ein "status" verpasst werden...
Wenn ich recht gehe in der Annahme, dass deine zugrunde liegende Tabelle auch ein Feld namens
Status enthält,
KÖNNTEST du folgendes ins Ereignis BeforeUpdate aufnehmen:
If Me!DeinFeld = "1" Then
DoCmd.RunSQL ("UPDATE DeineTabelle SET Status = 1 WHERE ID=" & Me!DeinIDFeld )
End If
Ich habe hier die Bedingung natürlich nur beispielhaft eingetragen.
Das ID-Feld deiner Datenherkunft des Formulars MUSS sich aber am Formular befinden (kann jedoch ausgeblendet sein - unsichtbar)
Damit wird veranlasst dass, wenn die Bedingung erfüllt ist, das Feld 'Status' in der Tabelle XY auf den Wert 1 gesetzt wird.
Wenn du bei der Tabellendefinition angegeben hast, dass das Feld 'Status' einen Standardwert hat z.B. 2 sollte das in der Form genügen.
Wenn das nicht der Fall ist brauchst du noch die richtige Aktion wenn die Bedingung nicht erfüllt ist:
If Me!DeinFeld = "1" Then
DoCmd.RunSQL ("UPDATE DeineTabelle SET Status = 1 WHERE ID=" & Me!DeinIDFeld )
Else
DoCmd.RunSQL ("UPDATE DeineTabelle SET Status = 2 WHERE ID=" & Me!DeinIDFeld )
End If
HTH
Peter
Dann wird der Code aber nicht mehr ausgeführt wenn ich den Speicher-Button anklicke.
Hi,
sicher wirds ausgeführt, das Speichern hinter dem Speicher-Button ebenso wie die Bedingung im BeforeUpdate-Ereignis.
Du darfst nur KEINEN Haltepunkt auf die Speicherbutton_Click - Prozedur setzen!
Oder was meinst du, welcher Code NICHT ausgeführt wird?
Ich habe mir jetzt zum testen in den Code ein Msgbox eingefügt.
Wenn ich einfach so von den DS wechsel dann führt der BeforteUpdate aus. Aber wenn ich einfach auf speichern klicke dann wird der Code nicht ausgeführt. Ich meine damit den Code mit der If -Anweisung bei BeforeUpdate.
Vielleicht liegt das auch an meinem Speicher-Code?!?
Private Sub button_save_Click()
Dim vk_nr As Long
'--------------------------------------------------------------
' Speicher-Kommando
'--------------------------------------------------------------
DoCmd.RunCommand (acCmdSaveRecord)
vk_nr = Me!vk_nr
'--------------------------------------------------------------
' Aktualisieren der Kundenliste
'--------------------------------------------------------------
Liste15.Enabled = True
Liste15.Requery
Liste15.SetFocus
Liste15 = vk_nr
Call Liste15_AfterUpdate
End Sub
Private Sub Liste15_AfterUpdate()
Dim rs As DAO.Recordset
Set rs = Me.Recordset.Clone
rs.FindFirst "[vk_nr] = " & str(Liste15)
If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub
Hallo, guten Morgen!
Nimm alle Befehle aus dem Speicherbutton raus und lass nur das Speicher-Kommando drin.
Die anderen Befehle und Aufrufe pack in die BeforeUpdate - Routine, dann müsste es ordentlich laufen.
Du KANNST auch versuchen, den Speicher-Befehl ganz ans Ende zu stellen und die anderen Befehle vor dem Speichern ausführen
Grüße
Peter
Danke, jetzt funktionierts.
Sehr schön, freut mich wenn wir dir hier helfen konnten.
Bitte den Thread in deinem Startbeitrag auf 'gelöst' setzen - DANKE
viel Erfolg weiterhin
Grüße
Peter