Currentdb. DbFailonError hata vermiyor.

Oct 06 2020

Access 2003-2016'da, bir INSERT deyimi çalıştırmak için CurrentDb.Execute ile dbFailonError kullanıyorum. INSERT ifadesi başarısız olmalıdır (ve başarısız olur) çünkü bir alan "Zorunlu Bilgi Bütünlüğü" ile ilişkili bir tabloya göre yanlış bir değere sahiptir. Ancak hata vermez. Bu sorunu yeni bir veritabanında yeniden oluşturmayı denedim ve hata düzgün çalışıyor. Mevcut veritabanımdaki ayarlarda bir sorun var ve onu sıfırdan yeniden oluşturmak istemiyorum. Problemli parça haricindeki her şeyi veritabanımdan çıkardım ve minimum tekrarlanabilir örnek veritabanım bu bağlantıda .

İşte benim kodum, ancak sorun şu ki bu kod iyi çalışıyor ve sıfırdan yeni bir veritabanı oluşturduğumda hata veriyor. Şu anki veritabanımda çalışmıyor.

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

Yanıtlar

1 ErikA Oct 06 2020 at 16:31

Option ExplicitHans'ın dediği gibi kullanın . Daima kullanın Option Explicit!

Microsoft Office ##. # Access Veritabanı Altyapısı nesnesine bir başvuru eksik. Burası dbFailOnErrortanımlandığı yerdir . Çünkü o referansa sahip dbFailOnErrordeğilsin, tanımlı değil. Bu başvuru varsayılan olarak tüm Access veritabanlarına eklenir ve eklemenizi şiddetle tavsiye ederim.

Ve kullanmadığınız için Option Explicit, VBA bunun tanımsız olmasına aldırmaz ve bu tanımsız değişkeni sıfıra çevirir.

Bazı nedenlerden dolayı, başvuru eklemek istemiyorsanız, kullanmak karşılık gelen değeri için dbFailOnError:

.Execute testsql, 128