Tải bản đầy đủ (.pdf) (5 trang)

Giáo trình hướng dẫn phân tích những kỹ năng để xử lý lỗi bằng lệnh On error resume next p1 potx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (573.55 KB, 5 trang )

Giáo trình Microsoft Access 2000 Copyright
®
Nguyễn Sơn Hải
Trang 154

? a / b

Sẽ nhận được thông báo lỗi:

Vì b = 0.
5.2 Bẫy lỗi
Mục 5.1 đã trình bày những kỹ năng để xử lý lỗi khi đang soạn thảo chương
trình. Các thao tác đó chỉ được thực hiện trong lúc đang xây dựng phần mềm (VBA
IDE), do người lập trình xử lý. Khi phần mềm đã được đóng gói để chuyển đến
người dùng nếu gặp lỗi, nó sẽ hiển thị một hộp tthoại thông báo lỗi (Error Dialog)
cho biết lý do vắn tắt về lỗi. Sau khi bạn nhấn OK, chương trình sẽ ngừng hoạt
động, bị thoát.
Để xử lý lỗi trong tình huống này, có 2 phương pháp bẫy lỗi mà chúng tôi đưa ra
dưới đây để tham khảo; hy vọng bạn sẽ chọn lựa được tình huống phù hợp để sủ
dụng một trong các phương pháp này đảm bảo chương trình viết ra chạy được đúng
theo mục đích.
Sử dụng lệnh On Error Resume Next
Khi đó
từ chỗ đó trở đi, nếu chương trình gặp lỗi, nó sẽ bỏ qua (ignore) hoàn
toàn. Điểm này tiện ở chỗ giúp chương trình EXE của ta tránh gặp lỗi thoát khỏi
đột ngột như phân tích ở trên. Nhưng nó cũng bất lợi là khi khách hàng cho hay họ
gặp những trường hợp lạ, không giải thích được (vì lỗi đã bị bỏ qua mà không ai để
ý), thì ta cũng bí luôn, có thể không biết bắt đầu từ đ
âu để gỡ lỗi. Do đó, trong lúc
gỡ lỗi ta không nên dùng nó, nhưng trước khi giao cho khách hàng bạn nên cân
nhắc kỹ có nên sử dụng trong các đoạn mã lệnh hay không.


Ví dụ sử dụng On Error Resume Next để bỏ qua lỗi:

Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e

V
i
e
w
e
r
w
w
w
.
d
o
c
u
-

t
r
a
c
k
.
c
o
m
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e

V
i
e
w
e
r
w
w

w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
Giáo trình hướng dẫn phân tích những kỹ năng để xử lý
lỗi bằng lệnh On error resume next
Giáo trình Microsoft Access 2000 Copyright
®
Nguyễn Sơn Hải
Trang 155
Function A_chia_B(a, b As Double) As Double
On Error Resume Next

A_chia_B = Null

A_chia_B = a / b

End Function


Trong chương trình con trên, nếu b = 0, lệnh A_chia_B = a / b sẽ gặp phải lỗi.
Do có lời khai báo On Error Resume Next nên lệnh lỗi này được bỏ qua (không
thực hiện). Tức là giá trị hàm là Null.
Sử dụng câu lệnh On Error Goto <nhãn>
Khi một thủ tục được đặt câu lệnh này, nếu gặp phải một lỗi nào đó, VBA sẽ
chuyển thẳng việc thực hiện đến <nhãn> đã chỉ định. Thông thường các lệnh ti
ếp
theo của <nhãn> là xử lý các tính huống lỗi.
Sau đây là ví dụ sử dụng phưưong pháp On Error Goto <nhãn> để bẫy lỗi:

Function A_chia_B(a, b As Double) As Double
On Error GoTo Loi

A_chia_B = a / b
Msgbox “ Ok! “

Loi:

If Err.Number = 11 Then
MsgBox "Lỗi chia cho 0 !"
End If

End Function

Trong chương trình con trên, trong trường hợp b = 0 câu lệnh A_chia_B = a / b
sẽ gây ra lỗi. Theo như khai báo On Error Goto Loi ban đầu, VBA sẽ bỏ qua tất cả
các lệnh sau lệnh lỗi và chuyển thẳng tới các lệnh sau nhãn Loi: Ở đây là lệnh kiểm
tra lỗi. Nếu Mã lỗi = 11 Æ kết luận ngay một thông báo lỗi tiếng Việt. Lỗi chia cho
0 !

Phương pháp này cũng được dùng phổ biến cả trong quá trình xây dựng để
phát
hiện lỗi, cũng như trong phần mềm đã đóng gói gửi đến khách hàng. Mỗi khi gặp
lỗi sẽ được thông báo nguyên nhân gây ra lỗi bằng tiếng Việt (chẳng hạn) mà vẫn
không ảnh hưởng đến hoạt động khác của phần mềm.
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e

V
i
e
w
e
r
w
w
w
.
d
o

c
u
-
t
r
a
c
k
.
c
o
m
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e

V
i
e
w
e

r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
.
Giáo trình Microsoft Access 2000 Copyright
®
Nguyễn Sơn Hải
Trang 156
Trong phương pháp này, người lập trình nên khai thác tối đa đối tượng Err - đối
tượng mang những thông tin về lỗi đang xảy ra, cụ thể:
Hành động Kết quả
Err.Description Mô tả tên lỗi
Err.Number Đưa ra mã lỗi
Err.Number Xoá bỏ các giá trị của đối tượng Err


6. Một số ví dụ
Phần này trình bày một số ví dụ sử dụng Form, một số đối tượng điều khiển
(Control), các khai báo, các cấu trúc lệnh và những kỹ thuật liên quan để giải quyết
một số bài toán thực tế đơn giản.
Bài toán 1: Nhập vào một số nguyên và kiểm tra số đó là chẵn hay số lẻ?
Thiết kế form như sau:

Thiết lập thuộc tính cho các đối tượng như sau:
Form
Caption:
Kiểm tra số chẵn - lẻ
Default view:
Single Form
Scroll bar:
Neither
Record selector:
No
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e


V
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
Click to buy NOW!
P
D
F
-

X
C
h
a
n
g
e

V
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c

o
m
.
Giáo trình Microsoft Access 2000 Copyright
®
Nguyễn Sơn Hải
Trang 157
Navigation Buttons:
No
Diving line:
No
Ô nhập số cần kiểm tra
Name:
Text0
Nút Kiểm tra chẵn lẻ
Name:
cmdChanLe
Caption:
Kiểm tra chẵn lẻ
Nút Đóng
Name:
cmdClose
Caption:
Đóng
Và mã lệnh cho form như sau:
'
'Lệnh cho nút Kiểm tra chẵn lẻ
'
Private Sub cmdChanLe_Click()
If Text0 Mod 2 = 0 Then

MsgBox Text0 + " Là số chẵn !"
Else
MsgBox Text0 + " Là số lẻ !"
End If
End Sub

'
'Lệnh cho nút Đóng
'
Private Sub cmdClose_Click()
DoCmd.Close
End Sub


Bài toán 2: Nhập vào 2 số nguyên và tính USC và BCS của 2 số đó
Thiết kế form như sau:
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e

V

i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
Click to buy NOW!
P
D
F
-
X
C

h
a
n
g
e

V
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m

.
Giáo trình Microsoft Access 2000 Copyright
®
Nguyễn Sơn Hải
Trang 158

Thiết lập thuộc tính cho các đối tượng như sau:
Form
Caption:
Tìm USC và BSC
Default view:
Single Form
Scroll bar:
Neither
Record selector:
No
Navigation Buttons:
No
Diving line:
No
Ô nhập số cần kiểm tra
Ô Thuộc tính Name
A: txtA
B: txtB
USC: txtUSC
BSC: txtBSC

Nút Tính toán
Name:
cmdTinhToan

Caption:
Tính toán
Nút Đóng
Name:
cmdClose
Caption:
Đóng
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e

V
i
e
w
e
r
w
w
w
.

d
o
c
u
-
t
r
a
c
k
.
c
o
m
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e

V
i
e

w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
.

×