Bẫy lỗi quá trình bẫy lỗi và phòng ngừa năm 2024
Có cách nào khai báo 1 function error, lúc này tại các event cần thiết chỉ cần call function error đó lên để dùng không cần phải viết từng dòng ở từng event. Bài viết: 2,371 Chủ đề: 85 Tham Gia: 30-10 -14 Điểm danh tiếng: 121 Số lần cảm ơn 696 2940 cảm ơn trong 1570 bài Tiền Access: 63,358.28Ac$ 04-05-18, 01:36 PM (Được chỉnh sửa: 04-05-18, 01:47 PM bởi tranthanhan1962.) Đây là cú pháp xử lý lỗi bất kỳ trong code và có thể được đặt trong bất kỳ sub hoặc function nào. Cú pháp đầy đủ: Mã:
Trường hợp ngắn gọn: Mã:
Có nghĩa là tham số Bị_lỗi cho phép mã chương trình khi chạy đếu đâu bị bất kỳ lỗi gì nó chũng đều phát hiện và bị dừng xử lý đế mã lệnh kế tiếp và truyền thẳng đến Bị_lỗi: để thực hiện các lệnh của Bị_lỗi: . Thực ra người ta xử dụng bẩy lỗi bất kỳ này trong trường hợp dự phòng khi phòng hờ có lỗi xảy ra mà code thủ chưa biết hoặc không biết lỗi gì (phòng ngừa hoặc dốt Mã:
Nhưng lúc này sẽ xảy ra trường hợp lỗi. 1/Nếu A chứa text sẽ bị lỗi 2/Nếu B=0 sẽ bị lỗi 3/Xảy ra trường hợp nào đó bị lỗi mà mình chưa nghĩ ra. Nếu bạn xác định tất cả các trường hợp lỗi bạn có thể dùng if hoặc Select Case để xử lý. Nhưng ở đây nếu xảy ra một trường hợp lỗi nào khác thì sao? Suy nghĩ cho bằng được tất cả các trường hợp rồi viết tiếp Mã:
Vì vậy! Đây là một bẩy lỗi bất kỳ. Và tất nhiên khi bạn muốn đưa nó vào bất kỳ event, sub, function nào thì bạn cứ đưa vào. Mẫu của Microsoft đầy đủ thì có vẻ dài dòng nhưng khi sử dụng thực tế thì cực kỳ đơn giản On Error GoTo Bị_lỗi ...... Bị_lỗi: ...... Chữ ký của tranthanhan1962Kết quả cuối cùng của một đời người, không phải bạn có được bao nhiêu tiền bạc, tài sản. Mà bạn còn bao nhiêu người bạn Bài viết: 271 Chủ đề: 44 Tham Gia: 05-12 -14 Điểm danh tiếng: 0 Số lần cảm ơn 94 55 cảm ơn trong 45 bài Tiền Access: 6,636.87Ac$ Nếu mà có function thì code nhìn đẹp hơn, chứ 1 form mà cứ chèn on error các thứ nhìn nó rối bù. Bài viết: 2,371 Chủ đề: 85 Tham Gia: 30-10 -14 Điểm danh tiếng: 121 Số lần cảm ơn 696 2940 cảm ơn trong 1570 bài Tiền Access: 63,358.28Ac$ Chỉ cần 2 dòng code là xử lý xong. Quan trong là chạy tốt cứ khi viết code xong có ai nhìn Chữ ký của tranthanhan1962Kết quả cuối cùng của một đời người, không phải bạn có được bao nhiêu tiền bạc, tài sản. Mà bạn còn bao nhiêu người bạn Bài viết: 3,533 Chủ đề: 59 Tham Gia: 10-04 -15 Điểm danh tiếng: 163 Số lần cảm ơn 573 3993 cảm ơn trong 2374 bài Tiền Access: 91,160.96Ac$ 05-05-18, 01:09 AM (Được chỉnh sửa: 05-05-18, 01:11 AM bởi ongke0711.) (04-05-18, 05:42 PM)mrsiro Đã viết: Nếu mà có function thì code nhìn đẹp hơn, chứ 1 form mà cứ chèn on error các thứ nhìn nó rối bù. Cú pháp bẫy lỗi chi tiết của VBA Access chỉ có 1 format là: (bỏ qua các bẫy lỗi "On Error Resume Next", "On Error Goto 0", "On Error Goto 1") On Error Goto [label] -> [Label]: có thể là "ErrHandler", "BayLoi", "EH" hay gì đó... tùy bạn đặt tên. Bạn không thể đưa Function vô vị trí [Label] để cho gọn đc vì sai cú pháp. Nếu muốn thiết kế function thì chỉ có thiết kế cho phần [Label] này thôi và nó cũng không đẹp hơn bao nhiêu, có thể gọn hơn chút nhưng đổi lại sẽ mất đi sự bẫy lỗi đặc thù cho từng event. Giống như code demo của anh tranthanhan1962, dùng Select Case để bẫy từng trường hợp mà nhưng case này khác nhau tùy theo từng nút lệnh, từng event. Ví dụ: Select Case Err.Number Case 3021 —> Không có record. Dùng khi di chuyển record. Case 3022 —> Trùng mã PK. Dùng khi thêm mới record. Case 3044 —> Sai đường dẫn. Dùng chi chọn file. End Select Ứng với mỗi Case sẽ có code xử lý khác nhau tùy theo cái form, cái event đang chạy. Nếu chỉ thuần túy dùng Function chung chung để báo lỗi thì chẳng giúp ích người sử dụng là mấy khi gặp nhưng lỗi này. |