24/05/2018, 21:43

Công cụ hợp lệ hoá dữ liệu trong Visual Basic

Hợp lệ hoá dữ liệu là làm cho dữ liệu nhập vào đảm bảo tính hợp lệ. Sự kiện LostFocus xảy ra mỗi khi một điều kiểm mất tiêu điểm. Ta có thể viết mã lệnh trong sự kiện này để kiểm soát xem dữ liệu khi dời khỏi điều kiểm đã hợp lệ chưa. ...

Hợp lệ hoá dữ liệu là làm cho dữ liệu nhập vào đảm bảo tính hợp lệ.

Sự kiện LostFocus xảy ra mỗi khi một điều kiểm mất tiêu điểm. Ta có thể viết mã lệnh trong sự kiện này để kiểm soát xem dữ liệu khi dời khỏi điều kiểm đã hợp lệ chưa. Nếu như dữ liệu chưa hợp lệ ta có thể yêu cấu người nhập dữ liệu phải nhập lại. Như vậy ta phải dời tiêu điểm về điều kiểm. Khi đó ta sẽ sử dụng phương thức SetFocus để đặt lại tiêu điểm cho điều kiểm.

Khung của thủ tục LostFocus như sau:

Private Sub ControlName_ LostFocus()

‘ Mã Code

End Sub

Ví dụ:

Private Sub TxtTen_ LostFocus()

If len(TxtTen.Text)=0 then

Msgbox “Tên không được rỗng !”

TxtTen.SetFocus

End If

End Sub

Sự kiện Validate xảy ra trước khi người dùng có thể dịch chuyển tiêu điểm ra xa điều kiểm đó. Do đó ta có thể đặt mã lệnh để kiểm soát tính hợp lệ của dữ liệu trong sự kiện Validate nhằm ngăn cản người dùng dịch chuyển tiêu điểm cho đến khi các tiêu chuẩn về hình dạng dữ liệu được thoả mãn.

Khung của thủ tục Validate như sau:

Private Sub ControlName_ Validate(Cancel As Boolean)

‘ Mã Code

End Sub

Nếu bạn xác lập Cancel là True thì người dùng sẽ không có khả năng dời khỏi điều kiểm này cho đến khi người đó nhận được đữ liệu đúng

VD:

Private Sub TxtTen_ Validate(Cancel As Boolean)

If len(TxtTen.Text)=0 then

Msgbox “Tên không được rỗng !”

Cancel=True

End If

End Sub

Trên thực tế VB cung cấp cho bạn một dòng lệnh để bảo vệ VB còn tạo ra biến cố Validate cho điều khiển dữ liệu mỗi khi bản ghi hiện hành sắp được thay đổi Ví dụ bằng phương pháp Move First hoặc trứơc khi xử lý phương pháp Update, Delete hoặc Close. Cú pháp cho thủ tục biến cố này như sau:

Sub DataControlName_ Validate([Index As Integer,] Action As Integer, Save_ As Integer)

End Sub

Chú y: Bạn không nên đặt phương pháp bất kỳ trong biến cố Validate làm thay đổi bản ghi hiện hành. Kết quả sẽ là sự chuyển đổi biến cố vô tận. Các phương pháp truy cập dữ liệu bạn có thể đặt vào biến cố này chỉ gồm UpdateRecord, UpdateControls, bởi vì chúng đều không sinh ra biến cố Validate. Điều này cung cấp cho bạn phương pháp cập nhật cở dữ liệu hoặc các điều khiển gắn kết trong thủ tục biến cố đó

Trong đó tham số tuỳ chon Index được dùng nếu điều khiển dữ liệu là phần của mảng điều khiển một mảng điều khiển. Tham số Action được gởi bởi VB cho thủ tục biến cố và báo nguyên nhân thực sự để biến cố Validate được tạo ra. Dưới đây là danh sách các hằng kí hiệu được xây dựng trong VB khả dĩ cho sự kiện Validate

Constant Value Description
vbDataActionCancel 0 Cancel the operation when the Sub exits
vbDataActionMoveFirst 1 MoveFirst method
vbDataActionMovePrevious 2 MovePrevious method
vbDataActionMoveNext 3 MoveNext method
vbDataActionMoveLast 4 MoveLast method
vbDataActionAddNew 5 AddNew method
vbDataActionUpdate 6 Update operation (not UpdateRecord)
vbDataActionDelete 7 Delete method
vbDataActionFind 8 Find method
vbDataActionBookmark 9 The Bookmark property has been set
vbDataActionClose 10 The Close method
vbDataActionUnload 11 The form is being unloaded

Nếu bạn thay đổi tham số Action thành vbDataActionCancel thì VB sẽ xoá thao tác này trước khi rời khỏi thủ tục Sub. Ngoài ra nếu bạn thay đổi tham số Action sang một trong các giá trị khác, VB sẽ thực thi thao tác đó thay vì thao tác ban đầu khi thủ tục trải qua. Ví dụ, nếu thủ tục biến cố Validate đã được xảy ra do phương pháp MoveFirst và trong tiến trình của thủ tục bạn có dòng

Action=vbDataActionMoveLast

Thì VB sẽ dịch chuyển bản ghi hiện hành đến cuối bảng đó. Bạn chỉo có thể dùng khả năng này nếu các hành động đó là tương thích. VD: bạn không thể thay đổi tham số hành động MoveFirst sang tham số vbDataActionUnload mà không có lỗi.

Tham số Save nhận hai giá trị True, False. Nếu thông tin bất kỳ trong các điều khiển gắn kết data-aware đã được thay đổi, tham số này là True. Điều đó cho bạn một phương pháp phân tích thông tin có trong điêug khiển gắn kết trước khi cập nhật cơ sở dữ liệu. Để xác định các điều khiển data-aware nào đã được thay đổi, bạn dùng tính chất DataChanged của điều khiển đó. Tính chất này là True nếu nội dung của điều khiển đã được thay đổi và là False nếu không được thay đổi.

- Các sự kiện trên xảy ra trên các điều kiểm theo bảng sau:

Sự kiện Xảy ra khi
KeyPress Người sử dụng nhấn và thả một phím trên bàn phím trong khi một đối tượng đang trong tầm ngắm
KeyDown Người sử dụng nhấn một phím trên bàn phím trong khi một đối tượng đang trong tầm ngắm
KeyUp Người sử dụng thả một phím trên bàn phím trong khi một đối tượng đang trong tầm ngắm

Cú pháp của các biến cố này như sau:

Private Sub ControlName_ KeyPress(KeyAscii As Integer)

End Sub

Private Sub ControlName_ KeyDown(KeyCode As Integer, Shift As Integer)

End Sub

Private Sub ControlName_ KeyUp(KeyCode As Integer, Shift As Integer)

End Sub

Trong đó tham số KeýyAscii và KeyCode là mã ASCII của kýy tự vừa được nhấn. Tham số Shift có thể nhận các giá trị sau

Constant Value Description
vbShiftMask 1 SHIFT key bit mask.
VbCtrlMask 2 CTRL key bit mask.
VbAltMask 4 ALT key bit mask.

Như vậy ta có thể đặt mã lệnh trong các sự kiện này để kiểm soát xem các phím được nhấn xem có hợp lệ hay không và có thể huỷ bỏ những ky tự nhận được bằng cách gán KeyCode=0

Ví dụ:

Private Sub TxtSo_KeyPress(KeyAscii As Integer)

Static dautru As Boolean

Static daucham As Boolean

Select Case KeyAscii

Case vbKeyBack, vbKeyLeft, vbKeyRight, Asc("0") To Asc("9")

Case Asc("-")

If (txtso.SelStart <> 0) Or dautru = True Then

KeyAscii = 0

Else

dautru = True

End If

Case Asc(".")

If daucham = True Then

KeyAscii = 0

Else

daucham = True

End If

Case Else

KeyAscii = 0

End Select

End Sub

- Các sự kiện trên xảy ra trên các điều kiểm theo bảng sau:

Sự kiện Xảy ra khi
MouseDown Người sử dụng nhấn một nút chuột bất kỳ trong khi con trỏ chuột đang nằm trên một đối tượng.
MouseUp Người sử dụng thả một nút chuột bất kỳ trong khi con trỏ chuột đang nằm trên một đối tượng.

Cú pháp của các biến cố này như sau:

Private Sub ControlName_ MouseUp(Button As Integer, Shift As Integer, X As_ Single, Y As Single)

End Sub

Private Sub ControlName_ MouseDown(Button As Integer, Shift As Integer, X As_ Single, Y As Single)

End Sub

Constant (Button) Value Description
vbLeftButton 1 Left button is pressed
vbRightButton 2 Right button is pressed
vbMiddleButton 4 Middle button is pressed
Constant (Shift) Value Description
vbShiftMask 1 SHIFT key is pressed.
vbCtrlMask 2 CTRL key is pressed.
vbAltMask 4 ALT key is pressed.

Ta có thể đặt mã lệnh để kiểm soát tính hợp lệ của dữ liệu trong hai sự kiện nhằm ngăn cản sự chấp nhận dữ liệu cho đến khi các tiêu chuẩn về hình dạng dữ liệu được thoả mãn.

Ví dụ:

Private Sub Cmdnhap_MouseDown(Button As Integer, Shift As Integer, X As Single,_ Y As Single)

If Len(txtten) = 0 Then

MsgBox "Nhap ho ten!"

txtten.SetFocus

End If

End Sub

0