Ich bekomme Fehler beim Speichern in der Tabelle, aber der On Error wird nicht ausgelöst. Auf der Zeile db.Execute erhalte ich einen Constraint-Fehler, aber anstatt einen Fehler auszulösen, wird der Code so fortgesetzt, als wäre er erfolgreich. Wenn ich aus der Routine austrete, weiß ich, dass ein Fehler vorliegt, weil 0 zurückgegeben wird, aber ich weiß nicht, was der Fehler ist, also muss ich am Ende mit dem Debuggen reinkommen, den Code erfassen und dann direkt versuchen Zugriff. Kann ich es irgendwie schaffen, den Fehler auszulösen? Hier ist mein Code (kurz):Zugriff VBA-Fehler beim Speichern in Tabelle nicht "On Error"
Private Function storeHAP(list of arguments, ByRef db As DAO.Database) As Long
Dim sql As String
On Error GoTo foundError
sql = "INSERT INTO HAPs (list of column names...) " + _
"VALUES (list of values...)"
db.Execute (sql)
'This function will look up the record and return the primary key.
'A value of 0 indicates it wasn't stored and will force an exit in
'the main routine.
storeHAP = lookupHAP(list of arguments..., db)
Exit Function
foundError:
MsgBox "Error in storeHAP: " + CStr(Err) + ", " + Error(Err) + ". SQL: " + sql + "."
End Function 'storeHAP
Wie wissen Sie, es gibt eine Einschränkung Fehler entdeckt? Ist es kaputt, wenn Sie "db.Execute" foo "'? Unrelated, aber 1) lassen Sie die Klammern um '(sql)' fallen, und 2) Sie könnten nützlich finden, dass das globale 'Err'-Objekt' Number'- und 'Description'-Eigenschaften hat; die Verwendung von ihnen würde den "foundError" -Code viel weniger verwirrend machen, gegeben "Error" verwendet als eine Anweisung ist eine veraltete Möglichkeit, einen Fehler zu verursachen, und "Error" als Funktion (wie Sie haben) ist eine Umgehung der Abrufen der Beschreibung für 'Err.Number', was Sie ihm tatsächlich geben (' Nummer' ist die * Standard-Eigenschaft * des 'Err'-Objekts). –
Wenn ich debuggen gehe und einen print sql im unmittelbaren Fenster mache und dann sql in ein Access-Abfrage-Design kopiere, bekomme ich einen Constraint-Fehler, aber es reicht nicht aus, mich wissen zu lassen, wo. Es stellt sich heraus, dass ich, wenn ich der Antwort unten folge, tatsächlich genug Informationen in meiner MsgBox erhalte, um genau festzustellen, wo es passiert. – PKatona