
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ànhầ16.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 dĩ 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 gìố ộ ạ ấ ả ề ượ ứ ướ ạ ố ỗ ố ạ ệ ộ ứ
đó, 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 i là ọexecutable 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 làờ "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à ấ ụ Instr và Replace. 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 đ có 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" là
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ậ ề ạ ể ứ ữ ố ướ ế ố
(Integer và Long). 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
và 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

