Hallo Jungs,
ich habe eine Frage zum Laufzeitfehler 3134 :
ich habe den folgenden Code hinter dem Button : Add gepackt und es funktioniert einwandfrei :
If IsNull(txtID) Then
MsgBox "Bitte geben Sie die Daten ein!", , "Daten eingeben"
Cancel = True
Me.txtID.SetFocus
Exit Sub
End If
If Me.txtID.Tag & "" = "" Then
CurrentDb.Execute "INSERT INTO tblMitarbeiter(mit_ID, mit_Name, mit_Vorname, mit_Beruf) " & _
"VALUES (" & Me.txtID & ", '" & Me.txtName & "', '" & Me.txtVorname & "', ' " & Me.txtBeruf & " ')"
Else
CurrentDb.Execute "UPDATE tblMitarbeiter " & _
"SET mit_ID = " & Me.txtID & _
", mit_Name = '" & Me.txtName & "'" & _
", mit_Vorname = '" & Me.txtVorname & "' " & _
", mit_Beruf = '" & Me.txtBeruf & "'" & _
"WHERE mit_ID = " & Me.txtID.Tag
End If
cmdClear_Click
subMitarbeiter_frm.Form.Requery
Mein Problem:
Wenn ich den neuen Datensatz eingefügt habe, dann landet Kursor wieder zum ersten Feld (wo ich anfange die Daten einzugeben) : Me.txtID.SetFocus. Und es ist richtig so. Wenn ich aber nichts eingebe, und dann den Button : Add betätige, dann erscheint die Fehlermeldung: Laufzeitfehler 3134
Wie kann ich abfangen, wenn man nichts eingibt, dass man wieder zum ersten Feld per Methode : SetFocus landet, ohne die Fehlermeldung 3134 zu verursachen.
Vielen Dank
Beck
Hallo,
bitte zeige die Prozeduren vollständig, mit Kopf und Fuß.
Damit man weiß, welche Ereignisse verwendet wurden.
ZitatHallo Jungs,
damit wäre ich vorsichtig, hier treten auch kompetente Frauen in Erscheinung. ;D
Hallo,
welche Bedeutung hat die Marke (Tag) beim Feld "txtID" ?
Ansonsten solltest du latente Fehler in der SQL-Syntax (-->Fehlermeldung!) vermeiden
If Me!txtID.Tag & "" = "" Then ' ??
CurrentDb.Execute "INSERT INTO tblMitarbeiter(mit_ID, mit_Name, mit_Vorname, mit_Beruf) " & _
"VALUES (" & nz(Me!txtID,0) & ", '" & Me!txtName & "', '" & Me!txtVorname & "', '" & Me!txtBeruf & "')", dbFailOnError
Else
CurrentDb.Execute "UPDATE tblMitarbeiter " & _
" SET mit_ID = " & nz(Me!txtID,0) & _ ' ??
" , mit_Name = '" & Me!txtName & "'" & _
" , mit_Vorname = '" & Me.txtVorname & "'" & _
" , mit_Beruf = '" & Me!txtBeruf & "'" & _
" WHERE mit_ID = " & Clng(Me!txtID.Tag) , dbFailOnError ' ??
End If
Hallo,
stelle fest, woran der Insert scheitert und behebe den Fehler, damit du die Kontrolle über den Ablauf behältst.
Und wie sieht es mit der Fehlerbehandlung in der Prozedur aus?!
Hallo Mädels und Jungs :),
Vielen Dank für Euren Feedback:
Mein Prozedur sieht folgenden Maßen aus:
Private Sub cmdAdd_Click()
If IsNull(txtID) Then
MsgBox "Bitte geben Sie die Daten ein!", , "Daten eingeben"
Cancel = True
Me.txtID.SetFocus
Exit Sub
End If
If Me.txtID.Tag & "" = "" Then
CurrentDb.Execute "INSERT INTO tblMitarbeiter(mit_ID, mit_Name, mit_Vorname, mit_Beruf) " & _
"VALUES (" & Me.txtID & ", '" & Me.txtName & "', '" & Me.txtVorname & "', ' " & Me.txtBeruf & " ')"
Else
CurrentDb.Execute "UPDATE tblMitarbeiter " & _
"SET mit_ID = " & Me.txtID & _
", mit_Name = '" & Me.txtName & "'" & _
", mit_Vorname = '" & Me.txtVorname & "' " & _
", mit_Beruf = '" & Me.txtBeruf & "'" & _
"WHERE mit_ID = " & Me.txtID.Tag
End If
cmdClear_Click
subMitarbeiter_frm.Form.Requery
End Sub
Private Sub cmdClear_Click()
Me.txtID = ""
Me.txtName = ""
Me.txtVorname = ""
Me.txtBeruf = ""
'Focus auf ID
Me.txtID.SetFocus
Me.cmdAdd.Caption = "Add"
Me.cmdEdit.Enabled = True
Me.txtID.Tag = ""
End Sub
Private Sub cmdClose_Click()
DoCmd.Close
End Sub
Private Sub cmdDelete_Click()
If Not (Me.subMitarbeiter_frm.Form.Recordset.EOF And Me.subMitarbeiter_frm.Form.Recordset.BOF) Then
If MsgBox("Sind Sie Sicher?", vbYesNo) = vbYes Then
CurrentDb.Execute "DELETE FROM tblMitarbeiter " & _
"WHERE mit_ID = " & Me.subMitarbeiter_frm.Form.Recordset.Fields("mit_ID")
Me.subMitarbeiter_frm.Form.Requery
End If
End If
End Sub
Private Sub cmdEdit_Click()
If Not (Me.subMitarbeiter_frm.Form.Recordset.EOF And Me.subMitarbeiter_frm.Form.Recordset.BOF) Then
With Me.subMitarbeiter_frm.Form.Recordset
Me.txtID = .Fields("mit_ID")
Me.txtName = .Fields("mit_Name")
Me.txtVorname = .Fields("mit_Vorname")
Me.txtBeruf = .Fields("mit_Beruf")
Me.txtID.Tag = .Fields("mit_ID")
Me.cmdAdd.Caption = "Update"
Me.cmdEdit.Enabled = False
End With
End If
End Sub
Falls Ihr Ideen habt, bin ich Ihnen sehr dankbar
Vielen Dank
Beck
Hallo,
bitte verwende für derartige Codedarstellungen immer die Codetags.
Dann wird das übersichtlicher.
Hat oben jemand für Dich gemacht.
Was willst Du mit dem Cancel = True, das ist hier sinnlos, es gibt keinen Cancelparameter in der Prozedur.
Warum verwendest Du nicht einfach ein gebundenes Formular, dann wird das Meiste des Codes ersatzlos überflüssig.
Plausibilitätsprüfungen macht man dann im Formularereignis "Vor Aktualisierung"
und kann nur dann mit Cancel = True das Speichern unvollständiger Datensätze zuverlässig verhindern.
Man hat nach dem Speichern auch automatisch sofort wieder einen leeren Datensatz.
Speichern und Löschen eines Datensatzes sind dann jeweils Einzeiler.
Zum Editieren braucht es keinen Code.
Hallo,
Zitatstelle fest, woran der Insert scheitert und behebe den Fehler, damit du die Kontrolle über den Ablauf behältst.
damit meinte ich, dass du den Code (notfalls im Unterbrechungsmodus) testen solltest um festzustellen wo der Fehler herkommt.
Das macht nämlich nur in Verbindung mit den Daten Sinn.
Und was das betrifft:
ZitatUnd wie sieht es mit der Fehlerbehandlung in der Prozedur aus?!
Das war ein Wink mit dem Zaunpfahl, soll also heißen: füge in jede Prozedur eine Fehlerbehandlung ein.
Vielen Dank für euren Feedback,
ich werde es ausprobieren, falls ich immer noch das Problem nicht löse, werde mich dann noch mal melden.
Vielen Dank
Beck
Hallo,
leider bist Du mit keinem Wort auf meine Hinweise in Antwort #5 eingegangen.
Auch in diesem Thema denke ich, dass Du Sachen programmierst, die Access serienmäßig einfacher und besser kann.
Hallo Klaus,
Doch deine Hinweise sind für mich sehr wichtig, ich probiere grade alles im gebundenen Formular zu machen. Mir fehlt einfach die Erfahrung solche Probleme sofort zu lösen.
Trotzdem Vielen Dank für deinen Feedback
Beck