Ch ng Sáu - Dùng d ki nươ
Trong ch ng 5 ta h c qua các đi m căn b n v vi c dùng variables. Vì công vi c chính c a m tươ
ch ng trình là x lý data ch a trong variables, cho nên n u VB6 cho ta càng nhi u ph ng ti n đươ ế ươ
làm vi c v i variables thì càng ti n l i. Trong ch ng n y ta s h c: ươ
Boolean variable, t i sao nó h u d ng
Variant variable, cách làm vi c v i nó.
Cách bi n đ i (convert) t lo i data type n y qua lo i data khác ế
Arrays c a variables và Arrays c a controls
Cách t o m t data type theo ý mình
Boolean Variables
Boolean là lo i data ch có th l y m t trong hai values: True hay False. Khi h c v Statement
IF...THEN trong ch ng 4, ta đã nói s qua v Boolean data type. Cái ph n gi a hai ch IF vàươ ơ
THEN đ c g i là ượ Logical Expression và k t qu c a m t Logical Expression là m t Booleanế
value. N u đi u ki n đu c th a mãn thì value là True, n u không thì là False.ế ế
B n h i n u m t variable ch có th có hai values, t i sao ta không th dùng Integer và gi i h n ế
cách dùng trong vòng hai values 1 và 0 thôi, c n gì ph i đ t ra Boolean data type. Làm nh v y cũng ư
đ c, nh ng cái khác bi t chính là khi ta operate trên 2 variables ta ph i bi t rõ r ng ượ ư ế đ làm vi c
v i Integer ta dùng +, -, *, \ trong khi v i Boolean ta dùng OR, AND, NOT, XOR. Th xem thí d
d i đây:ướ
' Use Integer with values 1 or 0
Dim IAnumber As Integer
Dim IBnumber As Integer
Dim IAge As Integer
Dim sPersonalWorth As Single
If (IAge >= 18) Then
IAnumber = 1
Else
IAnumber = 0
End If
If (sPersonalWorth > 1000000) Then
IBnumber = 1
Else
IBnumber = 0
End If
If (IAnumber = 1) And (IBnumber = 1) Then
StandForTheElection
End If
'==================================
' Use Boolean
Dim bAdult As Boolean
Dim bRich As Boolean
1
Dim IAge As Integer
Dim sPersonalWorth As Single
bAdult = (IAge >= 18)
bRich = (sPersonalWorth > 1000000)
If bAdult And bRich Then
StandForTheElection
End If
Trong thí d trên, ta l p trình đ n u m t ng i th a mãn hai đi u ki n: v a tr ng thành (18 tu i ế ườ ưở
tr lên) , v a giàu có (có trên 1 tri u b c) thì có th ra ng c
N u ta dùng Integer, th nh t ch ng trình đ c khó hi u, th hai cái Logical Expression c a IFế ươ
statement v n phài làm vi c v i operator AND.
Trong khi đó n u dùng Boolean thì ch ng trình có v t nhiên và d đ c nh ti ng Anh thôngế ươ ư ế
th ng. ườ
Variant Variables
Variant variable có th ch a Text String, Number, Date, th m chí c m t Array (m t lo t nhi u
variables cùng data type). Nhìn thoáng qua nó r t ti n d ng, nh ng khi m t Variant variable đ c ư ượ
dùng nhi u ch , trong nhi u tình hu ng khác nhau, b n ph i th n tr ng. Lý do là vì variant variable
có th ch a nh ng lo i data types khác nhau, nên khi b n operate hai variable có data type khác
nhau, Visual Basic 6 c g ng bi n đ i m t trong hai variable thành data type c a variable kia đ làm ế
vi c, k t qu là th nh tho ng b n s b k t. ế
Các tay Software Engineers thu n túy r t ghét l p trình v i data không đu c Declare rõ ràng. H
không mu n b h vì vô tình. Thà r ng đ Language Compiler b t g p tr c nh ng tr ng h p b n ướ ườ
vô tình operate trên hai variables có data type khác nhau. Có khi ta b c mình vì Compiler khó tánh,
nh ng s tránh b nh ng surprise (ng c nhiên) t n kém sau n y. Các ngôn ng l p trình g t gao yư
đu c g i là strongly typed languages, ch ng h n nh Pascal, C++, Java .v.v.. Sau n y n u ta ư ế
dùng .NET thì các ngôn ng C#, VB.NET (VB7) đ u là strongly typed. Trong VB7, Microsoft cho
l u đài bi t tích Variant variables c a VB6.ư
Công vi c Declare m t Variant variable cũng gi ng nh Declare m t data type khác. Ch có đi u ta ư
có th bi t data type th t s đang đ c ch a bên trong m t Varaint variable b ng cách dùng ế ượ
Function VarType nh d i đây:ư ướ
Private Sub cmdShowDataTypes_Click()
Dim sMess As String
Dim vVariant As Variant
vVariant = "Nguoi Tinh khong chan dung" ' Assign a String to vVariant
sMess = VarType(vVariant) & vbCrLf ' use vbCrLF to display the next string on a new
line
vVariant = 25 ' Assign an Integer to vVariant
sMess = sMess & VarType(vVariant) & vbCrLf
vVariant = True ' Assign an Boolean value to vVariant
sMess = sMess & VarType(vVariant) & vbCrLf
' Assign an Date to vVariant
vVariant = #1/1/2001# ' enclose a Date string with #, instead of " as for normal Text
String
sMess = sMess & VarType(vVariant)
MsgBox sMess
2
End Sub
Khi ta click button ShowDataTypes ch ng trình s display giá tr c a các Data Types trong m iươ
tr ng h p:ườ
Sau đây là b ng li t kê nh ng VarTypes thông d ng:
Giá tr VarTypeChú thích
0-vbEmpty Không có gì trong variant
1-vbNull Không có valid (h p l ) data trong variant
2-vbInteger Variant ch a Integer
4-vbSingle Variant ch a Single
7-vbDate Variant ch a Date/Time
8-vbString Variant ch a String
9-vbObject Variant ch a m t Object
11-vbBoolean Variant ch a Boolean
Ð làm vi c v i đ lo i VarTypes b n có th dùng Select Case nh sau: ư
Private Sub Process_Click()
Select Case VarType(vVariant)
Case vbString
' ...
Case vbBoolean
' ...
Case vbInteger
' ...
Case vbDate
3
' ...
End Select
End Sub
Constants (H ng s )
Variables r t ti n d ng đ chúng ta dùng ch a các data có th bi n đ i value trong su t quá trình ế
x lý c a ch ng trình. Nh ng đôi khi chúng ta mu n có m t lo i variable mà value không bao gi ươ ư
thay đ i, VB6 cho ta Constant đ dùng vào vi c n y. Thí d nh thay gì dùng tr c ti p môt con s ư ế
hay m t Text String nhi u ch trong ch ng trình, ta đ t tên Constant và cho nó m t value t i ươ
m t ch nh t đ nh. Thí d ta vi t ch ng trình cho 5 chi c xe ch y đua. Ð kh i hành các chi c xe ế ươ ế ế
ta dùng m t FOR...LOOP đ n gi n nh : ơ ư
For ICar = 1 To 5
Call StartCar (ICar)
Next
T ng t nh v y nhi u n i khác trong ch ng trình, m i l n nói đ n con s các xe ta dùng sươ ư ơ ươ ế
5. N u sau n y mu n thay đ i con s các xe thành ra 10, ta ph i tìm và thay đ i t t c các con s 5ế
n y thành ra 10. N u không th n tr ng ta có th thay đ i m t con s 5 dùng cho chuy n gì khác, ế
ch không ph i cho con s các xe, thành ra 10 - nh v y ta vô tình t o ra m t bug. Ð tránh v n đ ư
n y ta có th dùng Constant nh sau: ư
Const NUMBER_OF_CARS = 10
For ICar = 1 To NUMBER_OF_CARS
Call StartCar (ICar)
Next
Sau n y mu n thay đ i con s các xe, ta ch c n edit value c a Constant. Trong kh p ch ng trình, ươ
ni nào nh c đ n con s các xe ta dùng ch NUMBER_OF_CARS, v a d hi u, v a tránh l m l n. ế
Bi n đ i (convert) t lo i data type n y qua lo i data khác ế
Nhi u lúc ta c n ph i convert data type c a m t variable t lo i n y qua lo i khác, VB6 cho ta m t
s các Functions d i đây. Xin l u r ng khi call các Functions n y, n u b n đ a m t data value b t ướ ư ế ư
h p l thì có th b error.
Conversion Function Chú thích
CBool () Ð i parameter ra True hay False. N u Integer value khác 0 thì đ c ế ượ
đ i thành True
CByte () Ð i parameter ra m t con s t 0 đ n 255 n u có th đ c, n u ế ế ượ ế
không đ c thì là 0.ượ
CDate () Ð i parameter ra Date
CDbl () Ð i parameter ra Double precision floating point number
CInt () Ð i parameter ra Integer
4
CSng () Ð i parameter ra Single precision floating point number
CStr () Ð i parameter ra String
Ngoài các Function nói trên b n cũng có th dùng Function Val đ convert m t String ra Number.
L u ý là khi Function Val process m t String n u nó g p m t character nào không ph i là digit hayư ế
decimal point thì nó không process ti p n a. Do đó n u Input String là "$25.50" thì Val returns conế ế
s 0 vì $ không ph i là m t digit. N u Input String là "62.4B" thì Val returns 62.4. ế
CDbl là Function dùng đ convert m t String ra s an toàn nh t. Input String có th ch a các d u ,
. (thí d : 1,234,567.89) tùy theo n i b n trên th gi i (thí d nh Âu Châu hay M ). CSng cũng ơ ế ư
làm vi c gi ng nh CDbl nh ng n u con s l n h n 1 tri u nó có th b bug. ư ư ế ơ
Cái bug b c mình nh t c a CSng là n u Input String không có gì c (t c là InputString="") thì ế
Function CSng cho b n Type Mismatch Error. Do đó đ kh c ph c cái khuy t đi m n y b n có th ế
vi t cho mình m t Function t m đ t tên là CSingle đ dùng th cho CSng nh sau:ế ế ư
Function CSingle(strNumber) As Single
If Trim(strNumber) = "" Then
CSingle = 0#
Else
CSingle = CSng(strNumber)
End If
End Function
Arrays
Khi b n có nhi u variables t ng t nhau, thí d nh đi m thi c a 10 h c sinh, n u ph i đ t tên ươ ư ế
khác nhau cho t ng variable (thí d : HoaMark, TaiMark, SonMark, TamMark, NgaMark, HuongMark
.v.v..) thì th t là c c nh c và b t ti n. B n có th dùng Array đ có m t tên chung cho c nhóm,
r i nói đ n đi m c a t ng ng i m t b ng cách dùng m t con s g i là ế ườ ArrayIndex. B n s
Declare nh sau:ư
Dim myStudentMarks(10) as Integer
K đó b n nói đ n đi m c a m i h c sinh b ng cách vi t ế ế ế myStudentMarks(i), mà i là ArrayIndex.
Gi d ta mu n tính t ng s đi m:
Sub CmdCalculateTotal_Click()
Dim myStudentMarks(10) As Integer ' Declare array, assuming students' marks are
Integers
Dim TotalMark As Integer ' Use this variable to accumulate the marks
Dim i As Integer ' Use i as ArrayIndex
myStudentMarks(1) = 6 ' First student's mark
myStudentMarks(2) = 7 ' Second student's mark
myStudentMarks(3) = 5
myStudentMarks(4) = 9
myStudentMarks(5) = 6
myStudentMarks(6) = 8
myStudentMarks(7) = 9
myStudentMarks(8) = 10
5