Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: DaveWilli am Februar 07, 2022, 16:11:29

Titel: Daten werden trotz "Exit Sub"-Befehl gespeichert
Beitrag von: DaveWilli am Februar 07, 2022, 16:11:29
Hallo,
hier mein Problem:

Ich möchte eine Prüfung machen beim Eingeben neuer Daten:
Wenn es eine Kombination von zwei kombinierten Felder schon gibt (in meinem Fall "cboParzelle" und "cboTiefe") und ich auf meinen Speichern-Button Klicke, dann funktioniert die Prüfung zwar und es kommt die MsgBox, jedoch sollen die Daten nach dem Klick auf Cancel nicht in der Tabelle gespeichert werden, was sie jedoch passiert.

Hier mein Codeschnipsel:
Private Sub cmbspeichern_Click()

    If DCount("*", "tbalBodendaten", "bodparIDRef=" & Me!cboParzelle & " And bodnmintIDRef=" & Me!cboTiefe) > 0 Then
        If MsgBox("Für die ausgewählte Parzelle und Bodentiefe bestehen schon Daten." & vbCrLf & vbCrLf _
            & "Bitte wählen sie eine andere Parzelle oder Tiefe aus!", vbOKCancel + vbDefaultButton2) = vbCancel Then
        Exit Sub
       
        Else
            DoCmd.RunCommand acCmdSaveRecord
            DoCmd.Close acForm, "frmBodenNeu"
            Forms!frmBodenDaten.Requery
            Forms!frmBodenDaten.cmbBearbeiten.Enabled = True
            Forms!frmBodenDaten.cmbNeu.Enabled = True
            Forms!frmBodenDaten.cmbSpeichern.Enabled = True
           
        End If
    End If
   
End Sub

Vielleicht gibt es hier eine andere Möglichkeit das zu machen. Vielleicht nicht über den Speichernbutton, aber ich weiß nicht wie.

Und noch eine weitere Frage:
Die Daten werden in einem Pop Up-Fenster eingegeben als normales Formular und wenn ich dort immer weiter auf die Tab-Taste drücke, dann springt es irgendwann zu einem neuen Datensatz und der vorherige wird gespeichert. Wie kann ich das vermeiden, dass das passiert?

Ich hoffe ich habe micht verständlich genug ausgedrückt.

Danke schonmal für eure Hilfe.
Titel: Re: Daten werden trotz "Exit Sub"-Befehl gespeichert
Beitrag von: DF6GL am Februar 07, 2022, 17:01:19
Hallo,

das Klick-Ereignis ist falsch gewählt.

Nutze das Form_BeforeUpdate-Ereignis, um die Prüfung durchzuführen:

Private Sub Form_BeforeUpdate (Cancel as Integer)

    If DCount ("*", "tbalBodendaten", "bodparIDRef=" & Me!cboParzelle & " And bodnmintIDRef=" & Me!cboTiefe) > 0 Then
         MsgBox  "Für die ausgewählte Parzelle und Bodentiefe bestehen schon Daten." & vbCrLf & vbCrLf _
            & "Bitte wählen sie eine andere Parzelle oder Tiefe aus!", vbOKOnly
         Cancel =true
       
     Else

            Forms!frmBodenDaten.Requery                      'Diese Einstellungen sind vermutlich hier an falscher Stelle
            Forms!frmBodenDaten.cmbBearbeiten.Enabled = True
            Forms!frmBodenDaten.cmbNeu.Enabled = True
            Forms!frmBodenDaten.cmbSpeichern.Enabled = True
           
      End If


End Sub

Zitat..weiter auf die Tab-Taste drücke, dann springt es irgendwann zu einem neuen Datensatz...


stelle die Form-Eigenschaft "Andere/Zyklus" auf "Aktueller Datensatz".
   
Titel: Re: Daten werden trotz "Exit Sub"-Befehl gespeichert
Beitrag von: DaveWilli am Februar 10, 2022, 14:14:56
Danke für die Antwort. Es hat etwas weitergeholfen.
Dennoch bekomme ich, wenn ich auf meinen Speichern-Butto Klicke eine VBA-Fehlermeldung: Kein aktueller Datensatz.

Mein Code sieht jetzt so aus:
Private Sub cmbspeichern_Click()
       
            DoCmd.RunCommand acCmdSaveRecord
            DoCmd.Close acForm, "frmBodenNeu"
            Forms!frmBodenDaten.Requery
            Forms!frmBodenDaten.cmbBearbeiten.Enabled = True
            Forms!frmBodenDaten.cmbNeu.Enabled = True
            Forms!frmBodenDaten.cmbSpeichern.Enabled = True
           
End Sub

Private Sub Form_BeforeUpdate(Cancel As Integer)

    If DCount("*", "tbalBodendaten", "bodparIDRef=" & Me!cboParzelle & " And bodnmintIDRef=" & Me!cboTiefe) > 0 Then
         MsgBox "Für die ausgewählte Parzelle und Bodentiefe bestehen schon Daten." & vbCrLf & vbCrLf _
            & "Bitte wählen sie eine andere Parzelle oder Tiefe aus!", vbOKOnly
         Cancel = True
        
    End If
End Sub