Ch

ng Năm - Các lo i d ki n

ươ

ạ ữ ệ

t c các ch ệ ữ ệ ế ế ế ể ươ ể ụ ộ ầ t là ch bi n các d ki n đ trình ủ ọ ộ ả ọ ơ ể ả ớ ạ ọ ng trình VB6 chúng ta vi ộ ng trình đ tính đi m trung bình c a h c sinh trong m 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 ấ ng trình s display đi m thi c a t ng h c sinh bên c nh tên ủ ừ ể ể ố ể ố ọ ể ể ấ ấ ấ ấ Công vi c chính c a t ươ ủ ấ ả bày. Thí d m t th y giáo dùng m t ch ộ ầ môn thi. Th y tu n t ủ ừ ầ ự tính đi m trung bình cho c l p. Ch ươ ẽ ể 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

6 T ng s h c sinh: ố ọ ổ

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: ể ạ ử ủ ộ ươ ạ

Ti p nh n d ki n: ng trình ( ế ươ ạ

1.

ữ ệ m t c s d ki n ( Input data) ho cặ ậ ặ ọ ữ ệ ừ ộ ơ ỡ ữ ệ Database) ho c nh n ặ ộ ng dây vi n thông, .v.v.. ậ ữ ệ Ðây là giai đo n ta cho d ki n vào ch b ng cách đi n vào m t form, ho c đ c d ki n t ề ằ d ki n qua đ ườ ữ ệ

ế ế ữ ệ M t khi đã có d ki n đ y đ r i ta s s p x p, c ng, tr , nhân, chia ầ ủ ồ ẽ ắ ừ ế ộ ể ộ

2.

theo cách đã đ nh tr Ch bi n d ki n: ị ướ ể

c display trên màn nh cách g n gh , th t hay ữ ệ c đ đi đ n k t qu . ả ế ế ả ượ ả ầ ế ứ ự ẽ ả ọ

3.

Trình bày, báo cáo: K t qu c n ph i đ c in ra, ta còn g i là Report. đ ọ ượ

ư ậ ạ ủ ệ ớ ữ ệ ụ ề "s " (number) ươ ạ ữ ệ "dòng ch " (text string) ng trình ta đ u làm vi c v i d ki n. Trong thí d nói trên ta cho các ữ ố ệ ớ ở ứ ủ ệ ạ ỗ t các data types vì m i lo i data có nh ng ch c năng riêng c a nó. Thí ố ạ ớ ư ể cho tên h c sinh và ọ ữ i v i nhau nh hai con s , nh ng ta có th ghép hai text string ư ố ữ ớ ẽ c ch a trong computer nh th nào. ta th tìm hi u data đ Nh v y trong m i giai đo n c a ch ọ làm vi c v i hai lo i d ki n: đi m. S dĩ ta ph i phân bi ả ể d ta không th c ng hai text string l ể ộ ụ ữ house v i ch i v i nhau, thí d nh ghép ch l ữ wife thành ra ch ữ housewife. Ch c n a ta s bàn ạ ớ thêm v data types, nh ng bây gi ể ử ờ ụ ư ư ư ế ượ ứ ề

1

D ki n đ c ch a theo quy c ữ ệ ượ ứ ướ

c ch a d ố i, t ộ ạ ấ ả ệ ỗ ứ ướ ạ i dùng. Chúng ta bi t c data đ u đ ề ượ c c a ng ườ ướ ủ ộ ứ ậ ơ ệ ạ ộ ỗ c hay không đ c i d ng các con s . M i con s đ i di n cho m t th gì ứ R t cu c l ố ạ ố ữ ớ memory) c a computer ch a nh ng t b trí nh ( đó, tùy theo quy ủ ế ộ 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 ộ ệ ả ứ ị ố 1 và 0, hay Yes và No , dòng đi n ch y byte g m có 8 ạ ồ qua đ ớ ượ ủ ạ ụ ư bits, m i bit đ i di n m t trong hai tr s : ệ ỏ ượ .v.v.. Bit là đ n v trí nh nh nh t c a memory. ấ ủ ơ ị

ố ừ ừ ớ 0 đ n 255, t c là 2^8 -1 (2 lũy th a 8 b t 1) . Khi dùng bits ta t nhi u thì hãy đ c bài H th ng s nh ộ ệ ố ế ế ứ ư ạ ố ị ệ ố ế ề ọ ố ị M t byte có th ch a m t con s t ể ứ ộ đ m các s trong h th ng nh phân. N u b n ch a bi ế phân.

. N u b n đang dùng m t Notepad ch ng h n, b n s th y ch ị ạ ẽ ấ ạ ẽ ở ề ạ ả ờ ằ ộ ố ệ . Quy ố ế ễ ể ằ ạ ướ c n y digit "1" đ A trên keyboard, keyboard s g i v computer con s ạ ấ ế ẳ c bi u di n b ng s 65? Xin tr l ượ t c các keys c a bàn phím đu c g i là ấ ả c qu c t ướ ầ ố 65 (01000001 trong ỏ ạ i ữ A hi n ra. B n h i t c đu c áp ợ ể c bi u ượ ủ Thí d , khi b n n nút ụ nh phân) i r ng đó là quy sao letter A đ ướ ASCII. Theo quy d ng cho t ụ di n b ng con s 48 (00110001) và nút Enter b ng s 13 (00010011). ố ễ ợ ọ ằ ằ ố

b n đã đoán ra r ng theo quy ằ ướ ẽ ạ ủ ạ ờ ắ ễ ỗ ta th tính xem các m u t ẫ ự ế ễ ế ằ ử ể ể ừ ng) và uppercase (ch hoa) thành ra 52. C ng v i 10 digits t ữ ể ộ ỉ ế ớ ừ ươ i 128 thì ch c n 7 bits (ch không ế ố ỉ ầ ướ ớ c ASCII, m i pattern (d ng) c a 8 bits (1 byte) s bi u ẽ ể Ch c có l alphabet và digits s chi m bao nhiêu di n m t text character. Bây gi ẽ ộ 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 ố ừ 0 đôi đ tính cho lowercase (ch th ữ ườ đ 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 ộ ứ đ n 8 bits) cũng đ r i. ủ ồ ế

ỉ ể ế ế 1 đ n 31 không in ra đu c nh ng đu c dùng m t cách đ c bi ư ta ch nói đ n các characters có th display hay in ra đu c ( ặ ừ ệ ợ ợ ộ

ợ ọ ớ Control Characters. ữ ả ộ ủ ứ ấ ụ ư ố ệ ầ ể ộ ấ ữ ố ố ộ c mà thôi. ợ printable characters). nãy gi Th t ra t ờ ừ ậ Các con s ASCII t 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 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 ệ ượ c 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 đ chúng ta l ạ ằ display ch ng qua là m t quy ẳ ệ ữ ướ ộ

ả ử ể ể ễ ố ố ồ ẽ ế ị t Nam có d u và ch u ấ t trong Font thì ta có th display ch Vi ữ ệ t t trong 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 đã dùng đ display ti ng Vi ể ệ ệ ọ ợ Gi ữ khó ng i v thêm các Vietnamese characters c n thi ầ đu c. Ðúng v y, đó là cách các khoa h c gia Vi ậ MSWindows, đi n hình là VPS, VISCII. ể

ng mà thôi. Nó còn ch a chính ch ả ủ ỉ ứ ươ ứ ữ ủ ư ườ ừ ể ộ i ta có th cho vào t ng byte c a code m t ch ươ ể ỗ ủ ỗ ộ ư ế ờ ổ ổ ế ự ủ ư ế ể ậ ng trình, Không ph i memory c a computer ch ch a data th ườ executable code trong machine language (ngôn ng c a máy). Ngày x a, khi memory c a ủ g i là ọ ằ ng trình. H l p trình b ng computer còn ít, 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, t tr c code c a machine language nào, ta không th nh n ra Intel, nh ng t u trung, n u không bi ế ướ gì c khi nhìn vào memory dump (in ra snapshot c a memory) c a m t computer. ủ ủ ả ộ

Text String

c vi ề ế ộ ượ ế t ầ ở N u ta ghép nhi u characters l thành m t dãy ch v i d u ngo c kép T ữ ớ ấ ng ta ghép ba m u t ụ "Hello, world" i v i nhau: i v i nhau ta có m t Text String. Trong VB6, Text String đ ạ ớ ặ alphabet đ u tiên l ẫ ự hai đ u, thí d : ạ ớ ộ ng t ượ ưở ầ ABC, trong memory Text String n yầ

2

c bi u di n b ng con s 010000010100001001000011 (trong binary) hay 414243 (trong Hex, ễ ố ơ ớ i đ làm vi c v i Text String. Ð ghép hai Text String l ng đu ng v i m t Hex digit). ấ ệ ợ ể ữ ệ ớ ể ạ ớ i v i đ ằ ượ ể m i nhóm 4 bits t ộ ươ ỗ VB6 cho ta nh ng Function r t ti n l nhau ta dùng operator &. Thí d :ụ

FirstWord = "Hello" SecondWord = "World" Greeting = FirstWord & SecondWord ' Greeting bây gi làờ "HelloWorld"

gi a hai ch trên ta vi ố ở ữ ữ ế t nh sau: ư n u mu n có m t blank space ộ ế Greeting = FirstWord & " " & SecondWord

t m t Text String đang ch a bao nhiêu characters ta dùng Mu n bi ố ế ứ ộ Function Len. Thí d : ụ

Greeting = "Hi John!"

iLen = Len(Greeting) ' iLen bây gi b ng 8 ờ ằ

ể ầ ủ ứ ộ SubString) ta dùng các Functions Left, Ð trích ra m t ph n c a Text String (t c là trích ra m t ộ Right và Mid.

bên trái c a String Today ấ ủ ờ ằ b ng "24" bên ph i c a String Today ấ ừ ả ủ ờ ằ character th t c a String Today, character đ u tiên t bên trái là ắ ầ ừ b ng "2001" ứ ư ủ ầ ừ

b ng "05" character th t c a String Today ấ ầ Today = "24/05/2001" ' L y ra 2 characters t ừ StrDay = Left(Today,2) ' StrDay bây gi ' L y ra 4 characters t StrYear = Right(Today,4) ' StrYear bây gi ' L y ra 2 characters b t đ u t ấ th nh t ứ ấ StrMonth = Mid(Today,4,2) ' StrMonth bây gi ờ ằ ' L y ra ph n còn l i b t đ u t ứ ư ủ ạ ắ ầ ừ StrMonthYear = Mid(Today,4) ' StrMonthYear bây gi b ng 05/2001" ờ ằ

ườ ộ ng h p trên Text String Today không h b thay đ i, ta ch trích ra m t ề ị ợ ổ ỉ

ể ổ ớ Trong t t c các tr ấ ả 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 : ụ ở

ế ủ ằ

ắ ầ ừ ế character th 4 c a Today b ng "10" ủ ứ ằ

ủ ế 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 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)

ụ ấ ị t có d u ủ ụ ộ Instr và Replace. Instr cho ta v trí ấ * trong m t Text ế ố ộ Ngoài ra có hai Function r t thông d ng cho Text String là (position) c a m t pattern trong m t Text String. Thí d ta mu n bi ộ 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 ẽ ằ ế ấ

ta th tách ra Key và Value trong thí d sau: ụ ờ ử

Bây gi KeyValuePair = "BeatlesSong=Yesterday" Pos = Instr(KeyValuePair, "=") Key = Left(KeyValuePair, Pos-1) Value = Mid(KeyValuePair, Pos+1)

t c d u "/" thành d u "-" trong m t Text String ta có th dùng Function Replace ổ ấ ả ấ ể ấ ộ Mu n thay đ i t ố nh sau: ư

Today = "24/05/2001" Today = Replace (Today, "/", "-")

Function Asc và ng i đ có m t Text c l ủ ượ ạ ể ộ Mu n bi ố Character v i m t tr s ASCII nào đó ta dùng Function Chr. t tr s ASCII c a m t character ta dùng ộ ế ị ố ớ ộ ị ố

b ng 65 ờ ằ

ASCIINumberA = Asc("A") ' ASCIINumberA bây gi LineFeedChar = Chr(10) StrFive = Chr(Asc("0") + 5) ' ta có digit "5"

ộ ỗ ộ ầ ượ ậ ễ ể ằ ợ ế ng thích h p đ l p trình cho Unicode ti ng c bi u di n b ng 2 bytes. ể ể ậ ả ế t. Trong VB7 m i lo i Text String có Encoding method riêng c a nó đ y m tr Unicode n u ng h p đó nó đ ợ ườ ủ ể ể ạ ỗ ợ 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 ườ VB6 không support Unicode nên không ph i là môi tr Vi ệ c n. ầ

Các lo i s ạ ố

ỉ ờ ta ch bàn v Text String và cách ch a c a nó trong memory. Nên nh r ng ứ ủ ớ ằ "123" là ể ừ ộ ễ ằ c bi u di n trong memory b ng con s 001100010011001000110011 ể ố ễ ố c. Con s ố ầ ừ ệ ợ ể ừ ứ ố ư ậ ố 123 là 7B trong Hex hay 01111011 trong Binary, và ta có ơ i c n cái i đ làm toán, v a ít t n memory h n là ch a Text String "123". ộ ể ứ ớ ạ ầ ừ ể ầ T nãy gi ề m t Text String và nó đ ượ 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à đ ượ th ch a con s n y v a ti n l 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 d ng raw number hay internal number c a nó. ạ ủ

Functions Val, CInt(ra Integer) ộ ể ể i, đ convert t internal number ra Text String ta có th dùng c l ượ ạ ừ ể ể Ð convert m t Text String ra Internal number ta có th dùng các hay CSng(ra Single). Ng Function CStr.

Dollars = "500" ExchangeRatePerDollar = "7000" tempValue= Val(Dollars) * Val(ExchangeRatePerDollar) VNDong = CStr(tempValue) MsgBox "Amount in VN Dong is " & VNDong

ậ ề ướ ế ữ ể ố c h t ta có s nguyên ộ ố ể ứ ạ ố ư ứ ừ ể c dùng đ bi u di n các s âm. M t l n n a, nh r ng m t con s -32768 đ n 32767. Ð ý là 32768 = 2^15 (2 lũy th a 15) , t c là trong memory các con ế 32768 đ n 65535 đ ế ể ể ớ ằ ố ễ ố ộ Th t ra VB6 support nhi u lo i data đ dùng ch a nh ng con s . Tr ứ (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 ố s t ố ừ trong memory đ bi u di n m t th gì ch ng qua ch là theo quy c mà thôi. ừ ộ ầ ữ ướ ượ ễ ể ể ứ ẳ ộ ỉ

4

ừ ế ế ố ộ ị ộ ả ộ ố ể ế ầ TR ớ ừ ạ 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) 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 ƯỚ c khi Assign nó vào m t Long variable. Thí d : ụ ộ ướ

tế

' Thay gì vi 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 ị

ể ạ ộ Single ắ ế ng, b n s hi m khi c n nh c đ n ạ ẽ ế ườ ầ

Function Format đ convert t Single ra Text ạ ầ ộ ố ừ ể Ð 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 ể ứ ố ầ và Double. Single dùng 4 bytes, Double dùng 8 bytes. Thông th Double. Khi display m t s Single hay Double b n c n dùng String m t cách uy n chuy n. Thí d ể ụ ể ộ

ngàn và tri u và ph i có 2 digits sau decimal point. ẩ ở ệ ể ấ ả

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 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 ỉ ữ ạ ố

i đ c bi ỉ ứ ấ ị ố ợ ặ ệ t Numeric data type Currency ch ch a nh t đ nh 4 s sau decimal point. Nó không có ích l 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 Declare (khai báo) m t variable lo i data gì là ta dành ra m t ch trong ng trình. Khi ta c a ch ạ ộ ủ 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

Dim strFullName as String Dim ICount as Integer Dim sRate as Single

ạ ệ ụ ư ấ ế ộ ữ ể ị Mixed mode error. Tuy nhiên n u Text String y g m nh ng digits thì có đ ng convert Text String ra m t con s tr ồ c khi dùng nó trong m t bài toán. Ng ộ ố ướ ố ẽ ự ộ ố ộ ể ộ ể ư ộ c khi ghép Text String y vào String kia. ướ ấ ế ấ ủ ư ả ị ị ậ nh trong vi c đoán ra ý đ nh c a chúng ta trong khi coding nh ng ta ph i th n ấ ặ ữ ặ ạ ng th ề ặ ể ọ ư ọ ể ễ ườ ậ ấ ậ ọ ủ ộ ng ng ư ế ệ ng, đ d nh n di n ườ prefix nh ư str cho String, I cho ườ ườ ườ ộ Khi b n tìm cách cho hai data type khác nhau làm vi c, thí d nh làm toán chia m t Text String b i ở m t con s thì có th b ộ ượ th VB6 s t c ể i, dĩ nhiên ta không th ghép m t con s vào m t Text String, nh ng VB6 có th convert con s ra l ố ạ m t Text String of digits tr ộ M c d u VB6 r t t ệ ặ ầ tr ng trong cách dùng Data type đ tránh g p ph i nh ng b t ng . ọ ờ ả ể V n đ đ t tên cho variable r t quan tr ng. B n nên đ t tên variable và các Function, Sub nh th ấ ấ nào đ khi đ c code ta th y d hi u nh đ c m t bài lu n văn. Th ộ ễ ể i ta g n phía tr data type c a m t variable ng c tên variable các ướ ắ ườ Integer, s cho Single ..v.v.. Khi ráp nhi u ch r i thành tên m t variable, th ữ ờ ề làm cho letter đ u tiên c a m i ch thành ra Hoa (Capital), thí d nh i ta ng th ụ ư TotalSalesOfTheMonth. ủ ữ ầ ỗ

ộ ạ ặ ừ ủ ữ i c a tên variable, n u không có ỏ ể ạ ủ ể ế ố Có m t Tip nho nh là đ ng ng i đ t tên variable quá dài. Khi đánh máy n a ch ng tên c a m t ộ ừ variable b n có th đánh Ctrl-Space đ IDE đánh n t ph n còn l ầ s trùng h p v i m t tên variable/Sub/Function nào khác. ự ạ ợ ộ ớ

ố ế ư ế ể ổ ạ i. Tr ư ấ c ti n l ượ ể ệ ệ ợ ướ ủ ắ ớ ứ ể ị ả ớ ạ ể ộ ộ ộ ố ỏ ổ ư ổ ầ ổ ị ả ấ ấ ữ ấ ỏ N u công tác l p trình gi ng nh n u ăn, b n có th nghĩ đ n variable nh các cái r , thau ta c n ầ ậ có đ vi c chu n b th c ăn đ c khi b t tay vào công tác ta xin v i ch nhà cho ị ứ ẩ ộ ổ Declare variables). Ta đ m i lo i th c ăn vào m t r mình bao nhiêu cái r , thau, thún .v.v..(đó là ể ỗ ổ hay thau khác nhau, ch không đ th t chung v i rau c i (cũng nh không th c ng Text String v i ớ ớ con s ). Khi ta b thêm m t trái cà vào r cà thì s trái cà trong r tăng lên 1. M t lát sau ta l y ra ố vài trái cà đ dùng thì s trái cà trong r b gi m đi. Khi không c n dùng n a ta b hay c t m y trái cà còn l ố i r i d p cái r đi ch khác. ổ ể ạ ồ ẹ ỗ

ị ủ ườ ế ạ ộ ổ ủ ng hay thay đ i trong quá trình x lý data. Ð n m t lúc nào đó variable ử c g i là ượ ọ ấ ượ ộ ế ộ c. D i đây là listing c a m t scope. N u code n m ngoài ướ ộ ế ằ ủ ủ ể Tr giá c a m t variable th ộ không còn hi n h u. Ph m vi ho t đ ng c a m t variable đ ệ ữ ạ ph m vi c a m t variable thì không th dùng đ n variable y đ ộ ng trình VB6 ng n: ch ạ ươ ắ

Option Explicit Dim iCount As Integer Dim X As Integer Dim Y As Integer

Private Sub CmdIncreX_Click() iCount = iCount + 1 X = X + 1 If X = 80 Then X = 0 Y = Y + 1 End If

End Sub Private Sub CmdIncreY_Click()

6

Dim Y iCount = iCount + 1 Y = Y + 1 End Sub

ủ ứ ế ở ấ ộ ầ ỉ ộ ộ ứ ữ ế ẳ ng) ị global variable Y n a, t c là bên trong Sub ữ ứ variable Y n y còn che cái ầ ươ ỉ ấ ấ ộ ế ế ế ấ ạ i execute Sub CmdIncreY-Click() mà local variable Y v n còn y nguyên v i giá tr gì nó có ở ạ ẫ ớ ị c, b n nên Declare r ng nó Trong listing trên Scope c a iCount, X, Y là toàn b listing, t c là đâu cũng có th nói đ n, dùng, ể ộ th y các variables đó. Tuy nhiên trong Sub CmdIncreY-Click() có declare m t variable Y. Scope c a ủ variable n y là ch n i b , t c là bên trong Sub CmdIncreY-Click() mà thôi. Ch ng nh ng th , cái local (đ a ph CmdIncreY-Click() ta ch th y local variable Y mà không th y global variable Y. M t khi execution trong Sub CmdIncreY-Click() đã k t thúc thì local variable Y cũng bi n m t luôn. N u b n mu n ố khi tr l tr t ừ ướ Static, nh : ư ạ ằ

Static Y as Integer

i, Local variable c a Sub hay Function ch ho t đ ng và hi n h u bên trong Sub/Function. ỉ ạ ủ ệ ữ ộ ủ ạ ộ ả ụ ừ ị ộ ộ ượ ấ ườ ầ i khác th y cái gì c n th y thôi. Do ị ấ ổ ỉ ừ ộ ỡ ớ ằ ủ ạ ư ể ợ ố Nói tóm l Global variable c a m t Form hay Module thì áp d ng cho c Form/Module tr khi b che l i b i ạ ở m t local variable có cùng tên bên tron m t Sub/Function. Ngoài ra khi ta Declare m t Global ộ variable là Public thì các Form/Module khác cũng th y và dùng nó đ c luôn. Theo nguyên t c c a ắ ủ Software Engineering thì vì lý do an ninh ta ch cho phép ng ấ đó, ta không nên Declare các variable Public b a bãi, nh khi có m t variable b thay đ i value m t ộ cách bí m t mà ta không đoán đu c th ph m là ai. Nh r ng Declare Public cũng gi ng nh đ nhà ậ không đóng c a v y. ử ậ

t c m i variables dùng ể ượ ố ằ ấ ả ọ ớ ề ầ c dùng đ tuyên b r ng t ỏ ả c khi dùng nó. Th ng, tùy theo tình hu ng, VB6 có th đoán ra đ ướ ượ ố ộ c Declare. Nh là VB6 không đòi h i ta ph i Declare m t c Data ườ ầ ể ộ ủ ỏ ủ ầ ư ộ ự ộ ầ ấ ế ế ề ộ ố ự ộ ơ ệ ầ ẽ ị ộ ẩ t y ầ ộ ề ả ế ể ấ ả ọ ộ ố ợ ứ ề ả ố cách trung tín. đ u Listing đ Ngoài ra, câu Option Explicit ở ầ trong Form/Module đ u c n ph i đ ả ượ ng th variable tr ườ Type c a variable khi ta dùng nó l n đ u tiên. N u code đòi h i value c a m t variable khi nó đu c ợ ế ầ t dùng l n đ u thì VB6 t ế đ ng coi nó nh m t Empty String (String không có character nào c , vi ả ầ ệ ợ là "" ) n u nó là Text String Data type hay con s 0 n u nó là m t con s . Ði u n y r t là ti n l i. ố Tuy nhiên, n u ta s ý đánh v n l n m t variable thì VB6 t đ ng initialise nó ra Empty String hay 0. Ðây có th không ph i là đi u ta mu n. N u có dùng Option Explicit thì vi c n y s b l ế ngay vì t hãy xem vi c dùng Option Explicit nh là m t đi u răn c a Chúa, hãy vâng gi ư t c m i variable đ u ph i đu c tuyên b chính th c. Do đó, đã là VB6 programmer, b n ạ ệ ủ ữ ề ộ

Ngày và Gi ờ

, đó là Date. Ta có th bi t hi n th i là ộ ạ ể ứ ả ể ế ệ ẫ ờ ờ ấ Có m t lo i data type đu c dùng đ ch c ngày l n gi ngày nào, m y gi ờ ằ đ l y ra ngày, tháng và năm nh sau: ể ấ ợ b ng cách g i ọ Function Now. Sau đó ta dùng các Function Day, Month và Year ư

Private Sub CmdCheckDate_Click() Dim dDate As Date If IsDate(txtDate.Text) Then ' eg: txtDate = "26/12/01" dDate = CVDate(txtDate.Text) ' convert a Text String to internal Date using Function CVDate ' Day, Month and Year are automatically converted to String MsgBox "Day = " & Day(dDate) & ", Month = " & Month(dDate) & ", Year = " & Year(dDate)

7

Else MsgBox "Invalid date. Please try again." End If End Sub

không. L u ý là ể ể ư ệ ệ Trong Listing trên ta dùng Function IsDate đ ki m xem txtDate.text có h p l ợ ệ IsDate không phân bi ỹ ạ ạ dùng IsDate trong công vi c ki m soát n y không an toàn l m. ầ ể Ð display ngày gi theo đúng cách mình mu n b n có th dùng Function Format nh sau: t ngày theo M (d ng mm/dd/yy) hay theo Âu Châu (d ng dd/mm/yy), do đó ắ ể ư ể ạ ố ờ

MsgBox "NOW IS " & Format (Now, "ddd dd-mmm-yyyy hh:nn:ss")

' will display NOW IS Fri 08-Jun-2001 22:10:53

mm đ display tháng b ng m t con s . S dĩ ta dùng nn thay vì mm cho phút là vì ạ ố ở ể ằ ộ c dùng cho tháng. B n có th dùng ể mm đã đ ượ Ta có th thêm b t các đ n v c a ngày, tháng, v.v. b ng cách dùng ể ị ủ ằ ớ ơ Function DateAdd. Thí d :ụ

Private Sub CmdNextMonth_Click() txtDate.Text = Format(Now, "dd/mm/yy") ' 08/06/01 txtNextMonth.Text = DateAdd("m", 1, CVDate(txtDate.Text)) ' txtNextMonth.text will show 8/07/2001 End Sub

D i đây là cách tính ra ngày cu i c a tháng n y: ố ủ ướ ầ

Private Sub CmdLastDayOfMonth_Click() Dim dNextMonthDate, dFirstDayNextMonth dNextMonthDate = DateAdd("m", 1, Now) ' Add one month to get same day next month ' Get first day of next month dFirstDayNextMonth = 1 & "/" & Month(dNextMonthDate) & "/" & Year(dNextMonthDate) ' Subtract one day to get Last day of this month txtLastDayOfMonth.Text = DateAdd("d", -1, CVDate(dFirstDayNextMonth)) End Sub

ể ữ ằ ơ ị Function ữ ng hay 0 tùy theo ngày nào tr h n. Thí d kho ng cách gi a ể ơ ươ ụ ể ả Ta có th tính kho ng cách gi a hai ngày theo đ n v ngày, tháng v.v.. b ng cách dùng ả DateDiff. K t qu có th là âm, d ả ế hai ngày theo đ n v tháng: ơ ị

DateDiff("m", Now, CVDate(dNextMonthDate))

8

Trong ch ng t i ta s h c v Data types Boolean, Variant và Data Array. ươ ớ ẽ ọ ề

9