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.
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 SubZitat..weiter auf die Tab-Taste drücke, dann springt es irgendwann zu einem neuen Datensatz...
stelle die Form-Eigenschaft "Andere/Zyklus" auf "Aktueller Datensatz".
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