Currentdb.Execute con dbFailonError che non genera un errore
In Access 2003-2016, sto usando CurrentDb.Execute con dbFailonError per eseguire un'istruzione INSERT. L'istruzione INSERT dovrebbe fallire (e lo fa) perché un campo ha un valore errato basato su una tabella correlata con "Integrità referenziale applicata". Tuttavia, non genera un errore. Ho provato a ricreare questo problema in un nuovo database e l'errore funziona correttamente. C'è qualcosa di sbagliato nelle impostazioni con il mio database corrente e non voglio ricrearlo da zero. Ho tolto tutto dal mio database tranne il pezzo problematico, e il mio database di esempio riproducibile minimo si trova a questo collegamento .
Ecco il mio codice, ma il problema è che questo codice funziona bene e genera errori quando creo un nuovo database da zero. Semplicemente non funziona nel mio database attuale.
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
Risposte
Usa Option Explicit, come ha detto Hans. Usa sempre Option Explicit!
Manca un riferimento all'oggetto Motore di database di Microsoft Office ##. # Access. Questo è dove dbFailOnErrorè definito. Perché non hai quel riferimento, dbFailOnErrornon è definito. Questo riferimento viene aggiunto a tutti i database di Access per impostazione predefinita e consiglio vivamente di aggiungerlo.
E poiché non stai utilizzando Option Explicit, VBA non si preoccupa che sia indefinito e lancia quella variabile indefinita a zero.
Se, per qualche motivo, non desideri aggiungere il riferimento, utilizza il valore corrispondente per dbFailOnError:
.Execute testsql, 128