Ðề: Phương thức bẫy lối
Xin cho em biết cách bấy các lỗi mà mình có thể biết trước trước khi điều đó sảy ra. ví như tạo kết nối 1 - n, nhưng khi em vào bên 1 ra lệnh xóa đi --> em không muốn nhận 1 thông báo = tiếng anh mà em xin được các anh chỉ giáo cho việc bẫy lỗi đó như thế nào.
hay lỗi 3101,......
Em nhận được lời chỉ bảo của các anh!
Có nhiều cách bẫy lỗi (trapping error) trong Access VBA nói riêng và "họ VBA" nói chung. Những lỗi ở đây thường là lỗi run-time vì nếu lỗi syntax thì khi compile là nó báo lỗi rồi.
Ở Access có thể bẫy lỗi ở cấp form, cấp procedure.
Với Form thì dùng bẫy bằng sự kiện Error tương tự như behattieu.
Còn cấp procedure thì dùng các statement sau:
On Error Goto
label => khi xảy ra lỗi thì nhảy đến nhãn label để thực hiện tiếp những lệnh sau nhãn
On Error Resume Next => khi xảy ra lỗi thì cứ "vờ" đi, làm tiếp lệnh kế
On Error Goto 0 => kể từ giờ thì khi có lỗi, Access sẽ thông báo lỗi
Resume
label => Chuyển đến nhãn label để thực hiện tiếp những lệnh sau nhãn
VD: Sau đây là một thủ tục sự kiện Click của nút cmdPrint, gọi một report ra. Ở report có bẫy sự kiện NoData khi report không có record nào được in ra. Lúc đó report sẽ không xuất hiện. Khi report không xuất hiện thì lệnh gọi report trong thủ tục Click sẽ gây ra lỗi. Lỗi này không phải là lỗi dữ liệu nên chúng ta có thể bỏ qua nó.
Thủ tục sự kiện NoData của report
Private Sub Report_NoData (Cancel As Integer)
MsgBox "Khong co du lieu de in"
Cancel = True
End Sub
Thủ tục sự kiện Click của nút cmdPrint
Private Sub cmdPrint_Click ()
On Error Resume Next
DoCmd.OpenReport "reportname", acViewNormal
On Error Goto 0
End Sub