Ch ng Năm - Các lo i d ki nươ
Công vi c chính c a t t c các ch ng trình VB6 chúng ta vi t là ch bi n các d ki n đ trình ươ ế ế ế
bày. Thí d m t th y giáo dùng m t ch ng trình đ tính đi m trung bình c a h c sinh trong m t ươ
môn thi. Th y tu n t cho đi m c a t ng h c sinh vào và sau cùng b m m t nút b o chu ng trình ơ
tính đi m trung bình cho c l p. Ch ng trình s display đi m thi c a t ng h c sinh bên c nh tên ươ
c a h c sinh y, t ng s h c sinh, t ng s đi m, đi m th p nh t, đi m cao nh t và đi m trung
bình:
Tên hÐi m
Lê Quang Vinh 15.50
Tr n văn Thành16.00
Nguy n Th H ng ươ 17.50
Võ T C ng ườ 14.00
Ph m Văn Khá18.00
Cao Xuân Tiên 13.00
T ng s h c sinh: 6
T ng s đi m: 94.00
Ði m th p nh t: 13.00
Ði m cao nh t: 18.00
Ði m trung bình:15.66
Ta có th t m chia quá trình x lý c a m t ch ng trình ra làm ba giai đo n: ươ
1. Ti p nh n d ki n:ế Ðây là giai đo n ta cho d ki n vào ch ng trình ( ươ Input data) ho c
b ng cách đi n vào m t form, ho c đ c d ki n t m t c s d ki n ( ơ Database) ho c nh n
d ki n qua đ ng dây vi n thông, .v.v.. ườ
2. Ch bi n d ki n:ế ế M t khi đã có d ki n đ y đ r i ta s s p x p, c ng, tr , nhân, chia ế
theo cách đã đ nh tr c đ đi đ n k t qu . ướ ế ế
3. Trình bày, báo cáo: K t qu c n ph i đ c display trên màn nh cách g n gh , th t hayế ượ
đ c in ra, ta còn g i là ượ Report.
Nh v y trong m i giai đo n c a ch ng trình ta đ u làm vi c v i d ki n. Trong thí d nói trên taư ươ
làm vi c v i hai lo i d ki n: "dòng ch " (text string) cho tên h c sinh và "s " (number) cho các
đi m. S ta ph i phân bi t các data types vì m i lo i data có nh ng ch c năng riêng c a nó. Thí
d ta không th c ng hai text string l i v i nhau nh hai con s , nh ng ta có th ghép hai text string ư ư
l i v i nhau, thí d nh ghép ch ư house v i ch wife thành ra ch housewife. Ch c n a ta s bàn
thêm v data types, nh ng bây gi ta th tìm hi u data đ c ch a trong computer nh th nào. ư ượ ư ế
1
D ki n đ c ch a theo quy c ượ ướ
R t cu c l i, t t c data đ u đ c ch a d i d ng các con s . M i con s đ i di n cho m t th ượ ướ
đó, tùy theo quy c c a ng i dùng. Chúng ta bi t b trí nh (ướ ườ ế memory) c a computer ch a nh ng
byte data, thí d nh computer c a b n có 32MB, t c là kho ng h n 32 tri u bytes. Th t ra m t ư ơ
byte g m có 8 bits, m i bit đ i di n m t trong hai tr s : 1 và 0, hay Yes và No , dòng đi n ch y
qua đ c hay không đ cượ ượ .v.v.. Bit là đ n v trí nh nh nh t c a memory.ơ
M t byte có th ch a m t con s t 0 đ n 255, t c là 2^8 -1 (2 lũy th a 8 b t 1) . Khi dùng bits ta ế
đ m các s trong h th ng nh phân. N u b n ch a bi t nhi u thì hãy đ c bài ế ế ư ế H th ng s nh
phân.
Thí d , khi b n n nút A trên keyboard, keyboard s g i v computer con s 65 (01000001 trong
nh phân) . N u b n đang dùng m t Notepad ch ng h n, b n s th y ch ế A hi n ra. B n h i t i
sao letter A đ c bi u di n b ng s 65? Xin tr l i r ng đó là quy c qu c t . Quy c đu c ápượ ướ ế ướ
d ng cho t t c các keys c a bàn phím đu c g i là ASCII. Theo quy c n y digit "1" đ c bi uướ ượ
di n b ng con s 48 (00110001) và nút Enter b ng s 13 (00010011).
Ch c có l b n đã đoán ra r ng theo quy c ASCII, m i pattern (d ng) c a 8 bits (1 byte) s bi u ướ
di n m t text character. Bây gi ta th tính xem các m u t alphabet và digits s chi m bao nhiêu ế
patterns trong s 256 patterns ta có th bi u di n b ng 1 byte. T A đ n Z có 26 characters. Nhân ế
đôi đ tính cho lowercase (ch th ng) và uppercase (ch hoa) thành ra 52. C ng v i 10 digits t 0 ườ
đ n 9 thành ra 62. C ng thêm ch ng ba m i ngoài các symbols ta dùng ch đ n ch ng 100 patternsế ươ ế
mà thôi. T c là nói m t cách khác n u s patterns ta dùng d i 128 thì ch c n 7 bits (ch không ế ướ
đ n 8 bits) cũng đ r i.ế
Th t ra t nãy gi ta ch nói đ n các characters có th display hay in ra đu c ( ế printable characters).
Các con s ASCII t 1 đ n 31 không in ra đu c nh ng đu c dùng m t cách đ c bi t, thí d nh 7 là ế ư ư
BELL (ti ng bíp), 12 là qua trang m i, 10 là xu ng hàng, 13 là Enter/CarriageReturn, .v.v.. Chúngế
đu c g i là các Control Characters.
Khi xem qua các Font ch trong Windows, b n s th y cho cùng m t con s 65, không ph i Font
nào cũng display ch A. Thí d nh Font Symbol nó display đ th d u hi u. Ði m n y nh c ư
chúng ta l i r ng m i liên h gi a m t con s bên trong (internal number) và m t d u hi u đ c ượ
display ch ng qua là m t quy c mà thôi. ướ
Gi s chúng ta dùng nh ng con s ASCII còn tr ng đ bi u di n các ch Vi t Nam có d u và ch u
khó ng i v thêm các Vietnamese characters c n thi t trong Font thì ta có th display ch Vi t ế
đu c. Ðúng v y, đó là cách các khoa h c gia Vi t Nam đã dùng đ display ti ng Vi t trong ế
MSWindows, đi n hình là VPS, VISCII.
Không ph i memory c a computer ch ch a data th ng mà thôi. Nó còn ch a chính ch ng trình, ườ ươ
g iexecutable code trong machine language (ngôn ng c a máy). Ngày x a, khi memory c a ư
computer còn ít, ng i ta có th cho vào t ng byte c a code m t ch ng trình. H l p trình b ngườ ươ
Assembly language. M i hàng code trong Assembly language có th đu c d ch th ng ra code trong
machine language. CPU c a m i manufacturer có m t assembly language khác nhau. Các công ty
Computer n i ti ng ngày x a là IBM, Digital, CDC. Ð n th i bu i Microcomputer ta có Motorola, ế ư ế
Intel, nh ng t u trung, n u không bi t tr c code c a machine language nào, ta không th nh n raư ế ế ướ
gì c khi nhìn vào memory dump (in ra snapshot c a memory) c a m t computer.
Text String
N u ta ghép nhi u characters l i v i nhau ta có m t Text String. Trong VB6, Text String đ c vi tế ượ ế
thành m t dãy ch v i d u ngo c kép hai đ u, thí d : "Hello, world"
T ng t ng ta ghép ba m u t alphabet đ u tiên l i v i nhau: ưở ượ ABC, trong memory Text String n y
2
đ c bi u di n b ng con s 010000010100001001000011 (trong binary) hay 414243 (trong Hex,ượ
m i nhóm 4 bits t ng đu ng v i m t Hex digit). ươ ơ
VB6 cho ta nh ng Function r t ti n l i đ làm vi c v i Text String. Ð ghép hai Text String l i v i
nhau ta dùng operator &. Thí d :
FirstWord = "Hello"
SecondWord = "World"
Greeting = FirstWord & SecondWord ' Greeting bây gi "HelloWorld"
n u mu n có m t blank space gi a hai ch trên ta vi t nh sau:ế ế ư
Greeting = FirstWord & " " & SecondWord
Mu n bi t m t Text String đang ch a bao nhiêu characters ta dùng ế Function Len. Thí d :
Greeting = "Hi John!"
iLen = Len(Greeting) ' iLen bây gi b ng 8
Ð trích ra m t ph n c a Text String (t c là trích ra m t SubString) ta dùng các Functions Left,
Right và Mid.
Today = "24/05/2001"
' L y ra 2 characters t bên trái c a String Today
StrDay = Left(Today,2) ' StrDay bây gi b ng "24"
' L y ra 4 characters t bên ph i c a String Today
StrYear = Right(Today,4) ' StrYear bây gi b ng "2001"
' L y ra 2 characters b t đ u t character th t c a String Today, character đ u tiên t bên trái là ư
th nh t
StrMonth = Mid(Today,4,2) ' StrMonth bây gi b ng "05"
' L y ra ph n còn l i b t đ u t character th t c a String Today ư
StrMonthYear = Mid(Today,4) ' StrMonthYear bây gi b ng 05/2001"
Trong t t c các tr ng h p trên Text String Today không h b thay đ i, ta ch trích ra m t ườ
SubString c a nó mà thôi.
N u ta mu n thay đ i chính Text String Today ta có th assign value m i cho nó hay dùng Functionế
Mid bên trái d u Assign (=), thí d :
Today = "24/05/2001"
' Thay th character th 3 c a Today b ng "-"ế
Mid(Today,3,1) = "-"
' Thay th 2 characters b t đ u t character th 4 c a Today b ng "10"ế
Mid(Today,4,2) = "10"
' Thay th character th 6 c a Today b ng "-"ế
Mid(Today,6,1) = "-" ' Today bây gi b ng "24-10-2001"
Ta cũng có th đ t đ c k t qu nh trên b ng cách l p trình nh sau: ượ ế ư ư
Today = "24/05/2001"
Today = Left(Today,2) & "-10-" & Right(Today,4)
Ngoài ra có hai Function r t thông d ng cho Text String là InstrReplace. Instr cho ta v trí
(position) c a m t pattern trong m t Text String. Thí d ta mu n bi t có d u ế * trong m t Text
String hay không:
3
myString = "The *rain in Spain mainly..."
Position = Instr(myString,"*") ' Position s là 5
N u trong myString không có d u "*" thì Position s b ng 0ế
Bây gi ta th tách ra Key và Value trong thí d sau:
KeyValuePair = "BeatlesSong=Yesterday"
Pos = Instr(KeyValuePair, "=")
Key = Left(KeyValuePair, Pos-1)
Value = Mid(KeyValuePair, Pos+1)
Mu n thay đ i t t c d u "/" thành d u "-" trong m t Text String ta có th dùng Function Replace
nh sau:ư
Today = "24/05/2001"
Today = Replace (Today, "/", "-")
Mu n bi t tr s ASCII c a m t character ta dùng ế Function Asc và ng c l i đ m t Textượ
Character v i m t tr s ASCII nào đó ta dùng Function Chr.
ASCIINumberA = Asc("A") ' ASCIINumberA bây gi b ng 65
LineFeedChar = Chr(10)
StrFive = Chr(Asc("0") + 5) ' ta có digit "5"
Text String trong VB6 dùng m t byte cho m i ASCII character. Sau n y khi ta l p trình trong VB7,
m t character có th là Unicode character, trong tr ng h p đó nó đ c bi u di n b ng 2 bytes. ườ ượ
VB6 không support Unicode nên không ph i là môi tr ng thích h p đ l p trình cho Unicode ti ng ườ ế
Vi t. Trong VB7 m i lo i Text String có Encoding method riêng c a nó đ y m tr Unicode n u ế
c n.
Các lo i s
T nãy gi ta ch bàn v Text String và cách ch a c a nó trong memory. Nên nh r ng "123"
m t Text String và nó đ c bi u di n trong memory b ng con s 001100010011001000110011 ượ
trong Binary hay 313233 trong Hex. Nh v y có cách nào bi u di n con s 123 mà không dùng Textư
String không? Dĩ nhiên là đ c. Con s ượ 123 là 7B trong Hex hay 01111011 trong Binary, và ta có
th ch a con s n y v a ti n l i đ làm toán, v a ít t n memory h n là ch a Text String "123". ơ
Nh là ta c n Text String đ display hay in ra, còn khi làm toán c ng, tr , nhân, chia ta l i c n cái
d ng raw number hay internal number c a nó.
Ð convert m t Text String ra Internal number ta có th dùng các Functions Val, CInt(ra Integer)
hay CSng(ra Single). Ng c l i, đ convert t internal number ra Text String ta có th dùngượ
Function CStr.
Dollars = "500"
ExchangeRatePerDollar = "7000"
tempValue= Val(Dollars) * Val(ExchangeRatePerDollar)
VNDong = CStr(tempValue)
MsgBox "Amount in VN Dong is " & VNDong
Th t ra VB6 support nhi u lo i data đ dùng ch a nh ng con s . Tr c h t ta có s nguyên ướ ế
(IntegerLong). Cùng là s nguyên nh ng Integer dùng 2 bytes trong memory đ ch a m t con ư
s nguyên t -32768 đ n 32767. Ð ý là 32768 = 2^15 (2 lũy th a 15) , t c là trong memory các con ế
s t 32768 đ n 65535 đ c dùng đ bi u di n các s âm. M t l n n a, nh r ng m t con s ế ượ
trong memory đ bi u di n m t th gì ch ng qua ch là theo quy c mà thôi. ướ
4
Còn Long dùng 4 byte đ đ ch a m t con s nguyên t -2147483648 đ n 2147483647. N u b n ế ế
dùng Integer mà b Oveflow error khi làm toán nhân thì assign các con s vào m t Long variable (s
c t nghĩa variable sau n y) TR C KHIƯỚ làm toán nhân ch đ ng đ k t qu m t bài toán nhân ế
quá l n tr c khi Assign nó vào m t Long variable. Thí d : ướ
' Thay gì vi tế
Dim Result as Long
Result = 30345 * 100 ' s b overflow error
' Hãy vi t nh sau:ế ư
Dim Result as Long
Result = 30345
Result = Result * 100 ' không b overflow error
Ð tính toán cho chính xác ta c n m t lo i data có th ch a s sau decimal point. VB6 cho ta Single
Double. Single dùng 4 bytes, Double dùng 8 bytes. Thông th ng, b n s hi m khi c n nh c đ nườ ế ế
Double.
Khi display m t s Single hay Double b n c n dùng Function Format đ convert t Single ra Text
String m t cách uy n chuy n. Thí d
Dollars = "500.0"
ExchangeRatePerDollar = "7000.0"
'Dùng Function CSng đ convert String ra Single
tempValue= CSng(Dollars) * CSng(ExchangeRatePerDollar)
'Dùng Function Format đ có các d u ph y ngàn và tri u và ph i có 2 digits sau decimal point.
VNDong = Format (tempValue, "#,###,###.00")
MsgBox "Amount in VN Dong is " & VNDong
VB6 cho ta hai cách chia, đó là / dùng cho Single/Double và \ dùng cho Integer.
5 / 3 cho ta 1.6666666
5 \ 3 cho ta 1
Function Round đu c dùng đ b b t các con s n m phía sau decimal point. Thí d :
Round ( 12.3456789, 4 )
ch gi l i 4 con s sau decimal point và cho ta 12.3457
Numeric data type Currency ch ch a nh t đ nh 4 s sau decimal point. Nó không có ích l i đ c bi t
gì.
Variable
Variable là nh ng ch ch a data t m th i trong memory đ ta dùng trong quá trình bi n ch data ế ế
c a ch ng trình. Khi ta ươ Declare (khai báo) m t variable lo i data gì là ta dành ra m t ch trong
memory đ ch a m t mi ng data lo i y. Nh là tùy theo lo i data ta s c n nhi u hay ít memory, ế
m t Interger ch c n 2 bytes, còn m t Single c n đ n 4 bytes, trong khi m t String thì c n nhi u ế
memory h n n a. Thí d nh :ơ ư
5