Hallo
Ich hab in einem gebundenem Formular eine prüf Funktion eingebaut die den Wert True/False zurück gibt um zu bestätigen das alle Pflicht Felder vor den speichern auch ausgefüllt sind
Beim Navigieren zum neuen Datensatz wird der Speicher Button deaktiviert und nach ausfüllen aller Felder nach aktualisieren wieder aktiviert
Eigentlich ja nichts Besonderes aber
Wen der Button wieder aktiviert wird dann übergeht er die if Anweisung und löst die prüf Funktion nicht aus sondern führt nur den Inhalt der Anweisung aus
Den Button wird mit CmdSpeichernMit.Enabled = True Bzw. False angesteuert
Wenn ich die Prozedur die hinter dem Speichen Button in einen anderen Button stelle geht alles einwandfrei wen ich dann aber wieder .Enabled = True Bzw. False anwende hat auch dieser den defekt
If fncPruefenSpeicher = True Then
DoCmd.RunCommand acCmdSaveRecord
End If
Public Function fncPruefenSpeicher()
Dim Msg As String
fncPruefenSpeicher = True
If IsNull(Me!TxTVeranstaltungName) Then
Msg = "Bitte Tragen sie einen Eventnamen ein, " & vbCr & "" & vbCr & " das Feld darf nicht Leer sein"
MsgBox Msg, vbInformation Or vbOKOnly Or vbDefaultButton1, "Bitte Ausfüllen"
fncPruefenSpeicher = False
End If
If IsNull(Me!TxTVeranstaltungAdresse) Then
Msg = "Bitte Tragen sie einen Adresse ein, " & vbCr & "" & vbCr & " das Feld darf nicht Leer sein"
MsgBox Msg, vbInformation Or vbOKOnly Or vbDefaultButton1, "Bitte Ausfüllen"
fncPruefenSpeicher = False
End If
.
.
.
.
.
.
.
End Function
Tja keine Ahnung wo der Fehler liegt
Hallo,
noch ein bisschen unklar, was da genau abgeht:
"Beim Navigieren zum neuen Datensatz wird der Speicher Button deaktiviert "
zeig mal diesen (kompletten) Code.
"nach ausfüllen aller Felder nach aktualisieren wieder aktiviert "
zeig auch diesen Code...
"Wen der Button wieder aktiviert wird "
zeige auch diesen Code...
Hallo!
Das habe ich ganz einfach so gemacht das ich die Prozedur mit Call Bottons_One aufrufe in welchen Ereignis ich es brauche z.b. TxtFeld _AfterUpdate oder im Next Button den ich dann auch sperre damit er nicht weiter navigiert sowie den Exit damit das Formular nicht geschlossen werden kann
Private Sub CmdNaechsterMit_Click()
On Error GoTo Err_CmdNaechsterMit_Click
DoCmd.GoToRecord , , acNext
Call Bottons_One
Exit_CmdNaechsterMit_Click:
Exit Sub
Err_CmdNaechsterMit_Click:
If Err.Number = 2105 Then
DoCmd.GoToRecord , , acFirst
Resume Exit_CmdNaechsterMit_Click
End If
MsgBox Err.Description
Resume Exit_CmdNaechsterMit_Click
End Sub
Private Sub Bottons_One()
If Nz(Me!CboVeranstaltungsVeranstalterIDRef, "") <> "" And Nz(Me!TxTVeranstaltungName, "") <> "" And Nz(Me!CboVeranstaltungArtIDRef, "") <> "" And Nz(Me!CboOrtIDRef, "") <> "" And Nz(Me!TxTVeranstaltungAdresse, "") <> "" Then
CmdSpeichernMit.Enabled = True
Else
CmdSpeichernMit.Enabled = False
End If
End Sub
Code für das Schließen der Formulars
Option Compare Database
Option Explicit
Public bolSchliessenErlaubt As Boolean
Private Sub CmdExit_mit_Speichern_Click()
If fncPruefen = True Then
bolSchliessenErlaubt = True
DoCmd.Close acForm, "FrmTlbLieferant"
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
Dim Msg As String
If bolSchliessenErlaubt = False Then
Msg = "Das Formular kann nur über Exit Mit/Ohne Speichern " & vbCr & "geschlossen werden damit es nicht zu Fehlern kommt !" & vbCr & ""
MsgBox Msg, vbCritical Or vbOKOnly, "Achtung:"
Cancel = True
End If
End Sub
Der Fehler ist das nach den aktivieren des Speicher Buttons die if ignoriert wird und immer gespeichert wird
If fncPruefenSpeicher = True Then
DoCmd.RunCommand acCmdSaveRecord
End If
Gruß Frank
Hallo,
probier das einmal nur so :
Sub Form_BeforeUpdate(Cancel as Integer)
Cancel = not fncPruefenSpeicher()
End Sub
In der Funktion "fncPruefenSpeicher" kannst Du ja für die Form-Schliessen-Geschichte noch die Variable "bolSchliessenErlaubt" entspr. setzen.
Hallo!
Erst mal danke für deine mühe!
Die Lösung von dir funktioniert wenn ich das CmdSpeichernMit.Enabled = True/False weglasse
Beispiel:
Der Button speichern ist aktiviert und ich lösche den Inhalt eines Plicht Feldes und belasse den Cursor im Feld wird der Speicher Button an bleiben da die Private Sub Bottons_One Prozedur nicht angesprochen wird
Das Formular speichert dann den Datensatz mit DoCmd.RunCommand acCmdSaveRecord
dass das in einer if Anweisung steht interessiert da überhaupt nicht und die Function fncPruefenSpeicher() wird nicht angesprochen
wende ich das CmdSpeichernMit.Enabled = True/False oder auch .Visible = True/False an dann geht's ich darf also nichts an den Button verändern oder mit ihm machen dann geht's
das Phänomen tritt aber nur bei einem gebundenem Formular auf nicht wenn es über ein Recordset Objekt gespeist wird
Gruß Frank
Hallo Frank77
Du hast einen "vollständigen Datensatz" in dem du nun den Inhalt eines pflicht Feld löscht ohne im Nachgang dieses zu verlassen, wenn du es aber wirklich prüfen möchtest sollte aus meiner Sicht, nun das Ereigniss eintretten "bei Änderung" was überprüft ob nun alle Daten wirklich aus gefüllt worden sind.