Currentdb.Execute z dbFailonError nie zgłasza błędu
W programie Access 2003-2016 używam CurrentDb.Execute z dbFailonError do uruchomienia instrukcji INSERT. Instrukcja INSERT powinna zakończyć się niepowodzeniem (i tak się dzieje), ponieważ jedno pole ma niepoprawną wartość opartą na powiązanej tabeli z wymuszoną integralnością referencyjną. Jednak nie zgłasza błędu. Próbowałem odtworzyć ten problem w nowej bazie danych i błąd działa poprawnie. Coś jest nie tak w ustawieniach mojej aktualnej bazy danych i nie chcę tworzyć jej od nowa. Usunąłem wszystko z mojej bazy danych z wyjątkiem problematycznego fragmentu, a moja minimalna powtarzalna przykładowa baza danych znajduje się pod tym linkiem .
Oto mój kod, ale problem polega na tym, że ten kod działa dobrze i generuje błędy, gdy tworzę nową bazę danych od podstaw. Po prostu nie działa w mojej obecnej bazie danych.
Private Sub Command34_Click()
Dim testsql As String
testsql = "INSERT INTO tblObservations (Site,TotalDepth) VALUES ('SUD-096',5)"
With CurrentDb
On Error GoTo Err_Execute
.Execute testsql, dbFailOnError
On Error GoTo 0
MsgBox ("Upload completed. " & .RecordsAffected & " records added.")
End With
Exit Sub
Finish:
Exit Sub
Err_Execute:
If DBEngine.Errors.Count > 0 Then
For Each errLoop In DBEngine.Errors
MsgBox ("Error number: " & errLoop.Number & vbCr & errLoop.Description)
Next errLoop
End If
Resume Finish
End Sub
Odpowiedzi
Użyj Option Explicit, jak powiedział Hans. Zawsze używaj Option Explicit!
Brakuje odniesienia do obiektu Microsoft Office ##. # Access Database Engine. To jest, gdzie dbFailOnErrorjest zdefiniowane. Ponieważ nie masz tego odniesienia, dbFailOnErrornie jest zdefiniowane. To odwołanie jest domyślnie dodawane do wszystkich baz danych programu Access i zdecydowanie zalecam dodanie go.
A ponieważ nie używasz Option Explicit, VBA nie ma nic przeciwko temu, że jest niezdefiniowana i po prostu rzutuje tę niezdefiniowaną zmienną na zero.
Jeśli z jakiegoś powodu nie chcesz dodawać odwołania, użyj odpowiedniej wartości dla dbFailOnError:
.Execute testsql, 128