You are on page 1of 171

TS.

V TRUNG HNG

LP TRNH TRC QUAN

Nng, 01-2008

LI NI U
Lch s pht trin ca Tin hc lun gn lin vi vic tm kim cc phng php lp trnh gip cho ngi s dng trin khai cc ng dng mt cch d dng, nhanh chng v hiu qu. Nh chng ta bit, mi loi my tnh (s dng loi CPU Central Processing Unit xc nh) ch c th hiu v thc hin trc tip c cc lnh cng nh chng trnh theo mt loi ngn ng dnh ring c gi l ngn ng my. Tuy nhin, nu trin khai cc ng dng trong thc t m phi vit chng trnh trc tip bng ngn ng my th s rt phc tp, i hi thi gian v cng sc rt ln, nhiu khi khng th thc hin c. V vy, ngi ta tm cch xy dng mt ngn ng lp trnh ring gn vi cc ngn ng t nhin, thun li cho vic trin khai cc ng dng. Khi thc hin cc chng trnh bng ngn ng ny phi qua mt bc dch chng trnh sang ngn ng my n c th thc hin. T trc n nay c rt nhiu ngn ng lp trnh c ra i v phc v c lc cho vic trin khai cc ng dng trn my tnh. Trong giai on u, cc ngn ng lp trnh tuy d s dng hn ngn ng my nhng rt kh vi cc lp trnh vin v cha mnh d dng trin khai cc thut ton. Chng trnh cha c tnh cu trc cht ch v mt d liu cng nh t chc chng trnh. V vy, vic trin khai cc ng dng trong thc t bng cc ngn ng lp trnh ny l rt kh khn. Giai on 2 l thi k ca cc ngn ng lp trnh c cu trc. Cc ngn ng lp trnh ny c c im l c tnh cu trc cht ch v mt d liu v t chc chng trnh. Mt lot cc ngn ng lp trnh c cu trc ra i v dc s dng rng ri nh : PASCAL, C, BASIC... Giai on 3 l thi k ca lp trnh hng i tng v phng php lp trnh c bc bin i mnh. Trong cc ngn ng lp trnh c cu trc th mt ng dng bao gm hai thnh phn ring l d liu v chng trnh. Tuy chng c quan h cht ch nhng l hai i tng ring bit. Trong phng php lp trnh hng i tng th mi mt i tng lp trnh s bao hm c d liu v phng thc hnh ng trn d liu . V vy, vic lp trnh s n gin v mang tnh k tha cao, tit kim c thi gian lp trnh. Tuy nhin, vi cc phng php lp trnh trn u i hi lp trnh vin phi nh rt nhiu cu lnh vi mi lnh c mt c php v tc dng ring, khi vit chng trnh phi t lp ni cc lnh c mt chng trnh gii quyt tng bi ton ring bit. Trong xu hng pht trin mnh m hin nay ca tin hc, s ngi s dng my tnh tng ln rt nhanh v my tnh c s dng trong hu ht cc lnh vc ca i sng nn i hi cc ngn ng lp trnh cng phi n gin, d s dng v mang tnh i chng cao. Chnh v vy phng php lp trnh trc quan ra i. c im ca cc ngn ng lp trnh trc quan l d s dng, trin khai cc ng dng mt cch nhanh chng. c im ni bt ca phng php lp trnh trc quan l : Cho php xy dng chng trnh theo hng s kin (Event-Driven Programming, ngha l mt chng trnh ng dng c vit theo kiu ny p ng da theo tnh hung xy ra lc thc hin chng trnh. Tnh hung ny bao gm ngi s dng n mt phm tng ng, chn la mt nt lnh hoc gi mt lnh t mt ng dng khc chy song song cng lc. Ngi lp trnh trc tip to ra cc khung giao din (interface), ng dng thng qua cc thao tc trn mn hnh da vo cc i tng (ojbect) nh hp hi thoi hoc nt iu 3

khin (control button), nhng i tng ny mang cc thuc tnh (properties) ring bit nh : mu sc, Font ch.. m ta ch cn chn la trn mt danh sch cho sn. Khi dng cc ngn ng lp trnh trc quan ta rt t khi phi t vit cc lnh, t chc chng trnh... mt cch rc ri m ch cn khai bo vic g cn lm khi mt tnh hung xut hin. My tnh s da vo phn thit k v khai bo ca lp trnh vin t ng to lp chng trnh.

Nh vy vi k thut lp trnh trc quan, lp trnh vin ging nh mt nh thit k, t chc to ra cc biu mu, ngh cc cng vic cn thc hin v my tnh s da vo xy dng chng trnh. Hin nay cc ngn ng lp trnh, h qun tr c s d liu theo hng trc quan thng dng nh : Visual Basic, Visual Foxpro, Visual C, Delphi... Cun sch ny c vit da trn c s ca gio trnh Lp tnh trc quan c ging dy ti Khoa Cng ngh Thng tin, Trng i hc Bch Khoa Nng t nm 1994 n nay. Ni dung ca cun sch gm ba phn chnh: Phn th nht (tng ng vi chng 1) gii thiu tng quan v ngn ng lp trnh trc quan; Phn th hai (tng ng vi chng 2) gii thiu v lp trnh trc quan vi MS Access, y l cng c mnh qun tr cc c s d liu v pht trin cc phn mm qun l; Phn th ba (t cc chng 3 n 10) tp trung gii thiu cch thc lp trnh vi ngn ng Visual Basic, y l ngn ng lp trnh trc quan hin i v cung cp cho ngi s dng nhng cng c mnh thit k giao din, kt ni n c s d liu, xy dng cc hiu ng ho... Chng ti hy vng l cun sch ny s gip ch nhiu cho cc sinh vin ti cc trng i hc, cao ng; cc hc vin ti cc c s o to lp trnh vin; cc lp trnh vin... trong vic tm hiu, khm ph cc ngn ng lp trnh trc quan. c bit, cun sch s gip cc bn lm ch c MS Access v Visual Basic pht trin cc ng dng v trn c s c th t nghin cu lm ch cc ngn ng lp trnh trc quan khc.

CHNG 1. LP TRNH TRC QUAN


I. Gii thiu
T nhng bc tranh u tin tm thy trong cc hang ng thi tin s cho n ch tng hnh ri n nhng bc tranh ca Campbells soup cans, nhn loi tri qua mt thi gian di s dng hnh nh nh l cng c truyn thng hu hiu. Lp trnh trc quan ra i tr li cu hi ti sao chng ta khng th giao tip vi my tnh bng ch ho (graphic mode) m bng ch vn bn (text mode)? Chng ta c th s dng my tnh giao tip qua hnh nh c khng v ti sao khng lm vic vi my tnh mt cch trc quan sinh ng khi gii quyt mt s bi ton t ra trong thc t? Mt cch hin nhin, nhng kt qu t c t cc ngn ng lp trnh trc quan (VPL - Visual Programming Languages) tr li rng hai vn nu trn l hon ton c th thc hin c. Nhng cu hi trn l ng lc ngi ta tin hnh cc nghin cu to ra cc ngn ng VPL. Trc ht, nhiu ngi suy ngh v nh li nhng vn lin quan n kh nng biu t ca hnh nh. Ngi ta lin h n th gii thc theo cch m ho c v s dng hnh nh nh thnh t u tin ca t duy sng to. Thm vo , cc ngn ng lp trnh trong ch vn bn (Textual Programming Languages) bc l nhng hn ch, c bit l khi ngi s dng phi hc rt nhiu s dng cc sn phm phn mm c to ra bi chng. Vic gim thiu hoc xo b hon ton khong cch t tng n pht trin ng dng ri hc tp s dng l rt cn thit. Hn na, s a dng ca cc ng dng bao gm khoa hc hnh dung, s tng tc gia sng to v m phng gp phn c bit to ra cc phng php pht trin trc quan. Trong chng u tin ny, chng ti tp trung gii thiu nhng kt qu ban u trong lnh vc pht trin cc ngn ng lp trnh trc quan nhm tr li nhng vn t ra trn. Chng ti bt u bng vic gii thiu i nt v lch s v nhng cng vic/kt qu ban u c s dng lm c s tin hnh cc nghin cu hin i hn trong lnh vc ny. Chng ti cng s trnh by vic phn loi v nhng quan tm v mt l thuyt chnh ca cc ngn ng trc quan. Phn cui ca chng ny, chng ti gii thiu mt s ngn ng lp trnh trc quan v mt s v d v chng cng nh nhng nh hng nghin cu thuc lnh vc ny trong tng lai.

II.

Lch s ca cc ngn ng lp trnh trc quan

Lnh vc lp trnh trc quan l s kt hp gia ho my tnh, ngn ng lp trnh v tng tc ngi my. N c to ra t nhiu nghin cu c lp v c nhiu cng trnh nghin cu c xem l tin phong trong lnh vc ny. Chng ti mun gii thiu mt nghin cu u tin trong lnh vc ny l h thng Sketchpad ca Ivan Sutherland vo nm 1963. Sketchpad c thit k v thc hin trn my tnh TX-2 ti MIT v n c xem l ng dng ho u tin trn my tnh. H thng cho php ngi s dng lm vic vi mt bt v to ra cc hnh nh trong khng gian 2 chiu (2D) n gin nh ng thng, ng trn cc x l nh sao chp v cc php bin i hnh hc khc trn cc hnh v ny. 5

Giao din ho v nhng h tr ca n dnh cho ngi s dng c xem l bc t ph v c ng gp quan trng to nn nhng ngn ng lp trnh trc quan sau ny. Bng cch nh ngha cc rng buc thch hp, ngi s dng c th pht trin cc cu trc nh cc lin kt c hc phc tp v tip n cho chng chuyn ng nh trong h thng thi gian thc. Chng ta c th thy tng s dng cc rng buc c c t trc quan cng nh cch lp trnh hng i tng c dng li rt nhiu trong cc ngn ng VPL sau ny. Em trai ca Ivan Sutherland l William cng c nhng ng gp quan trng trong lnh vc lp trnh trc quan. T nm 1965, ng ta s dng my tnh TX-2 pht trin mt ngn ng c t dng d liu trc quan n gin. H thng cho php ngi s dng khi to, d li v thc thi cc biu dng d liu trong mi trng trc quan. Ct mc k tip trong vic pht trin cc ngn ng VPL l nm 1975 vi vic cng b lun n tin s ca David Canfield Smith vi tiu Pygmalion: A Creative Programming Environment. Cng vic ca Smith nh du s khi u ca mt lot cc nghin cu trong lnh vc ny cho n ngy hm nay. V d, Pygmalion th hin mt m hnh lp trnh da trn cc biu tng (icon), trong ngi s dng c th khi to, sa i v lin kt chng n nhng i tng hnh nh nh gi l cc icons v c th nh ngha cc thuc tnh thc hin cc tnh ton. Nhng kt qu ca Smith cng nhiu thnh tu nghin cu khc sau ny gp phn hnh thnh nn tiu chun v l thuyt biu tng (icon theory). Nhiu ngn ng VPL hin i s dng cch tip cn da trn l thuyt biu tng ny. Pygmalion cng s dng khi nim ca lp trnh bng v d, ngi s dng thy c lm th no m h thng thc hin mt cng vic trong mt trng hp c bit v h thng s dng thng tin pht sinh t ng mt chng trnh n thc hin cng vic trong trng hp tng qut nht. Trong h thng ca Smith, ngi s dng thit lp mi trng nh ch (remember mode), thc hin vic tnh ton, tt ch nh, nhn cc kt qu ca mt chng trnh trong mt tp con n gin ging nh tp con ca Smalltalk, thc hin vic tnh ton trn mt u vo bt k.

III. Phn loi cc ngn ng lp trnh trc quan


Khi lnh vc VPL chn mui, ngy cng nhiu nhng nghin cu hng n vic sng to mnh m hn cng nh nhng tiu chun phn loi nhng cng vic trong lnh vc ny. Mt h thng phn loi khng ch gip cc nh nghin cu trong vic xc nh cc cng vic lin quan m cn cung cp mt ranh gii so snh v nh gi cc h thng khc nhau. Mt s tn tui c nhng ng gp quan trng trong lnh vc ny nh Chang, Shu, v Burnett. H phn loi v a ra nhng nh ngha xc nh c trng cc nhm chnh ca VPL. Sau y l s phn loi cc ngn ng lp trnh trc quan chnh: Cc ngn ng trc quan thun tu Nhng h thng lai gia trc quan v vn bn (text) Nhng h thng lp trnh bng v d Nhng h thng rng buc i tng Nhng h thng c xy dng da trn cc biu mu (form)

Lu rng vic phn loi trn l khng loi tr ln nhau. Do , c nhiu ngn ng c th thuc nhm ny nhng cng c th thuc nhm khc.

Ch ring nhm cc ngn ng trc quan thun tu (Purely Visual Languages) l quan trng nht. Cc ngn ng ny c c trng bi vic da hon ton trn cc k thut trc quan thng qua tin trnh lp trnh. Ngi lp trnh vn dng cc biu tng hoc cc s biu din ho khc khi to mt chng trnh ri tip theo s g li v thc thi trong cng mt mi trng trc quan. Chng trnh l c bin dch trc tip t s trnh by trc quan ca n v khng bao gi dch n mt ngn ng trung gian da trn ch vn bn (interim textbased language). Nhng v d ca cc h thng thun tu trc quan nh VIPR, Prograph v PICT. Trong nhiu ti liu thuc lnh vc ny, s phn loi ny l i xa hn n vic phn loi cc nhm con nh nhm ngn ng biu tng (iconic languages) v phi biu tng (noniconic languages), ngn ng hng i tng (object-oriented), ngn ng lp trnh hm (functional programming), v ngn ng mnh lnh (imperative languages). Tuy nhin, mc ch ca chng ta l nhm n cc nhm chnh lm ni bt s khc nhau gia nhng ngn ngn ng lp trnh hng trc quan (visually-oriented) v cc ngn ng VPL khc. Mt nhm con quan trng ca cc ngn ng VPL l s mc ni c hai phn t trc quan v vn bn (text). Nhng h thng lai ny bao gm c hai yu t, trong chng trnh c khi to mt cch trc quan v sau dch n ngn ng lp di s dng ch vn bn v nhng h thng bao gm vic s dng cc phn t ho trong mt ngn ng theo ch vn bn. Nhng v d cho loi ngn ng kiu ny l Rehearsal World v Work ca Erwig. Trong nhng h thng c, ngi s dng hun luyn h thng gii quyt mt vn c bit bi vic vn dng cc nhn t ho (graphical actors) v tip n h thng pht sinh mt chng trnh Smalltalk. Smalltalk l mt ngn ng lp trnh v mi trng lp trnh bc cao, xem cc qu trnh tnh ton nh l nhng i tng gi thng bo truyn tin ln nhau. Ngn ng ny do Alan Kay v cc cng s ti Trung tm Nghin cu Palo Alto ( PARC) ca hng Xerox Corporation xy dng nn. SmallTalk l mt ngn ng khai bo, n khuyn khch cc lp trnh vin nh ngha cc i tng theo cc thut ng lin quan n ng dng d kin. y l mt ngn ng rt mnh v c th xy dng cc i tng rt d dng. V ngn ng ny i hi b nh ln to ra cc chng trnh chy nhanh v hiu qu, nn cc lp trnh vin chuyn nghip vn cn a thch cc ngn ng nh C v hp ng. Tuy nhin, SmallTalk truyn cm hng cc nh sn xut phn mm cho ra i HyperTalk, mt ngn ng lp trnh ng dng c cung cp km vi tt c cc my Macintosh bn ra t 1987. Trong chic o mi ca mnh, SmallTalk hon thin mc tiu l lm cho vic lp trnh my tnh tr nn d dng hn; hng chc ngn ngi dng Macintosh hc c cch lp trnh theo HyperTalk. Ngoi hai nhm chnh ny, c nhiu ngn ng VPL c xp vo cc nhm con. V d, mt s cc ngn ng VPL i theo hng ca Pygmalion bng cch cho php ngi s dng khi to v vn dng cc i tng ho v h dy cho h thng bit cch lm th no thc hin mt nhim v c th c giao. Ngn ng Rehearsal World c ni phn trn, c xp vo nhm cc ngn ng lp trnh bng v d. Mt vi ngn ng VPL c th ln theo du vt ca n, mt phn nh vy c vn dng trong cc rng buc ca Sutherland c s dng trong Sketchpad. Nhng h thng hng rng buc ny (constraint-oriented systems) l c bit ph bin trong nhng m hnh lp trnh m cc i tng vt l ging nh cc i tng trong mi trng trc quan. N l i tng rng buc thit k bt chc cch ng x ca cc qui lut t nhin. Nhng h thng hng rng buc cng c ng dng pht trin cc giao din ho cho ngi dng. Hai ngn ng Thinglab v ARK l nhng m phng u tin ca ngn ng VPL. y l v d in hnh nht cho lp cc ngn ng hng rng buc. Mt s t cc ngn ng VPL vay mn s hin th v php lp trnh n d t cc bng tnh. Nhng ngn ng ny c th c xp vo loi cc ngn ng VPL c xy dng trn cc biu mu (form-based VPLs). Chng trnh by vic lp trnh nh l s thay 7

i mt nhm cc c mi lin h vi nhau trn ton b thi gian v thng cho php ngi lp trnh hin th vic thc thi ca mt chng trnh nh mt chui cc tnh trng din ra trn cc trong tin trnh thc hin theo thi gian. Forms/3 l hin thn cho t tin thuc kiu ngn ng VPL ny v n s c m t r hn bn di. Cng quan trng khi lu rng trong mi mt loi c cp trn, chng ta c th tm cc v d ca c cc ngn ng VPL a nng (general-purpose VPL) v nhng ngn ng c thit k cho cc ng dng thuc mt lnh vc c bit. Phm vi ca lp trnh trc quan c m rng trong nhng nm gn y. S pht trin lin tc v mnh m ca cc ngn ng lp trnh trong cc th loi c nu trn dn n mt s cng vic m n c quan tm t u nhng khng c xem l hnh mu ca lp trnh trc quan. Nhng a con m ci ca VPL, theo cch ni ny, gm gii thut ca cc h thng hot hnh nh l BALSA, n cung cp s hin th ho tng tc ca cc chng trnh v cc cng c pht trin giao din ngi dng ho, nh chng cung cp vi nhiu trnh bin dch hin i nh Microsoft Visual C++. C hai kiu ca h thng nht nh bao gm cc thnh phn trc quan nhng chng l nhng ng dng mang nng tnh ho hn l b pht sinh mu ca nhng ngn ng lp trnh hin ti.

IV. L thuyt ca cc ngn ng lp trnh trc quan


Trong phn ny, chng ta xem xt nhng l thuyt tin tin trong lnh vc cc ngn ng lp trnh trc quan v ch yu l nhng kt qu t rt sm lin quan n nhng nghin cu ca S.K. Chang trn l thuyt tng qut v biu tng. Trc khi i su tm hiu nhng vn ny chng ta lm quen vi cc nh ngha sau: icon (biu tng, hnh tng) Mt i tng vi s trnh by kp ca mt phn l-gc ( ngha) v mt phn vt l (hnh nh). iconic system (h thng c tnh cht biu tng) Mt tp hp c cu trc ca nhng biu tng c lin quan. iconic sentence (cu biu tng/trc quan) Mt s sp xp khng gian ca cc biu tng t h thng biu tng. visual language (ngn ng trc quan) Mt tp cc cu trc quan c cu trc vi c php v ng ngha cho trc. syntactic analysis (phn tch c php) Mt s phn tch ca mt cu trc quan xc lp cu trc c s. semantic analysis (phn tch ng ngha) Mt s phn tch ca mt cu trc quan xc nh ng ngha c s. Trong phn ny, chng ta gii hn s tho lun lin quan n cc ngn ng trc quan 2 chiu. 1. c t hnh thc ca ngn ng lp trnh trc quan Mt s sp xp khng gian ca cc biu tng s to thnh mt cu trc quan. N l bn sao hai chiu ca s sp xp mt chiu ca cc du hiu trong cc ngn ng lp trnh qui c 8

(trong ch text). Trong nhng ngn ng ny, mt chng trnh l c din gii nh mt xu k t trong k hiu kt thc l mc ni n mu mt cu m cu trc v ng ngha ca n l c khm ph bi s phn tch c php v ng ngha theo th t nh sn. Theo cch , qui tc xy dng l tim n trong ngn ng v khng cn gii thch nh mt phn ca ngn ng c t. Ngc li, trong nhng ngn ng lp trnh trc quan chng ta phn bit 3 nguyn tc sp xp cc biu tng: s mc ni theo chiu ngang (biu hin bi k hiu &), mc ni theo chiu ng (biu hin bi k hiu ^) v khng gian bao ph (biu hin bi k hiu +). Trong vic nh dng cc ngn ng lp trnh trc quan, n l la chn phn bit cc biu tng tin trnh t cc biu tng i tng. S tnh ton cc biu thc trc, sau c th phn nh n cc biu tng i tng s cp v cc biu tng i tng phc hp. Nhng biu tng i tng c s cho bit cc i tng s cp trong ngn ng, nhng ngc li cc i tng phc hp cho bit cc i tng c nh dng bi mt s sp xp khng gian ca cc biu tng i tng s cp. Tm li, thut ng biu tng s cp (elementary icons) l tham chiu n c hai loi: biu tng tin trnh v biu tng i tng s cp v biu hin bi nhng biu tng ca chng l nguyn gc trong ngn ng. T mt bc tranh (hoc biu tng trong trng hp ny) l c hng ngn cch biu t, chng ta c gng minh ho tt c nhng nim trn y trong hnh v sau:

Hnh 1. H thng biu tng Heidelberg

Hnh v ny gii thiu mt vi biu tng t b biu tng Heidelberg. Nhng biu tng s cp gm (a) l mt k t v (b) l mt k t c chn; cc biu tng tin trnh: (c) l hot ng chn v (d) l hot ng xo; cc biu tng phc hp: (e) l mt xu (kt hp cc k t) v (f) l xu c la chn; (g) cu trc quan biu th s thay th ca mt xu con trong mt xu no . Mt mn ng lp trnh trc quan l c c t bi mt b ba (ID,G0,B), y ID l t in biu tng, G0 l mt ng php v B l mt c s tri thc cho mt lnh vc c bit. T in biu tng l mt tp hp cc biu tng tng qut v mi mt phn t l c trnh by bi mt cp (Xm,Xi), vi phn l-gc Xm (ngha) v phn vt l Xi (hnh nh). Ng php G0 ch nh cch thc lm th no nhng biu tng i tng phc hp c th c xy dng t cc biu tng s cp bng vic s dng nhng ton t sp xp khng gian. C s tri thc B cha nhng thng tin ca mt lnh vc c bit cn thit cho vic xy dng ng ngha ca mt cu trc quan cho trc. N cha thng tin v cc tn s kin, nhng quan h thuc v khi nim, tn ca cc i tng kt qu v nhng tham chiu n cc i tng kt qu. 2. Phn tch cc ngn ng lp trnh trc quan Nh tho lun trn, cc cu trc quan l c xy dng t cc biu tng s cp bng cch s dng cc ton t lin quan n biu tng. Vic phn tch c php ca cc cu trc quan l c xy dng trn c s ca mt s cch tip cn ca Chang. y, chng ta gii thiu mt danh sch khng gian ca cc cch tip cn ny. Picture-processing grammars (ng php x l nh) Ngun gc ca vic thit k l phn tch nhng nh s trn mt li vung, nhng ng php l c xy dng trn c s thc t l nhng bc nh s l s kt hp ca cc im nh. Ng php ny khm ph ra cu trc ca cu trc quan bi trt t ca cc im nh ring l n cc phn t trc quan c th nhn din c (ng thng, hp, cung trn...). Cch tip cn ny c ch khi mt h thng biu tng cn nhn dng cc biu tng vi mt mc no ca li c th chp nhn c (v d cc ch s vit tay). Precedence grammars (ng php th t) Ng php phn tch khng gian ny c th c s dng dnh cho vic phn tch cc biu thc ton hc trong khng gian 2 chiu v phn tch cc trang in. Ng php th t l ph hp hn phn tch c php ca cc cu trc quan c xy dng t cc biu tng s cp cc ton t biu tng. Cy phn tch l c xy dng bi vic so snh th t ca cc ton t trong mt mu v tp con c chia ca mu n mt hoc nhiu mu con. Context-free and context-dependent grammars (ng php ph thuc ng cnh v ng php phi ng cnh) Nhng ng php ny c dng xc nh t hp ca cc cu trc quan trong vic s dng nhng hnh thc quen thuc v nhiu phng php tiu chun ca s phn tch nh nhng ng php ph hp. Graph grammars (ng php th) y l phng thc mnh nht (mc d km hiu qu) c t cc ngn ng trc quan. Nhng hnh thc ny cung cp nhiu ngha nht thit lp nhng quan h ng cnh v nhiu nghin cu hin ti c u t to ra nhng phn tch c th tnh ton c vi ng php th. 10

Mt cy phn tch c sn sinh bi mt trong nhng phng php phn tch trn l nhng phn tch s dng cch tip cn truyn thng phn tch ng ngha (ngha l ng php tng trng hoc cy tnh ton...).

V.

Nhng vn ca ngn ng trc quan

Chng ta tho lun mt vi vn chung v ngn ng trc quan. Nhng vn ny l thch hp nht vi cc ngn ng trc quan hng mc ch (ph hp sn sinh chng trnh thc thi trong kch c hp l), nhng nhng vn no cng s c lin quan n nhng ngn ng thuc mt lnh vc c bit (c thit k phc v mt lnh vc c bit nh l cng ngh phn mm hoc khoa hc hin th). 1. Control Flow (lung iu khin) Tng t nh nhng ngn ng lp trnh thng thng, nhng ngn ng trc quan gn lin vi hai khi nim v lung iu khin trong cc chng trnh l: mnh lnh v khai bo. Vi cch tip cn mnh lnh, mt ngn ng lp trnh trc quan da trn mt hoc nhiu lung iu khin hoc biu lung d liu m n cho bit lm th no xu chui cc lung iu khin thng qua chng trnh. Mt u th c bit ca cch tip cn ny l n cung cp mt s trnh by trc quan hiu qu theo kiu song song. Mt bt tin ca phng php ny l mt ngi lp trnh phi lu gi du vt ca chui th t no ca dy cc hot ng lm thay i tnh trng ca chng trnh, y l iu khng phi l mt c im c mong i ca mt h thng (c bit l nu n c thit k cung cp cho nhng ngi mi hc vic). Mt trong s cc ng ngha mnh lnh ca lung iu khin l s dng mt kiu c th khai bo ca lp trnh. Vi cch tip cn ny, ngi ta ch lo lng mi vic l nhng tnh ton no l s c thc hin v khng cn bit lm th no nhng hot ng hin ti c tin hnh. Vic thay i trng thi nht nh l c phng bi vic s dng ch mt s phn cng: ngi lp trnh khi to mt i tng mi bi vic sao chp mt trng thi ca i tng ang tn ti. Cng vy, thay v c t mt dy cc thay i trng thi, ngi lp trnh nh ngha nhng hot ng bi vic c t nhng ph thuc i tng. V d, nu ngi lp trnh nh ngha Y l bng X+1, th r rng Y c tnh ton bng cch s dng i tng X, cho php h thng suy ra rng gi tr ca X cn phi tnh ton trc. V vy, dy cc x l l vn hin din nhng phi c suy ra bi h thng th ng hn l c nh ngha bi ngi lp trnh. D nhin, s chm sc c bit phi c nm gi bi h thng m thng bo c lp l c nhn din v c thng bo nh l cc s c (errors). 2. S tru tng ho th tc (Procedural Abstraction) Chng ta phn bit hai mc ca vic tru tng ho th tc. Nhng ngn ng lp trnh trc quan bc cao, ngha l khng th vit v bo qun ton b chng trnh trong mt ngn ng v chc chn c mt s lp cha nhng m-un khng trc quan m chng c kt hp li bng cch s dng mt ngn ng trc quan. Cch tip cn ny lp trnh trc quan l c th c tm thy trong rt nhiu cc h thng phc v cho mt lnh vc c bit, v d nh nhng cng c bo qun phn mm v mi trng trc quan khoa hc. pha ngc li l nhng ngn ng trc quan mc thp, chng khng cho php ngi lp trnh mc ni nhng n v l-gc n cc m-un th tc. Phng php ny cng c li trong nhiu ngn ng thuc mt lnh vc c bit v d nh l nhng b m phng l-gc. Nhng ngn ng lp trc quan a nng thng bao ph mt ph 11

rng v cung cp tt c nhng chc nng nhm gip ngi lp trnh d dng khi pht trin ng dng nh mc ni n cc ngn ng bc thp, cc iu kin, qui, lp v mc ni d dng n cc m-un tru tng (th tc, lp, th vin...). 3. S tru tng ho d liu (Data Abstraction) Nhng phng tin cho php tru tng ho d liu l ch c th tm thy trong cc ngn ng lp trnh trc quan a nng. Khi nim tru tng ho d liu trong lp trnh trc quan l rt ging vi khi nim tru tng ho d liu trong nhng ngn ng lp trnh thng thng vi ch nhng yu cu tru tng cc kiu d liu c nh ngha trc quan (tri vi textually), c mt s trnh by trc quan (iconic) v c cung cp dnh cho cch i x tng tc.

VI. Cc ngn ng lp trnh trc quan


Trong phn ny, chng ti gii thiu mt s ngn ng lp trnh trc quan m chng l nhng minh ho xc thc cho nhng khi nim c gii thiu trn. 1. ARK Hn 10 nm k t ngy bt u, ngn ng Alternate Reality Kit (ARK) c thit k bi R. Smith ti Xerox PARC, ra i mt ngn ng lp trnh thuc h VPL phc v cho mt lnh vc c bit. ARK c pht trin trn Smalltalk-80, cung cp cho ngi dng mt mi trng ng trong khng gian 2 chiu dnh khi to s m phng tng tc. H thng l c d nh phc v cho nhng ngi lp trnh nghip d to ra cc m phng v mt nhm khn gi rng ln tng tc vi nhng m phng ny. gip ngi s dng hiu nhng lut c bn ca t nhin, ARK s dng php n d theo ngha ca ch m trong ngi s dng iu khin bn tay trn mn hnh m n c th tng tc vi cc i tng vt l, v d cc qu bng hoc cc khi, chng x l mt khi lng ln v vn tc nhanh v vi cc i tng c gi l cc b tng tc, trnh by cc qui lut vt l nh l trng lc. Bng vic cung cp mt kiu nguyn bn vt l n cc lut tru tng, h thng c gng hu b mt vi b mt bao quanh theo nhng cch m cc lut tng tc vi cc i tng v nhng ci khc. Nhng ngi s dng c th hiu chnh bt k i tng no trong vic s dng mi trng, cc hp thng ip v cc nt, nhn thy kt qu ca nhng thay i ca chng trong thi gian thc. Vic m phng thc hin trong mt alternate reality cha trong mt ca s v tt c c bao quanh mt th gii siu thc. Cu trc rt ging mt h thng cc mn hnh v ca s theo kiu giao tip ngi dng ho hin i. Ngi lp trnh c th di chuyn bn tay gia nguyn bn lun phin v nhng i tng tc ng ra ngoi s m phng v n s siu thc bt k lc no. V d ca mt ngi s dng vn ti v s chuyn ng ca mt i tng t mt dy cc hnh nh xen k l im n tng nht ca mt trong nhiu iu cn quan tm khi thit k trong ARK C th l s cn thit i khi dng li vi s tru tng ho cc t trong trt t cung cp cc chc nng c ch. Smith tham chiu n vn ny nh s quan h gia o thut v s dch tng ch trong ARK. Trong khi s dng mt bn tay m n c th chp c cc i tng vt l l mt im sng ca h thng, n cho php ngi s dng vn ti mt s m phng v lun phin hoc xo b cc i tng m khng quan tm n cc qui lut vt l hin hnh cng vic trong mi trng r rng cung ng cho ngi s dng vi ci g l c xem xt nh l nng lc o thut. Cu hi l khi m mt s kin o thut hoc hnh ng trong ARK tranh chp vi s tru tng ho vt l t song song vi mt m phng lin quan trong thit k ca nhiu ngn ng lp trnh trc quan truyn thng. 12

Khi pht trin nhng ngn ng lp trnh trc quan nht, cc nh nghin cu quyt nh s dng mt cch thch hp cc vn bn (text) trong h thng ca h. Trong khi c th thit k mt h thng khng s dng bt c th g lin quan n ch vn bn v nhng h thng nh vy c to ra nhng kt qu l thng kh c v hiu. Nhng ngn ng lp trnh trc quan nht thng bao gm y s trc quan nhng cng s dng ch vn bn cho nhng vn ti thiu nh tn bin v tn hm trong cc chng trnh. Nhng ngi thit k phi i mt vi cng vn nh gp phi trong ARK. H phi c gng cn bng gia s trnh by trc quan v tnh d s dng. Mc d ARK nhm n lnh vc ng dng kh c bit nhng n h tr mnh cho m hnh lp trnh. Ngi lp trnh c th khng ch khi to s m phng bng vic lin kt nhiu i tng v nhiu tng tc nhng h cng c th pht trin nhng b tng tc mi. Vic lp trnh mt m phng, v d nh m phng hot ng ca cc hnh tinh trong hnh sau:

Hnh 2. Giao din ca h thng ARK

Trong hnh ny bao gm trc ht vic pht sinh cc i tng vt l, ging nh qu bng, t kho cha i tng trong gc phi bn di ca mn hnh trn. Bng vic nhp chut ln trn nt objectMenu, ngi lp trnh c th chn thuyt minh cho mt i tng bt k trong mi trng. Sau khi khi to mt vi i tng vt l, ngi lp trnh i theo cng mt th tc t cc tng tc, nh s chuyn ng, lc ht gia cc i tng trong cc mi quan h qua li. By gi ngi lp trnh s dng nt messageMenu tm ra cch lm th no 13

sp xp cc thng ip cc b tng tc tr li bng cch nh v cc nt trn b tng tc v nhn n vi bn tay. Ci ny sinh ra mt danh sch tt c cc thng ip (message) ph hp n b tng tc ca n. Ngi lp trnh chn mt ci, v d chn off dnh cho b tng tc trng lc (lc ht) trong m phng hot ng, v h thng sinh ra mt hp thng ip (message box). Cc hp thng ip l cc i tng m n c th gi v nhn cc thng ip Smalltalk. Ngi lp trnh lin kt hp thng ip mi, trong trng hp ca chng ta mt trong s sinh ra thng ip off, n b tng tc thch hp bng cch gn lin chng bng mt ng nt chm (dotted line). Hp thng ip c th thu nh n mt nt n nh hnh trn. Cc b tng tc nh hng n tt c cc i tng trong cng xc thc lun phin. Nh vy sau s c t tt c cc iu khin cn thit, ngi lp trnh c th bt u s m phng. R rng, cc b tng tc ca ARK c cch i x rt ging nhng rng buc trn cc i tng vt l trong s xc thc lun phin. V vy, vic khi to v hiu chnh cc b tng tc ging nh l cc c im hng rng buc ca ARK. Mt ngi lp trnh c th pht sinh cc b tng tc mi bng cch to ra cc mng li cc hp thng ip. Hy xem mt v d n gin, xem xt vic pht trin mt b tng tc lc ma st bng cch to ra mt hp thng ip b sung mt lc n mt i tng ma st l ngc vi vn tc ca n. Hp thng ip c th thit lp vic gi lin tc cc thng ip ca n v khi cch i x ca n c xc nhn, ngi lp trnh c th bin i n thnh mt b tng tc. 2. Prograph Trong phn ny, chng ti m t ngn ng Prograph, n c xem l ngn ng thnh cng nht trong s cc ngn ng trc quan a nng (general-purpose visual languages). Vic nghin cu Prograph c tin hnh t nm 1982 ti Trng i hc K thut Nova Scotia. T n nay, c vi phin bn c a vo s dng v trong s c dng ph bin nht l Prograph/CPX v c thng mi ho bi Pictorius, Inc. Prograph l ngn ng hng i tng trc quan. N mc ni nhng khi nim v cc lp, cc i tng vi mt c ch c t dng d liu trc quan rt mnh. Prograph cn l mt ngn ng mnh lnh, n cung cp nhng iu khin r rng trn trt t cc tnh ton. iu c bit l cc trng hp n l v a thnh phn ca Prograph, nhng cu trc iu khin c bit l c mong i thay th vng lp v cung cp cc iu khin lung tinh vi. Chng ta s tho lun nhng iu ny nh mt phn ca v d di y. Prograph cho php ngi lp trnh lm vic trn c hai mc thp v cao, cho php h thit k v bo tr nhiu hoc t phn mm phc tp. Nhng s tnh ton nguyn thu nh cc php ton s hc, cc li gi cc method... l c mc ni n cc phn thn ca phng php biu mu bi cc biu dng d liu. Cc phng thc (methods) l c t chc thnh cc lp. Ngoi ra, Prograph cn cung cp cho ngi lp trnh c ch gi nhng i tng m n c th l c lu tr trong mt c s d liu Prograph gia cc li ngh khc nhau ca chng trnh. Chng ta s gii thiu y mt s c im th v ca Prograph thng qua mt v d ca gii thut sp xp hnh hc t-p trn th c hng. Nhng th s c trnh by bi cc danh sch gn k, mi mt gi tr tng ng n mt nt. Mt danh sch trnh by mt nt da trn tn ca nt, da theo cc tn ca tt c cc nt bt u t nh ca nh ngoi cng ca nt ny. 14

Hnh 3. V d minh ho v gii thut sp xp hnh hc t-p ca Prograph

Hnh trn m t mt chng trnh Prograph thc hin sp xp hnh hc t-p. Ca s Methods cha tn ca tt c cc chc nng trong chng trnh ny v vi ca s CALL ang th hin cc l trnh x l theo gii thut. Ca s Methods cha mt hoc nhiu trng hp x l. Mi trng hp l mt biu dng d liu n ch r lm th no cc trng hp x l (case) c thc thi. Mi mt mnh lnh dng d liu c ch nh r mt s x l thc hin trn d liu m d liu ny nhp vo thng qua mt hoc nhiu terminals (th hin trn nh ca biu tng hot ng). u ra ca mt s hot ng (operation) l ko di n mt hoc nhiu gc ( y ca biu tng hot ng). Cc nh ca mt biu dng ch r lm th no d liu lan truyn t gc ca mi mt operation n terminals ca ci k tip, ngha l trt t thc hin l hng d liu. Phng thc CALL da trn hai trng hp x l (2 cases). S lng cc trng hp, hay ni cch khc l tng s cc trng hp, l c xc nh trong thanh tiu ca ca s cha biu dng d liu ca phng thc. N cha nhng li gi n hai phng thc h thng l ask v show v mt li gi n phng thc do ngi dng nh ngha l sort nh trong hnh sau:

15

Hnh 4. Phng thc sort cho gii thut sp xp trong Prograph

S thc hin ca CALL bt u bi vic nh gi kt qu ca phng thc ask v hng s () danh sch rng. ask cha u vo t ngi s dng v n tr thnh gi tr ca gc ca n. Sau s nh gi ask v hng s c hon tt, kt qu ca chng l c chuyn cho phng thc sort, y l bc x l k tip c thc hin. Lu rng vic gi sort l i cng vi mt iu khin c gi l next-on-failure c trnh by bi mt biu tng bn tri ca biu tng operation. iu ny ng rng nu vic gi n sort b li (n dn n th cha mt vng trn), vic thc thi ca trng hp 1 ca CALL c th b ngt v trng hp 2 s c thc thi. Trong trng hp 1 ca CALL, s hot ng ca sort l bao gm nhiu phn (n l c phn bit bng hnh nh mt s hot ng n l bi mt hnh v trong hnh dng 3 chiu lm ni bt l n thc thi nhiu ln). Ti thiu mt trong cc roots hoc terminals ca cc thnh phn trn l c ch thch vi mt biu tng m n s biu th trong kiu Forms/3. 3. Form/3 Forms/3 l mt ngn ng lp trnh khc thuc dng ngn ng lp trc quan hng i tng a nng. c im ni bt ca n l tru tng ho d liu. Tuy nhin, khng ging nh Prograph, n khng mang tnh k tha v s phn tch cc thng ip l c c h tr. Forms/3 phng theo cch t chc bng tnh vi cc v cng thc trnh by d liu v th t tnh ton. Mt c trng ca Forms/3 l cc y c t chc thnh mt nhm gi c l form, mt c ch tru tng ho d liu c bn. Mt form c th trnh by mt nh cho trc (cn gi l mt biu tng) v n c th c minh ho cho mt i tng. Theo ngha ny, mt form tng ng n mt i tng nguyn mu trong cc ngn ng hng i tng nguyn mu c bn (prototype-based object oriented languages). 16

Trong Forms/3, d liu (values) v s tnh ton (formulas) l mt cp thng nht. Mi mt i tng c t trong mt v c nh ngha vi khai bo s dng mt cng thc. Cc i tng c th ch c khi to theo cc cng thc v mi mt cng thc sn sinh mt i tng ging nh mt kt qu ca vic nh gi n. Nhng cng thc cung cp mt s d dng yu cu cc kt qu t cc i tng khc v khi to nhng i tng mi: iu ny khng cn s phn tch cc thng ip. Ngi lp trnh c th khi to mt chng trnh mi trong Forms/3 bng cch khi to mt form mi, b sung cc n n v ghi r cc cng thc. Mt form n gin l c m t trong hnh sau:

Hnh 5. Mt form n gin trong Forms/3

Cc cng thc dnh cho form ny c c t bi vic chn X, g vo s 5, chn tip Y, nhp chut trn X ri g + 1. Ngi lp trnh cng c th tham chiu n X bng vic g tn ca chng, ng hn l chn la n trn mn hnh. Forms/3 trin khai mt cch tip cn khai bo n lung iu khin c mc ni vi chiu thi gian trong mt cch tip cn m cc tc gi gi l vc-t thi gian (vectors in time). Vi cch tip cn ny, mi mt vc-t nh ngha mt dy cc i tng m chng trnh by gi tr ca cc ny ti nhng thi im khc nhau theo thi gian. Quay tr li vi form v d trong hnh trn. Nu X nh ngha mt vc-t thi gian ca cc i tng s nh l <1 2 3 4 5>, th Y nh ngha mt vc-t thi gian <2 3 4 5 6>. Forms/3 cung cp b lp trnh vi s truy cp n chiu thi gian v nh vy vic lp c th l c thi hnh rt d dng vi phng php khai bo ny. Xem xt v d trong hnh sau:

17

Hnh 6. Form tnh ton cc s Fibonacci trong Forms/3

Ging nh nhng ngn ng lp trnh trc quan a nng (general-purpose visual programming languages), Forms/3 cho php ngi lp trnh lm vic trn c hai bc thp v cao. Lp trnh bc thp trong Forms/3 l thc hin theo cc cng thc (formulas), trong khi s tru tng bc cao l c thc hin bi s su tp cc vo trong cc form.

VII. Kt lun
Trong lnh vc ca cc ngn ng lp trnh trc quan c rt nhiu nghin cu v v d in hnh v chng c cng mc ch l n lc m rng nh hng v lm tng nng lc ca lp trnh my tnh. Thng qua nhiu d n c trnh by trn, chng ta nhn thy cc nh nghin cu hng n mt mc ch chung l hon thin tin trnh lp trnh. Hn na nhng nghin cu hin ti tp trung vo c s l thuyt ca lp trnh trc quan v nhng n lc nghim tc pht trin cc tiu chun phn loi hnh thc dnh cho cc ngn ng VPL. Chc chn l phm vi nghin cu trong lnh vc ny c m rng v ln mnh trong 20 nm qua. Nhng kt qu quan trng t cc nghin cu l thuyt v nhng sn phm nh Sketchpad v Pygmalion vn duy tr nh hng ca n n nhiu ngn ng VPL hin i. 18

Cng vi s pht trin ca cc thit b phn cng h tr mnh m cho ho my tnh, nhng b x l tip tc c ci tin v mt hiu qu x l v gi thnh gim, nhng ngn ng lp trnh trc quan trong khng gian 3 chiu, v d nh CUBE, s c ch i t cng ng nghin cu. Nhng ngn ng VPL trong khng gian 3 chiu khng ch nhm n cc vn th hin mt khi lng ln thng tin trn mt mn hnh nh m cn m t s phi hp gia cc ngn ng lp trnh, ho my tnh v tng tc ngi my m n c t c nhng thnh tu ng khch l vi mt s khi u tt p.

19

CHNG 2. LP TRNH TRC QUAN VI MS ACCESS


I. Gii thiu
1. Khi nim v c s d liu

a. Table (bng), Record (bn ghi) v Field (trng) Ni n c s d liu, ta ngh ngay n cc h qun tr c s d liu nh Foxpro, DB/2, SQLServer, Access hay Oracle... C s d liu cho php lu tr d liu vi s lng ln ta c th qun l, khai thc mt cch tin li v nhanh chng. Hu ht cc chng trnh ta vit u c truy cp c s d liu v ta dng n nh mt cng c lm vic d dng vi nhng d liu ln v c th tp trung thi gian vo vic lp trnh phn giao din vi ngi dng. Ta cn c mt kin thc c bn v kin trc ca c s d liu hiu l do ti sao ta thit k hay truy cp n theo nhng cch nht nh. minh ho, ta s dng mt c s d liu c sn ca Access l biblio.mdb nm \Program Files\Microsoft Visual Studio\VB98\biblio.mdb minh ha cc khi nim cn bit v c s d liu. Trong c s d liu ny c 4 bng: Authors (tc gi), Publishers (nh xut bn), Titles (tn sch) v Title Author.

Bng Authors cha nhiu bn ghi. Mi bn ghi trong bng Authors cha 3 trng: Au_ID, Author v Year Born. Ta c th trnh by bng Authors di dng mt bng tnh nh sau:

20

V ni dung ca mt trng ca cc bn ghi hin th trong cng mt ct ca bng tnh, nn ta cng ni n mt trng nh mt ct (column). V v mi bn ghi chim mt dng (row) ca bng tnh, nn c khi ta cng ni n mt bn ghi nh mt dng. b. Primary Key v Index trnh s trng hp, thng thng c mt trng ca bn ghi, v d nh Au_ID trong bng Authors, c dnh ra cha mt tr s duy nht (unique). Tc l trong bng Authors ch c mt bn ghi vi trng Au_ID c tr s y m thi. Ta gi n l Primary Key (kho chnh).

Khng phi lc no ta cng mun truy cp mt bn ghi Author da vo Au_ID. Nhiu khi ta mun dng chnh tn ca Author truy cp, do ta cng cn phi sp xp sn cc bn ghi theo th t alphabet. Ta cng c th hp nhiu trng li sp xp cc bn ghi. Tht ra, chnh cc bn ghi khng cn phi c di i (di chuyn vt l) nm ng v tr th t. Ta ch cn bit v tr ca n u trong bng l . Trng hay tp hp ca nhiu trng (v d surname v firstname) dng vo vic sp xp ny c gi l Index (ch mc). Mt bng c th c mt hay nhiu Index. Mi Index s l mt bng nh ca nhng pointers (con tr), cha v tr ca cc bn ghi trong bng Authors. N ging nh mc lc ca mt cun sch cha mc v s trang tng ng ch ta n ng phn ta mun tm trong quyn sch. Khi thit k mt bng ta ch nh Datatype (kiu d liu) ca mi trng c th kim tra d liu nhp vo c hp l hay khng. Cc kiu d liu thng dng l Number, String ( cha Text), Boolean (Yes/No), Currency ( cha tr s tin) v Date ( cha date/time). Kiu d liu Number li gm c nhiu loi kiu d liu v s nh Integer, Long (integer chim 32 bits), Single, Double... Di y l cc kiu d liu ca cc trng trong bn ghi Author:

21

C loi kiu d liu c bit tn l AutoNumber. Tht ra n l kiu Long nhng tr s c pht sinh t ng mi khi ta thm mt bn ghi mi vo bng. Ta khng lm g hn l phi chp nhn con s y. c. Relationship (quan h) v Foreign Key (kho ngoi) By gi, nu chng ta ang chy Microsoft Access quan st c s d liu biblio.mdb, chng ta c th dng Menu Command Tools | Relationships nh sau xem s lin h (relationships) gia cc bng.

Access s hin th hp thoi Relationships, trong mi bng c cha tn cc trng. Mi bng li c mt hay hai si dy ni qua cc bng khc. Mi si dy l mt mi lin h (relationship), n ni mt trng trong mt bng vi mt trng c cng tn trong bng kia. V d nh gia hai bng Publishers v Titles c mi lin h da trn trng PubID (Publisher IDentification m s ca nh xut bn). Hn na, nu chng ta s thy u dy pha bng Publishers c con s 1, cn u dy bn pha bng Titles c du v cc (). Ta gi mi lin h (1- ) l one-to-many, ni mt nh xut bn c th pht hnh nhiu mc sch/CD.

Tng t nh vy, trong mi lin h one-to-many gia bng Authors v Title Author, ta thy mt tc gi (bn u c con s 1) c th c nhiu cun sch c i din bi cc bn ghi thuc bng Title Author.

22

Trong khi gia hai bng Titles v Title Author, ta c mt mi lin h one-to-one, tc l tng ng vi mi bn ghi thuc Title ch c mt bn ghi tng ng thuc Title Author. Cu hi t ra l cc mi lin h one-to-many ng vai tr g trong thit k c s d liu. Tng tng khi ta lm vic vi bng Titles, nhiu khi ta mun bit chi tit ca nh xut bn ca cun sch y. Tht ra ta c th cha chi tit ca nh xut bn ca mi cun sch ngay trong bng Titles. Tuy nhin, lm nh th c im bt li l bn ghi ca cc cun sch c cng nh xut bn s cha nhng d liu ging nhau. Mi ln mun sa i chi tit ca mt nh xut bn ta phi sa chng trong mi bn ghi ca Title thuc nh xut bn y. V mun cha chi tit ca mi nh xut bn mt ch duy nht, trnh s lp li, nn ta cha chng trong mt bng ring, tc l bng Publishers. Nu gi s ta bt u thit k c s d liu vi bng Titles, ri quyt nh tch cc chi tit v nh xut bn vo mt bng mi, tn Publishers, th k thut y c gi l s chun ho. Ni mt cch khc, chun ho l thit k cc bng trong c s d liu lm sao mi loi mnh d liu (khng phi l Key) ch xut hin mt ni duy nht. Trong mi lin h one-to-many gia bng Publishers v Titles, trng PubID l Primary Key trong bng Publishers. Trong bng Titles, trng PubID c gi l Foreign Key, c ngha rng y l Primary Key ca mt bng l (foreign). Hay ni mt cch khc, trong khi lm vic vi bng Titles, lc no cn chi tit mt nh xut bn, ta s ly kha l (Foreign Key) dng lm Primary Key ca bng Publishers truy cp bn ghi ta mun. l chnh bng Titles c Primary Key ISBN ca n. d. Relational Database (c s d liu quan h) Mt c s d liu c nhiu bng v h tr cc lin h, nht l one-to-many, c gi l Relational Database. Khi thit k mt c s d liu, ta s tm cch sp t cc d liu t th gii tht bn ngoi vo trong cc bng. Ta s quyt nh chn cc ct (columns/fields) no, chn Primary Key, Index v thit lp cc mi lin h, tc l t cc Foreign Key u. Trong s cc li ch ca mt thit k Relational Database c: Sa i d liu, cho vo bn ghi mi hay xo b (delete) bn ghi c sn rt hiu qu. - Truy cp d liu, lm bo co (Reports) cng rt hiu qu. V d liu c sp t th t v c quy c nn ta c th tin cy c s d liu. Hn na, hu ht d liu nm trong c s d liu thay v trong chng trnh ng dng, nn c s d liu t c cc ti liu gii thch km theo. D sa i chnh cu trc ca cc bng. e. Integrity Rules (lut ton vn d liu) Integrity Rules c dng ni v nhng qui lut cn phi tun theo trong khi lm vic vi c s d liu m bo l c s d liu cn tt. C hai loi quy lut: lut ton vn tng qut (General Integrity Rules) v lut ton vn ring cho c s d liu (Database-Specific Integrity Rules). Cc lut ring ny thng ty thuc vo cc quy lut v giao dch (Business Rules). General Integrity Rules C hai lut ton vn lin quan n c s d liu: lut ton vn thc th (Entity Integrity Rule) v lut ton vn tham chiu (Referential Integrity Rule).

23

Entity Integrity Rule ni rng Primary Key khng th thiu c, tc l khng th c tr s NULL. Quy lut ny l xc ng v mi Primary Key a n mt dng duy nht trong bng, nn d nhin n phi c mt tr s xc nh. Lu l Primary Key c th l mt Composite Key (kho kt hp), tc l tp hp ca mt s kho (columns/fields), nn nht nh khng c kho no trong s cc ct l NULL c. Referential Integrity Rule ni rng c s d liu khng th cha mt Foreign Key m khng c Primary Key tng ng ca n trong mt bng khc. iu y hm rng: - Ta khng th thm mt dng vo trong mt bng vi tr s Foreign Key trong dng y khng tm thy trong danh sch Primary Key ca bng bn pha one (1) m n lin h. - Nu c thay i tr s ca Primary Key ca mt dng hay xa mt dng trong bng bn pha one (1) th ta khng th cc bn ghi trong bng bn pha many () cha nhng dng tr thnh m ci (orphans). Ni chung, c ba ty chn (options) ta c th chn khi thay i tr s ca Primary Key ca mt dng hay xa mt dng trong bng bn pha one (1): Disallow (khng cho lm): Hon ton khng cho php chuyn ny xy ra. - Cascade (nh hng dy chuyn): Nu tr s Primary Key b thay i th tr s Foreign Key tng ng trong cc bn ghi ca bng bn pha many () c thay i theo. Nu dng cha Primary Key b xo th cc bn ghi tng ng trong bng bn pha many () b xo theo. - Nullify (cho thnh NULL): Nu dng cha Primary Key b xo th tr s Foreign Key tng ng trong cc bn ghi ca bng bn pha many () c i thnh NULL, hm ng c i tm thm chi tit u c. Database-Specific Integrity Rules Nhng quy lut ton vn no khc khng phi l Entity Integrity Rule hay Referential Integrity Rule th c gi l Database-Specific Integrity Rules. Nhng quy lut ny da vo chnh loi c s d liu v nht l ty thuc vo cc quy lut v mu dch (Business Rules) ta dng cho c s d liu, v d nh mi bn ghi v tin lng ca cng nhn phi c mt trng S Thu (Tax Number) do n v thu qui nh cho ngi ng thu. Lu l cc quy lut ny cng quan trng khng km cc quy lut tng qut v ton vn. Nu ta khng p dng cc Database-Specific Integrity Rules nghim chnh th c s d liu c th b hng v khng cn dng c. 2. Microsoft Access Microsoft Access l mt phn mm qun l c s d liu rt mnh v c s dng rng ri hin nay. N cho php ngi s dng lu tr, qun l v khai thc d liu trn my tnh mt cch d dng v hiu qu. Access nm trong b Microsoft Office ca cng ty Microsoft. Trong chng trnh ny chng ti gii thiu trn phin bn Access 98, y l phin bn mi c nhiu ci tin so vi cc phin bn trc y. s dng c Access 98, my tnh phi tha mn cc yu cu c bn sau : CPU Pentium tr ln. B nh RAM 32 MB tr ln. 24

H iu hnh Windows 95 tr i.

Trong phin bn ny chng ta c hng mt s cng c b sung so vi cc phin bn c trc y nh : truy cp d liu Access t cc trang Web, qun l cc tp tin c cha cc lin kt n nhng tp tin khc, h tr a ng, qun l d dng cc i tng ha, s dng cc Macro h tr cho t ng ha vic qun l d liu... 3. Khi ng ACCESS Sau khi ci t Microsoft Office (chn component Access), mi ln lm vic vi Access chng ta khi ng : 4. Bt my tnh Chn Start --> Program --> Microsoft Access (Hoc nhn p chut ti biu tng ca Access trn Desktop). C s d liu trong Access

C s d liu l mt tp hp cc d liu lin quan n mt ch hay mt mc ch qun l no . Cc thnh phn ca c s d liu Access bao gm : TABLE (bng) : l thnh phn c bn ca c s d liu, n cho php lu tr d liu phc v cng tc qun l. Trong mt bng, s liu c t chc thnh cc trng (Field) v cc bn ghi (Record). QUERY (vn tin) : l cng c truy vn thng tin v thc hin cc thao tc trn d liu. Query cho php lin kt cc d liu t nhiu bng khc nhau, chn la cc thng tin cn quan tm, n l nn tng xy dng cc bo co theo yu cu thc t. FORM (mu) : cho php xy dng cc mu nhp s liu ging nh trong thc t. Ta c th cng lc nhp s liu vo nhiu bng khc nhau thng qua SubForm. REPORT (bo co) : l cc bo co s liu thng bo kt qu cho ngi s dng. Trong Report ta c th kt hp vi Query to cc bo co theo nhng yu cu khc nhau trong thc t. Trn Report bao gm s liu, hnh nh, th... m t cho s liu. MACRO (lnh ngm) : l mt tp hp cc lnh nhm t ng thc hin cc thao tc thng gp. Khi gi Macro, Access s t ng thc hin mt dy cc lnh tng ng, n c xem l mt c lp trnh n gin, cho php ngi s dng chn la cng vic ty theo tnh hung hin ti. MODULE (n th) : mt dng t ng ha chuyn su hn Macro, l nhng hm ring ca ngi s dng c vit bng ngn ng VBA. Ta ch nn s dng Module trong trng hp cc Macro khng p ng c yu cu . Cc php ton Not : cho kt qu ngc li And : cho kt qu ng ch khi c hai u ng. Or : cho kt qu sai ch khi c hai u sai. Xor : cho kt qu ng khi hai iu kin c gi tr tri nhau. Epv : cho kt qu ng ch khi hai iu kin c cng gi tr. 25

5. -

a. Cc php ton Logic

b. Cc php ton s hc ^ : ly tha. * : nhn. / : chia \ : chia ly phn nguyn. Mod : chia ly phn d + : cng - : tr

c. Cc php ton so snh : >, >=, <, <=, = v <> d. Du ro : " ... " : ro gi tr chui. V d : "Nguyn Vn A" [ ... ] : ro tn bin. V d : [diem1] + [diem2] #mm/dd/yy# : ro gi tr ngy. V d : #01/01/68#

II. Lm vic vi c s d liu (CSDL)


1. To c s d liu

a. To c s d liu bng WIZARD Cho php to c s d liu theo s hng dn ca ACCESS thng qua cc mu c sn. Thng thng cc c s d liu ny khng ph hp vi cch t chc c s d liu thng dng nn nu to c s d liu theo kiu ny i hi phi sa i nhiu. Khng nn to c s d liu theo kiu ny. Bc 1 : ngay sau khi khi ng ACEESS ta chn vo nt Database Wizard v OK. Bc 2 : lc trn mn hnh xut hin ca s sau :

Lc ny ta chn mt mu c s d liu trn bng cch Double Click chut ti biu tng tng ng ri chn OK. Bc 3 : lc trn mn hnh xut hin ca s sau : 26

Lc ny phi vo tn ca c s d liu trong mc : File name :, sau chn Create Tip tc trn mn hnh s xut hin cc ca s yu cu khai bo danh sch cc bng, cc Field, kiu mn hnh, cc mu bo co, tiu v biu tng ca c s d liu... Trong cc bc ta ch vic la chn theo yu cu v Double Click vo Next chuyn sang ca s k tip cho n mn hnh cui th chn Finish. b. To c s d liu trng Thng thng ta phi s dng mc ny to mt c s d liu cho mnh. ACCESS s to ra mt c s d liu trng v ta t nh ngha cho mnh cc Table, Query, Report, Form, Macro v Module ring. Bc 1 : khi khi ng chn Blank Database hoc chn File - New Database Bc 2 : khai bo tn ca a, th mc, tp tin cn to. Chn Create

Lc ta nhn c c s d liu mi, xut hin mn hnh :

Thng thng ta phi s dng mc ny to mt c s d liu cho mnh. ACCESS s to ra mt c s d liu trng v ta t nh ngha cho mnh cc Table, Query, Report, Form, Macro v Module ring. 2. Bc 1 : khi khi ng chn Blank Database hoc chn File - New Database Bc 2 : khai bo tn ca a, th mc, tp tin cn to. Chn Create Hiu chnh c s d liu

Sau khi to c s d liu ta c th lm vic vi c s d liu trn thng qua Table, Report, Form, Record, Query v Module qua ca s trn.

27

III. Lm vic vi Table


Table l thnh phn c bn ca c s d liu trong Access, n c nhim v lu tr cc s liu phc v qu trnh qun l. 1. To cu trc ca Table lu tr s liu trn Table trc ht ta phi to cu trc ca Table bng cch qui nh tn ca Table, tn v thuc tnh ca cc trng. Ta c th to Table bng cch chn New trong hp thoi c s d liu hoc chn trn thanh thc n Insert - Table, lc xut hin ca s cho php chn cch to Table nh sau :

a. To Table bng Wizard Phng php ny cho php to Table theo cc mu c sn ca Access. Bc 1: chn Table Wizard trong hp trn ri OK Bc 2: chn tn Table, tn trng theo mu c sn ca ACCESS v sa i li theo yu cu thc t. Chn NEXT thc hin cc cng vic k tip nh sa tn trng, tn Table v sau cng chn FINISH kt thc.

b. To Table bng DATASHEET VIEW Phng php ny cho php to Table theo cch s dng mt mu biu cho trc v ACCESS da vo to ra Table. Bc 1: chn Datasheet View trong hp ri OK Bc 2: Nhp vo ni dung ca bng mu khi my a ra mt mu Table vi cc Column c tn l Field1, Field2...

V d : to Table lu tr im sinh vin ta nhp :

28

Bc 3: hiu chnh li tn trng bng cch a du chut vo nh ct cn sa v nhn nt cht bn phi ri chn Rename Column (Hoc con tr c ct cn sa chn trn thc n Format - Reneme Column). Sau g li tn trng. V d ta nhp li tn cc trng trn Table c nh sau :

Bc 4: ng Talbe (chn File - Close) My hi c ghi hay khng, chn Yes. ghi, No nu khng. t tn cho Table trong bng Save As My hi c t kha c s Primary Key hay khng, nu c th Yes, khng th No.

Lc ny my s t nh ngha mt Table theo mu va to. Nu mun hiu chnh thm th chn Design. Ch : tn trng v tn Table di ti a l 64 k t, bt u bng 0..9 hoc A..Z, c th l k t trng nhng khng c du chm cu. S trng ti a trong mt Table l 255. ln ti a mt Table l 1 GB. c. To Table bng DESIGN VIEW Phng php ny cho php to Table hon ton do ngi s dng qui nh. Bc 1: chn Design View trong hp ri OK Bc 2: xut hin mn hnh thit k Table nh sau :

Field name : khai bo tn ca trng. Data Type : khai bo kiu d liu tng ng ca trng.

29

Description : ni dung m t cho trng. Ni dung c dng lm tiu cho trng khi thit lp cc Form hay Report khi dng Wizard. Trong mc Data Type, chng ta c th chn mt trong cc kiu sau : Tn Text Memo Number Date/Time Currency Auto Number Yes/No Hyperlink Lookup Wizard Di ti a 65535 k t Cha gi tr s Gi tr ngy hoc gi Tin t, c n v tnh Gi tr s nhng khng thay i c dng th hin Gi tr True hoc False Ni dung l vn bn hay kt hp gia vn bn v s c s dng nh mt a ch hyperlink (siu lin kt) Chn mt gi tr trong danh sch cc gi tr cho trc ngha Cha tp hp cc k t ty , di ti a 255 k t

Ch : tng ng vi mi kiu d liu s khai bo thm cc thuc tnh ca n trong Field Properties gm cc thuc tnh chung (General) v thuc tnh nhp s liu (Lookup). V d : vi kiu d liu Text ta khai thm : Tn Field Size Format Input Mask Caption Default Value Validation Rule Validation Text Required Allow Zero Length Indexed 2. rng ti a cha sn Cch hin th gi tr Qui nh mu nhp liu Mt ch thch khc cho Field, dng vi Form, Report Gi tr cho trc Qui nh cch kim tra s liu nhp Thng bo khi nhp s liu sai Chn Yes nu bt buc phi nhp ni dung Chn Yes nu chp nhn gi tr rng C ch mc hay khng, nu c th c trng hay khng (No, Yes Duplicate OK, Yes No Duplicate) ngha

Nhp s liu vo Table

Sau khi to xong Table ta c th nhp s liu vo bt k lc no bng cch : Double Click vo tn Table cn nhp. vt sng tn Table cn nhp ri chn Open

30

Ch : trong qu trnh nhp ta c th iu chnh rng cc ct cho thch hp bng cch a du chut v cnh bn phi ca tiu ct cho xut hin du ri Drag chut iu chnh. Khi ng ta lu Layout bng cch tr li Yes 3. Hiu chnh Table Ta c th hiu chnh Table : thay i cu trc bn ghi, sa i ni dung bn ghi hoc cch trnh by. a. Thay i cu trc bn ghi Chn tn ca Table cn hiu chnh. Chn Design Hiu chnh li qua bng :

Ta c th thay i cc thng tin lin quan n cc trng trong Table t tn trng, kiu, cc thuc tnh, thm bt cc trng... b. Thay i ni dung bn ghi Chn tn ca Table cn hiu chnh. Chn Open hoc Double Click ti . Hiu chnh s liu ging nh trong Excel. c. Thay i cch trnh by Chn tn ca Table cn hiu chnh. Chn Open hoc Double Click ti . Chn Format nh dng, sau : Font : thay i kiu ch. 31

Cells : thay i cch th hin nh : Gridlines Shown (che hay hin ng li), Cell Effect (trnh by s liu phng, nh ln hoc lm xung), Gridline Color (mu sc ca nt gch), Background Color (mu nn ca ). Column Width : qui nh rng ct. Hide Column : che bt ct. Nu mun hin li chn Unhide Column. 4. Khai thc s liu trn Table Cho php khai thc s liu mt cch tc thi khi ang lm vic trc tip trn Table. Nu mun t ng ha cng tc khai thc thng tin v c cc bo co p mt th ta phi dng Report, Query, Macro hoc lp trnh bng Visual Basic. a. Tm v thay th Cho php tm v thay th ni dung trn mt trng no trong Table. a con tr v trng cn tm v thay th. Chn Edit - Replace b. Thay i v tr trng Chn ct cn thay i v tr (a du chut ln tiu trng). Drag chut a trng v v tr mi. c. Sp xp Chn trng lm kha sp xp. Chn trn thanh thc n Record - Sort (hoc chn biu tng) Chn sp tng dn (Sort Ascending) hoc gim dn (Descending). d. Lc bn ghi Chn trn thanh thc n Record - Filter (hoc chn biu tng) Chn Filter by Form Qui nh cch lc : Mun lc theo trng no ta ch vic bm cht vo trng v chn gi tr lm iu kin lc. Bm phm phi ca chut chn Apply Filter. Lc ny ch cn cc bn ghi tha mn iu kin. Nu mun hy lc th bm phm phi ca chut chn Remove Filter. Lc ny hin tt c cc bn ghi nh ban u.

Ch : trong qu trnh lc ta c th dng cc iu kin vi cc php ton so snh v quan h.

IV. LM VIC VI QUERY


1. Khi nim

Query l mt cng c cho php ngi s dng thng k s liu, xy dng cc bo co tng hp di nhiu hnh thc khc nhau trn d liu gc trong Table. 32

Mun lm vic c vi Query trc ht ta phi c Database v Table vi d liu nhp vo sn. Query cn c dng to ra d liu phc v cho cc cng c khc nh Report, Form v cho c mt Query khc. Ty theo mc ch khai thc ta c th s dng mt trong cc loi Query sau : Select Query : cho php chn la cc bn ghi, to thm cc vng tnh ton v tr v kt qu l cc bn ghi tha mn iu kin. Ta c th dng Query thao tc trn nhiu Table cng lc. Append Query : ni thm d liu t cc bn ghi ca mt hay nhiu Table vo cui mt Table khc. Make-Table Query : to ra mt Table mi t mt Dynaset (Dynamic Dataset). Cho php to cc Table d phng, trch bn ghi lu tr trc khi xa cc bn ghi ny khi Table hin hnh. Delete Query : xa mt nhm cc bn ghi t mt hay nhiu Table. Cross Tab Query : Query tham chiu cho, c dng to nhm d liu v tr v kt qu di dng mt bn tnh km theo s cng ngang, cng dc. Ta thng dng loi ny to d liu phc v cho cc Report v Chart. Find Duplicate Query : tm trong Table nhng bn ghi c gi tr ging nhau trn tt c cc trng. Find Unmatched Query : tm nhng bn ghi m gi tr ca n khng trng vi gi tr ca bt c mt bn ghi no trn mt Table khc. Union Query : ni cc bn ghi ca hai hay nhiu Table thnh mt danh sch chung. Pass-Through Query : Query chuyn giao, dng gi lnh trc tip n h ngn ng SQL (Structured Query Language) ca ACCESS. Data Definition Query : s dng cc lnh ca ngn ng SQL to hoc sa i cu trc ca mt Table trong Database. 2. Cch to QUERY Mun to Query ta thc hin qua cc bc sau : Bc 1: trong hp Database ta chn nt Query , chn New Bc 2: chn kiu to Query qua ca s sau

33

Bc 3: chn Table phc v cho vic xy dng Query qua ca s sau : Table : xem danh sch tn cc Table to trc . Query : xem danh sch cc Query c. Both : xem danh sch c Table v Query. Add : b sung Table hoc Query c chn cho vic to Query mi. Close : ng ca s chn.

Bc 5: thit k Query theo yu cu. Nu mun thay i loi Query th ta chn trn thanh

thc n chc nng Query sau chn trng danh sch loi Query. Bc 6: ty theo tng loi Query ta c cch thit k ring. Sau khi to Query xong ta ng li v t tn cho Query khi my yu cu. Sau y ta xt cch to mt s Query thng c s dng (ch lm r cho bc 6). a. Select Query Sau khi chn 5 bc trn v loi Query l Select Query mn hinh s xut hin ca s khai bo Query nh sau :

Field : chn tn cc trng c lin quan n iu kin, sp xp hoc cn xem. Table : hin th tn ca Table m trng c chn trc thuc vo n. Sort : qui nh vic sp xp tng (Ascending) hoc gim (Descending) theo n. Show : cho php hin th ni dung ca trng hay khng ( : khng, : c).

34

- Criteria : qui nh iu kin lc cc bn ghi cn ghi. Nu cc iu kin vit trn cng dng ny th ngm nh l quan h AND nu vit trn dng pha di th quan h OR ng ca s Select Query v ghi tn ca Query cn lu tr ln a. Ch : linh hot khi thay i iu kin ca Query trong mc Criteria thay v g gi tr lm iu kin ta nhp vo tn bin nh. Lc mi khi gi Query my s yu cu nhp vo gi tr tng ng.

V d : mun xem danh sch sinh vin sinh vo mt ngy no ta a con tr v Criteria ca ny sinh g [ngay sinh]. Khi gi Query thc hin s xut hin ca s hi ngy sinh : Nu mun tnh tng theo tng b phn th ta bm phm phi ca chut v chn Total, lc

trong Query xut hin mt dng Total ta qui nh phng thc tnh ton. Khi bm vo Total ta thy xut hin cc hm tnh ton : Sum (tnh tng), Avg (tnh gi tr trung bnh), Min (tm gi tr nh nht), Max (tm gi tr ln nht), Count (m s lng cc gi tr), StDev ( lch chun ca cc gi tr), Var (s bin thin ca cc gi tr) v cc ty chn khc l : Group By (nh ngha nhm mun tnh ton), Expression (to ra mt biu thc tnh ton, Where (ch nh iu kin khi tnh ton). Nu mun to ra mt trng m ni dung ca n c tnh ton t mt biu thc bt k th ta a con tr n ct vit biu thc cn tnh. Cch vit : Tn trng : biu thc. V d : DTB:([mon1+[mon2])/2 Nu mun thay i thm cho ct cn th hin th ta a du chut n ct nhn phm phi ca chut lm xut hin thc n ri chon Properties v qui nh qua :

Description : dng ch thch. Format : qui nh khun dng cch th hin ni dung d liu. Decimal Places : s ch s phn thp phn. Input Mask : cch thc nhp s liu. 35

Caption : tiu s dng thay cho tn trng. b. Cross Tab Query y l loi Query cho php lp bng tham chiu cho : tng hp t mt n nhiu ch tiu theo hng, trn mi hng li tng hp mt ch tiu khc theo ct, vng giao nhau gia hng v ct th hin tr s tng hp ca mt ch tiu th ba. Chn Cross Tab Query, sau chn tn cc Table cha s liu lp Query hoc tn Query c s to Query k tip. Sau chn Next xut hin ca s :

Trong Available Field ta chn tn trng lm tiu dng. S trng ti a c chn l 3. Select Filed : cha tn cc trng c chn. Chn Next xut hin mn hnh k tip :

Chn tn trng s dng lm tiu ct. 36

Chn Next sang bc k tip. Chn gi tr s cn tnh ti mi giao im dng v ct. Chn Next chuyn sang bc k tip. G vo tn ca Query cn to. Chn Finish hon tt to Query.

Ch : tng t to cc Query cn li. 3. Hiu chnh QUERY

Nu mun hiu chnh li Query th ta a con tr v tn ca Query v chn Design thc hin thit k li. Nu mun xem lnh to Query th trong qu trnh Design ta bm nt phi ca chut ri chn SQL View. 4. Thc hin QUERY a con tr v tn ca Query v chn Open ( hoc Double Click chut ti ).

V.
1.

Lm vic vi Report
Khi nim

Report cho php ngi s dng thit k cc mu bo co theo yu cu xem v in n cc bo co ra giy. Report l mt cng c rt mnh chng ta c th to ra mt bo co p mt. Ta d dng iu chnh kch c, kiu dng ca mi thnh phn trong Report. a s cc thng tin trong Report c ly t cc Table, Query, cc lnh ca SQL.. C hai dng Report chnh l : Columnar Report : bo co dng ct. Thng s dng in cc phiu theo mu cho trc. V d : in li phiu thu, phiu chi, phiu bo im... 37

Tabular Report : bo co dng bng. y l loi thng s dng in cc bng k. Trong trng hp ny cc trng b tr trn ct ng, bn ghi b tr trn dng ngang. 2. Cch to Report Bc 1 : chn vo nt Report, tip n chn New Bc 2 : chn phng php v loi Report cn to qua ca s :

Choose the table or query where the object's data comes from : chn tn ca Table hoc Query cha s liu c s ca Report. Design View : t thit k Report t mn hnh trng. Report Wizard : thit k Report vi s tr gip ca ACCESS. AutoReport - Columnar : t ng to bo co dng ct. AutoReport - Tabular : t ng to bo co dng bng. Chart Wizard : to th m t vi s tr gip ca ACCESS Label Wizard : to nhn vi s tr gip ca ACCESS. Chn OK chuyn sang bc k tip khai bo Report. Sau y gii thiu phn thit k Report theo cc kiu chn trn : Report Wizard :

Sau khi chn Report Wizard xut hin ca s chn tn cc trng c ni dung cn xem trong Report t Available Fields chuyn sang Selected Fields.

38

Chn Next chuyn sang bc tip theo. Chn tn trng cn dn nhm theo n. Nu khng mun kt nhm th b qua bc ny bng cch chn Next. V d : ta mun in danh sch sinh vin trong trng theo tng nhm l lp th chn trng nhm l lp. Grouping Option : qui nh thm thng tin v phng php to nhm. Chn Next chuyn sang bc tip theo :

You can sort records by up to four fields, in either ascending or descending order : qui nh vic sp xp bn ghi theo th t tng hoc gim ti a theo bn kha. Nu mun sp xp th ta chn tn trng kha v qui nh tng hoc gim. Summary Option : Cho php thc hin tnh ton theo cc trng. Lc xut hin mu khai bo :

Lc ny ta phi qui nh tn trng v cng thc tnh ton cho tng trng . Trong Table c bao nhiu trng kiu s th c by nhiu trng c th c tnh ton. Trong mc Show nu chn Detail and summary s c cc dng chi tit ln cc dng tm tt, nu chn Summary Only th ch c cc dng tnh tng. Nu chn Calculate Percent th s c tnh tnh t l phn trm. Sau chn Next tip tc. 39

Qui nh cch trnh by Report theo mt trong 6 kiu trn mc Layout. Mc Orientation cho php qui nh cch b tr theo chiu ngang hay dc ca trang giy. Qui nh cch trnh by tiu . Sau chn Next hon tt vic khai bo. Lc ny khai bo tn ca Report ghi vo a v chn Finish hon tt. AutoReport Columnar : t ng to ra mt bo co dng ct t mt Table cho trc. AutoReport Tabular : t ng to ra mt bo co dng bng t mt Table cho trc Design View : cho php ngi s dng t thit k mt Report t u n cui. Chn tn ca Table hoc Query cha d liu c s ri chn kiu t thit k Design View. Lc trn mn hnh xut hin ca s cho php thit k Report nh sau :

Page Header, Page Footer : cho php ghi ni dung tiu u hoc cui mi trang in. Detail : ghi ni dung ca cc dng trong Report. Nu mun to tiu c in mt ln u bo co ta chn trn thanh thc n Ct bn tri xut hin thanh cng c phc v ngi dng thit k Report, ngha ca chng nh sau :

40

Select Object : cho php chn i tng. Control Wizard : thit k vi gip d ca ACCESS Label : to nhn Textbox : hp d liu Option Group : to mt Frame Toggle Button : to nt Option Button : nut chon Check Box : hp kim tra Ngoi ra cn c nhiu cng c khc. 3. Hiu chnh Report Sau khi thit k v lu tr Report, nu mun hiu chnh li Report th: Trong hp Database a con tr n tn Report cn hiu chnh. Chn Design. Hiu chnh ging nh trong Design View. 4. File Thc hin Report Print ( in) hoc Print Preview ( xem) Nu mun xem hoc in Report ta chn trn thanh thc n : Hoc bm vo cc biu tng tng ng trn thanh cng c

VI. Lm vic vi Form


1. Khi nim

Form l mth cng c cho php ngi s dng thit k cc mu nhp v xem s liu ging nh mu biu ngoi thc t. Ta thy khi nhp liu bng Table th tuy vic nhp liu rt d dng nhng cc mu nhp ca n khc nhiu vi trong thc t to cm gic kh chu khi cha quen. V vy, khi xy dng chng trnh cho nhiu ngi s dng c bit l nhng ngi khng chuyn dng my tnh th ta phi to ra cc mu biu ging ht trong thc t d dng khi s dng. D liu s dng trong Form c ly t Query hoc Table 2. Thit k Form Ta c th to Form bng nhiu cch khc nhau nh : Dng AutoForm : t ng to Form t Table hoc Query cho trc. Dng Wizard : to Form qua s gip ca ACCESS. T thit k Form

Trn thc t to Form mt cch nhanh chng, d dng v p mt ta thng s dng Form Wizard to ra mu Form v sau t hiu chnh li nhng ch cn thit. 41

T thit k Form Chn tn Table hoc Query, chn kiu thit k Form l Design View ri OK. Xut hin mn hnh thit k Form nh sau :

Mn hnh cha ni dung ca Form Thanh cng c : cha cc cng c phc v cho vic thit k. Tn gi v ngha ca cc nt chn trn thanh cng c theo th t t tri sang phi nh sau: Select : chn i tng cn hiu chnh.

Control Wizard: tr gip ca Wizard khi to Control. Label : to nhn. TextBox: ni dung biu thc hoc trng. Option Group: nhm chn vic. Toggle Button: to nt bt tt. Option Button: to nt chn mt trong nhiu gi tr. CheckBox: hp nh du chn nhiu gi tr cng lc. ComboBox: hp chn cp. ListBox: hp xem, chn trong mt danh sch. Command Button: to nt lnh. Image: tranh nh. Unbound Object Frame: to mt khung hnh c nh. Bound Object Frame: to khung hnh khng c nh. Page Break: to du phn trang. Tab Control: to Tab iu khin chn trang. SubForm: to Form con. Line: v ng thng. 42

Rectangle: v hnh ch nht. More Control: chn s dng cc nt iu khin t nhiu chng trnh khc.

Mun a mt cng c vo trong Form ta c th t thit k nt hoc s dung Control Wizard ca ACCESS : a. Nu dng Control Wizard - Bm nt Control Wizard (cho n c mu sng). - Bm vo cng c cn chn a vo Form. - Drag chut vo trong Form ti khu vc cn t cng c . - Khai bo cc thng tin cn thit theo ch dn ca ACCESS. b. T thit k - Bm chut vo cng c cn chn a vo Form. - Drag chut vo trong Form ti khu vc cn t cng c . Khai bo cc thng tin cn thit. Nu mun sa i cc thuc tnh th bm p chut ti cng c va to khai bo li. 3. Hiu chnh Form Chn tn ca Form cn hiu chnh, chn Design Sa i ging nh trong phn t thit k. 4. Thc hin Form Chn tn ca Form. Chn Open

VII. Macro v h thng thc n


1. Macro

a. Khi nim : Macro l mt hay mt tp hp cc hnh ng (Action) lin tip c nh ngha v lu tr vi mt tn xc nh. Macro cho php t ng ha cc cng vic cn thc hin. C ba loi Macro chnh l : Macro kt hp nhiu hnh ng : l Macro c kt hp bi nhiu hnh ng lin tip nhau. Khi tn Macro c gi cc hnh ng ny s ln lt c t ng thc hin. Macro Group : l mt tp hp cc Macro c cc tnh nng ging nhau. N cho php qun l c s d liu d dng hn. thi hnh mt Macro trong Macro Group ta ch tn ca n nh sau : Tn Macro Group.Tn Macro thc hin. Macro theo iu kin : l Macro m cc hnh ng ch c thi hnh khi tha mn iu kin no . iu kin l mt biu thc c ch nh trong Condition. b. Cch to Macro

43

Bc 1: trong ca s Database chn nt Macro, tip n chn New Bc 2 :xut hin ca s khai bo Macro nh sau : Trong Action ta chn mt hnh ng cn thc hin. Ta c th chn nhiu hnh ng tng

ng vi nhiu dng. Trong ct Comment ta c th ghi r ch thch v hnh ng. Ct ny khng bt buc nhng n gip ngi s dng d dng khi bo tr h thng v bit c thc hin khi thit k. Trong mc Action Arguments ta c th ch nh cc i s cho Action nu cn thit. c. Thc hin Macro thc hin Macro ta c th chn tn ca Macro trong Database ri chn tip Open Hoc gi tn Macro trong khi s dng Form, Report... 2. H thng thc n Ta c th s dng Macro xy dng h thng thc n cho php la chn cng vic mt cch d dng v tin li. Thng qua h thng thc n ta c th lin kt tt c cc i tng trn Database thnh mt h thng chng trnh thng nht tin li cho ngi s dng chng trnh. a. Cch to thc n Gi s ta mun to mt h thng thc n gm cc mc nh sau : Mc 1 Mc 1-1 Mc 1-2 ... Mc 1-n Mc 2 Mc 2-1 Mc 2-2 ... Mc 2-n Mc 3 Mc 3-1 Mc 3-2 ... Mc 3-n

Trong h thng thc n ny cc mc nm ngang gi l Menu cp 1, mi ct ng l mt Menu cp 2 (ta c 3 Menu cp 2) v tng t c th to Menu cc cp thp hn (V d : chn vo Mc 1-1 th xut hin cc mc Mc 1-1-1, Mc 1-1-2...). Bc 1: to menu cp 1. Bm du chut vo nt Macro, chnNew. 44

Khai bo vo bng sau : Action : la chn hnh ng l AddMenu cho c ba

Comment : ghi dng ch thch. Mc ny khng cn. Menu Name : ghi ni dung dng ch s hin trn thanh thc n. Trong trng hp ny ta t tn l : Mc 1, Mc 2, Mc 3. Nu mun xut hin du gch chn di ch ci dng lm phm nng th thm vo trc ch & Menu Macro Name : tn ca Macro. Ta phi nh tn ny sau ny gi li trong khi to menu cp 2. Trong trng hp ta t tn cc Macro l : Muc1, Muc2, Muc3 Status Bar Text : ni dung dng ch s xut hin trn thanh Menu Bar khi ta chn vo mc ny. Ta ng ca s ny bng cch bm chut vo gc trn bn phi ni c du X v t tn cho Macro l MainMenu (Tn ny ta t qui nh). Bc 2: to cc menu cp 2. Vo hp Database chn nt Macro ri chn New. Xut hin ca s ging bc 1, ta chn thm View - Macro Name, s xut hin ca s mi nh sau :

Macro Name : g vo tn cc mc trn Menu cp hai th nht. Nhng ch ny s c in ra trn thanh thc n. 45

Action : hnh ng cn thc hin khi ta chn vo chc nng ny. Ta chn cc Action ny trong danh sch m ACCESS cho trc. Action Argument : khai bo cc tham s lin quan n Action. ng ca s ny v g vo tn ca Macro la tr ln a. Tn ny phi trng vi tn ca Macro (m ta khai bo trong Menu Macro Name bc1). Trong trng ny ta g tn l Muc1. Tng t, ta to hai Macro cp 2 khc v t tn l Muc2, Muc3 Bc 3: gn Menu ln mt Form hoc Report. Trong ca s Database chn Form (hoc Report). Chn New. Bm chut vo hp Properties trn thanh Menu Bar xut hin hp thoi :

b. S dng thc n Khi no mun dng thc n chn vin ta ch vic m Form c gn vi thanh thc n c to.

46

CHNG 3. BT U LP TRNH VI VISUAL BASIC


I. Gii thiu
Ngn ng BASIC (Beginner's All Purpose Symbolic Instruction Code) c t nm 1964. BASIC rt d hc v d dng. Trong vng 15 nm u, c rt nhiu chuyn gia tin hc v cng ty to cc chng trnh thng dch (Interpreters) v bin dch (Compilers) cho ngn ng ny v gp phn lm cho BASIC tr nn rt ph dng. Nm 1975, Microsoft tung ra th trng sn phm u tay Microsoft BASIC v tip Quick BASIC (cn gi l QBASIC) thnh cng rc r. Quick BASIC pht trin trong nn Windows nhng vn kh khn khi to giao din kiu Windows. Sau nhiu nm, Microsoft bt u tung ra mt sn phm mi cho php chng ta kt hp ngn ng d hc BASIC v mi trng pht trin lp trnh vi giao din ngi dng ho (Graphic User Interface - GUI) trong Windows. l Visual Basic Version 1.0 vo nm 1991. Trc , chng ta khng c mt giao din ngi dng ho (GUI) vi mt IDE (Integrated Development Environment mi trng pht trin tch hp) gip cc chuyn gia lp trnh pht trin chng trnh d dng v c th tp trung cng sc v thi gian vo cc vn lin quan n t chc bi ton. Mi ngi phi t thit k giao din qua th vin c sn Windows API (Application Programming Interface) trong nn Windows. iu ny to ra nhng tr ngi khng cn thit lm phc tp vic lp trnh. Visual Basic gip chng ta b qua nhng kh khn , cc chuyn gia lp trnh c th t thit k cho mnh giao din cn thit trong ng dng (application) mt cch d dng v nh vy c th tp trung n lc gii quyt cc vn cn gii quyt trong doanh nghip hay k thut. Ngoi ra, cn nhiu cng ty ph pht trin thm cc th tc, hm (modules), cng c (tools, controls) hay ng dng (application) h tr di hnh thc VBX cng thm vo giao din chnh nn VB cng lc cng thm phong ph. Khi Visual Basic phin bn 3.0 c gii thiu, th gii lp trnh li thay i ln na. Vi phin bn ny, chng ta c th thit k cc ng dng (application) lin quan n c s d liu tng tc n ngi dng qua DAO (Data Access Object). Cc ng dng loi ny thng gi l ng dng ngoi vi (front-end application). Phin bn 4.0 v 5.0 m rng kh nng VB nhm n h iu hnh Windows 95. Phin bn 6.0 cung ng mt phng php mi kt ni vi c s d liu qua s kt hp ca ADO (Active Data Object). ADO cn gip cc chuyn gia pht trin mng ni vi c s d liu khi dng Active Server Pages (ASP). Lu rng, tt c cc khi nim v cng dng ca Modules, Tools, Controls, DAO, ADO hay ASP s c trnh by trong cc bi hc sau. Tuy nhin, VB phin bn 6.0 (VB6) khng cung ng tt c cc c trng ca kiu mu ngn ng lp trnh hng i tng (Object Oriented Language - OOL) nh cc ngn ng C++, Java. Visual Basic l mt ngn ng lp trnh trc quan v thng c s dng hin nay. Ging nh cc ngn ng khc, khi lp trnh ta buc phi tun theo cc qui tc, trnh t l-gc nht 47

nh nhng nu so vi cc ngn ng lp trnh c cu trc nh Turbo Pascal, C... th Visual Basic i theo mt phng php lp trnh mi. Visual Basic xy dng mt mi trng lm vic di dng cc biu mu (Form), cc hp iu khin (Control Box), thin v cc i tng (Object oriented), nhng th tc c x l theo tnh hung v cc phng thc (Method). Khi lm vic vi Visual Basic ngi lp trnh c nhim v chnh l thit k biu mu, cc khung giao din, cc nt lnh v cng vic s thc hin tng ng trn ; cc lnh, cc ch th phi c vit ra s hn ch ti a. Mt trong nhng im khc bit r rng nht gia Visual Basic v cc ngn ng lp trnh c cu trc l mt ngn ng x l theo tnh hung (event - driven language) v mt ngn ng x l theo th tc (procedural - language). i vi cc ngn ng x l theo th tc th mt chng trnh ng dng s cho thi hnh mt cch l-gc theo tng lnh mt ty theo cch sp xp, t chc ca ngi vit chng trnh. Cn ngn ng x l theo tnh hung th cc ch th chng trnh ch c thc hin khi gp mt tnh hung c bit xy ra. Mi mt tnh hung tng ng mt th tc c thc hin v cc th tc ny trong chng trnh l hon ton c lp.

II.

Cc khi nim thng dng

i tng (Object) : l mt tp hp bao gm chng trnh v d liu lin quan vi nhau to thnh mt n v x l c lp. Khi khai bo i tng xong ta ch cn truyn cho n cc tham s cn thit khi mun i tng hot ng. Khi hon tt khai bo, thc hin th kim tra ta c th lu tr i tng s dng trong cc chng trnh khc. Trong Visual Basic cc i tng chnh l biu mu (FORM) v hp iu khin (CONTROL). Mi mt i tng ta c th khai bo cho n mt s cc thuc tnh ring nh mu sc, kch thc, gi tr... v cc thuc tnh ny c th thay i trong qu trnh thc hin chng trnh. Biu mu (Form) : l mt khung ca s hin trn mn hnh v n c th cha mt dy cc hp iu khin trn . Tt c cc d liu mun nhp, xem u c trnh by trn biu mu ny. Hp iu khin (Control Box) : l mt i tng t trn Form, mi mt hp iu khin s tng ng vi mt mt chc nng no s c thc hin. Th tc tnh hung (Event procedure) : l mt dy cc ch th lnh v s c t ng thc hin khi xy ra tnh hung tng ng. Mt i tng c th bao gm nhiu th tc tnh hung nh vy. Phng thc (Method) : l cc lnh thao tc ln mt i tng thc hin cc x l theo yu cu no (ging nh mt chng trnh con). Mi phng thc s mang mt tn xc nh v nu mun thc hin phng thc ta vit nh sau : <tn i tng>.<tn phng thc>[tham s] V d : Form1.Print "In ln mn hnh", trong i tng l Form1, phng thc l Print v tham s l ni dung "In ln mn hnh".

III. Lp trnh trong Visual Basic


Khi lp trnh trong Visual Basic, mi ng dng u thng bt u bng biu mu (Form), y l ni hin th tt c cc thng tin lin quan n ng dng. 48

Khi thit k chng trnh ta thng qua cc bc : Gn cc hp iu khin vo biu mu. Thay i thuc tnh ca hp iu khin. Vit th tc tnh hung cho hp iu khin .

Trong phn ny ta s gii thiu tng qut v cc bc trn.

1.

Lm vic vi hp/nt iu khin

Hp iu khin l thnh phn c bn nht ca biu mu, n quyt nh hnh dng v hot ng ca ng dng. Mt ng dng c linh hot, cung cp tin nghi cho ngi dng hay khng s ph thuc phn ln vo vic s dng v khai thc cc hp iu khin. a. Cc loi hp iu khin : Trn thanh Tools Bar c cc hp iu khin thng s dng nh :

49

Pointer Label Box Frame Check Box List Box Horizontal Scroll Timer Directory List Shape Control Image Control
ngha cc hp iu khin nh sau : Tn gi Pointer Label Box Frame Check Box List Box Horizontal Scroll Timer Directory List Shape Control Image Control Picture Box Text Box Command Button Radio Button Combo Box Vertical Scroll Drive List File List Line Database Box ngha Di chuyn im t

Picture Box Text Box Command Button Radio Button Combo Box Vertical Scroll Drive List File List Line Database Box

Ghi ni dung dng vn bn. Ni dung c nh. To khung hnh ch nht cha nhiu hp iu khin Dng chn gi tr True hoc False, nhiu hn mt mc Lit k cc gi tr chn la Thanh cun ngang thay i phn mn hnh cn xem Dng by tnh hung theo thi gian. Kim tra qu hn Lit k tn cc th mc Cung cp cng c v hnh. Hin th hnh nh trong tp tin Bitmap Hin th hnh nh ha bt k. Dung lng ln hn Image Gi ni dung vn bn. C th sa i. Nt lnh chn thc hin mt lnh no i. Cho php chn mt trong nhiu gi tr. hn hp, phi hp hp vn bn v lit k Thanh cun ng Lit k tn cc a trn my Lit k tn tp tin Cho php v ng thng Cho php thao tc vi c s d liu 50

b. Thm hp iu khin ln biu mu b sung mt hp iu khin ln biu mu ta c th thc hin theo mt trong ba cch sau: Cch 1 : Click chut ti biu tng tng ng vi loi hp iu khin cn chn cho n i mu. - Drag chut ra ngoi biu mu to thnh mt hp hnh ch nht ti v tr cn t biu tng. Cch 2 : - Double Click chut ti biu tng tng ng vi loi hp iu khin cn chn. Lc ny hp iu khin s t ng c t vo gia biu mu. Drag chut thay i v tr v kch thc ca n cho ng vi yu cu. Cch 3 : - Nhn gi phm CTRL ng thi Click chut ti biu tng tng ng vi loi hp iu khin cn chn. - Drag chut ra ngoi biu mu to thnh mt hp hnh ch nht ti v tr cn t biu tng. c. Hiu chnh hp iu khin Thay i v tr : Drag chut ti hp iu khin trn biu mu. Thay i kch thc : bm chut vo hp, a du chut v gc phi bn di ri Drag chut. Xa hp iu khin : bm chut ln hp ri g phm DELETE. Sao chp : Ctrl + C chp nt vo b nh. Dn : Ctrl + V dn nt t b nh ra mn hnh. Nhm cc hp thnh mt khi : gi phm Ctrl ng thi Click chut ln lt ti cc hp cn nhm li vi nhau. 2. Thuc tnh Thuc tnh l tp hp cc m t v i tng m ngi s dng c th thay i c. Ta c th thay i cc thuc tnh khi thit k biu mu hoc trong qu trnh thc hin chng trnh. Thng thng, khi thit k biu mu ta phi khai bo cc thuc tnh c sn v t b thay i. Sau khi thc hin chng trnh nu mun thay i cc tham s m t thuc tnh th ta tip tc thc hin cc thay i . a. Khi thit k Click chut vo i tng (hp iu khiu hoc biu mu) m ta cn thay i thuc tnh. Gi ca s Properties. (nhn phm F4 hoc chn Window - Properties).

- Xut hin ca s cha cc thuc tnh nh bn. Ta thc hin thay i cc thuc tnh theo yu cu. Ca s thuc tnh :

51

b. Khi thc hin chng trnh Mun thay i thuc tnh trong qu trnh thc hin chng trnh ta vit trong chng trnh dng lnh: [OBJECT.]<PROPERTY> = <NEW VALUE> c. Cc loi thuc tnh Khi lm vic vi cc i tng ta thng s dng cc thuc tnh sau : BorderStyle : qui nh dng xut hin ca ng vin biu mu. Ta chn : 0 (none) : khng c ng vin. Biu mu khng c cc nt Minimize, Maximize v hp trnh n iu khin. Khng c x dch v thay i kch thc biu mu. 1 (Fixed Single) : ng vin l gch n. C cc nt thu phng kch thc. Khng thay i ch thc. 2 (Sizeble) : cho php thay i kch thc. 3 (Fixed Double): ng vin nt i, c nh v tr. Caption : thay i ni dung dng ch thch s hin ln ti i tng. - Control Box : qui nh s c mt hay khng ca thanh trnh n iu khin trn biu mu. Thuc tnh ny khng thay i c khi chy chng trnh. - MinButton v MaxButton : qui nh c cc nt phng to (Maximum) hoc thu nh (Minimum) trn biu mu hay khng. Chn gi tr True hoc False. - Enable : qui nh vic bt (nu gi tr True) hoc tt (gi tr False) s hot ng ca nt iu khin hoc biu mu. - Name : khai bo tn ca i tng. Tn ny ging nh tn bin, n s c s dng khi cn lm vic vi cc i tng trong cc on m chng trnh. - Font : thay i kiu ch. Ta c th s dng cc thuc tnh sau lin quan n Font ch: FontName (tn kiu ch), Font Size (kch thc ch), FontBold (ch m), FontItalic (ch 52

nging), FontStrikethru (gch xa), FontTransparent (nu True th c nn), FontUnderline (gch chn). Height : thay i chiu cao ca i tng. Width : thay i rng ca i tng Left : chuyn dch i tng theo phng ngang. Top : chuyn dch i tng theo phng ng. ScaleMode : qui nh n v o lng. 0 : cho bit n v do ngi dng n nh. 1 : tr ngm nh l Twip (1440 Twips = 1 inch). 2 : Point (72 Points = 1 inch). 3 : Pixed (n v o nh nht theo phn gii mn hnh). 4 : K t. 5 : Inch. 6 : mm 7 : cm - Icon : xc nh biu tng s c hin th vo lc chy chng trnh khi biu mu ny b thu nh. MousePointer : qui nh hnh dng ca du chut. Visible : qui nh biu mu c bt hay tt.

- WindowState : qui nh trng thi ca ca s. (0 : bnh thng), 1 (thu nh thnh biu tng) v 2 (phng to ti a). BackColor : qui nh mu nn. ForeColor : qui nh mu ch.

Ngoi ra, cn c nhiu thuc tnh khc nhng t c dng. Trong cc phn sau nu gp s gii thch thm. 3. Th tc tnh hung Mi mt i tng (biu mu hoc hp iu khin) u c th km theo mt th tc khi ta kch vo i tng ny th th tc s c thc hin. Cc th tc theo tnh hung ny tng t nh cc Valid trong FOXPRO. Cch gi th tc tnh hung : Cch 1 : Double Click chut vo i tng tng ng. Cch 2 : Click chut vo i tng sau nhn phm F7 (hoc chn View - Code). Cch vit : cc ch th c vit vo gia Sub .... End Sub Ch : - Sau khi thit k xong biu mu ta lu tr ng dung vo a bng cch chn File Save ri t tn cho biu mu. 53

Mun thc hin biu mu ta chn Run Start

IV. V d
Hy thit k v thc hin mt biu mu son tho mt on vn bn v c th thc hin cc thao tc hiu chnh, trang tr cho on vn bn . thc hin cng vic trn ta tin hnh theo trnh t sau : 1. B sung hp iu khn Khi ng Visual Basic. Trn ca s Form ta a vo ln lt cc hp iu khin nh sau : 1 hp Text Box son tho ni dung vn bn. 3 hp Check Box phc v vic trang tr. 4 hp Command Button phc v vic hiu chnh. Lc ny ta nhn c mu Form nh sau :

2. -

Thay i thuc tnh Click chut vo hp Text1, g phm F4. i cc thuc tnh : MultiLine : True. ScrollBar : Both. Name : txt

a. Hp Text

b. Cc hp Command Button - Ln lt Click chut vo cc hp Command1, Command2, Command3 v Command4 v nhn phm F4. Sau , mi ln ta thay i : Caption : Ct, Sao chp, Dn v Xa (i tn tng ng). 54

Name : cmdcut, cmdcopy, cmdpaste v cmddele c. Cc hp Check Box Ln lt Click chut vo cc hp Check 1, Check 2, Check 3 v nhn phm F4. Sau , mi ln ta thay i : Caption : In m, In nging v Gch chn (i tn tng ng). Name : chkbold, chkitalic, chkunder. d. i Font 3. Gi phm Control ng thi chick chut ti tt c cc i tng to nhm i tng. G phm F4 gi ca s Properties. i Font sang tn l Vntimes New Roman, Size 10. Vit cc th tc tnh hung Bm Double Click chut vo nn ca Form. G vo ni dung chng trnh nh sau :

a. Th tc ca Form : y l th tc cha cc ch th khi to gi tr ban u.

Private Sub Form_Load() txt = "" 'Khi to bin trng txt.FontBold = False 'Khng m txt.FontItalic = False txt.FontUnderline = False chkbold.Value = 0 'Cha chn in m chkitalic.Value = 0 chkunder.Value = 0 End Sub

Sau vo hp Ojbect chn tip General g vo ch th khai bo bin nh ClipText :


Private Sub Text1_Change() Dim ClipText As String 'Khi to bin chui End Sub tn l ClipText

b. Th tc ca cc hp Command - Ln lt Double Click chut ti cc hp Ct, Sao chp, Dn v Xa v g vo cc th tc tng ng sau :


Private Sub cmdcut_Click() ClipText = txt.SelText 'Chp khi vo bin tm ClipText txt.SelText = "" 'Xa khi khi vn bn txt.SetFocus 'Tham chiu n bin TXT End Sub Private Sub cmdcopy_Click() ClipText = txt.SelText txt.SetFocus End Sub Private Sub cmdpaste_Click() txt.SelText = ClipText 'Gn khi bi gi tr bin ClipText txt.SetFocus End Sub

55

Private Sub cmddel_Click() txt.Text = "" txt.SetFocus End Sub

c. Th tc ca cc hp Check Box - Ln lt Double Click chut ti cc hp In m, In nging, Gch chn v g vo cc th tc sau :


Private Sub chkbold_Click() txt.FontBold = Not (txt.FontBold) 'Ngc li vi gi tr c txt.SetFocus End Sub Private Sub chkitalic_Click() txt.FontItalic = Not (txt.FontItalic) txt.SetFocus End Sub Private Sub chkunder_Click() txt.FontUnderline = Not (txt.FontUnderline) txt.SetFocus End Sub

4. -

Ghi v thc hin trng trnh Chn File - Save lu tr biu mu vo a vi tn l VANBAN Chn Run - Start bt u thc hin chng trnh.

Ch : nu mun lu tr v xem ni dung chng trnh di dng vn bn th ta thc hin nh sau : a. Lu tr Chn File. Chn File Save As Chn kiu tp tin l TEXT, t tn l Vanban.TXT. Vo mt chng trnh son tho vn bn bt k. Gi vn bn dng TEXT c tn Vanban.TXT. Lc ny ta c ni dung chng trnh nh sau :
VERSION 4.00 Begin VB.Form Form1 Caption = ClientHeight = ClientLeft = ClientTop = ClientWidth = Height = Left = LinkTopic = ScaleHeight = ScaleWidth = "Form1" 3390 1140 1665 6495 3870 1080 "Form1" 3390 6495

b. Xem m lnh

56

Top = 1245 Width = 6615 Begin VB.Frame Frame1 Caption = "Frame1" BeginProperty Font name = "VNtimes new roman" charset = 1 weight = 400 size = 9.75 underline = 0 'False italic = 0 'False strikethrough = 0 'False EndProperty Height = 2055 Left = 4680 TabIndex = 5 Top = 120 Width = 1695 Begin VB.CheckBox chkunder Caption = "Gch chn" BeginProperty Font name = "VNtimes new roman" charset = 1 weight = 400 size = 9.75 underline = 0 'False italic = 0 'False strikethrough = 0 'False EndProperty Height = 375 Left = 240 TabIndex = 8 Top = 1560 Width = 1215 End Begin VB.CheckBox chkitalic Caption = "In nging" BeginProperty Font name = "VNtimes new roman" charset = 1 weight = 400 size = 9.75 underline = 0 'False italic = 0 'False strikethrough = 0 'False EndProperty Height = 375 Left = 240 TabIndex = 7 Top = 960 Width = 1215 End Begin VB.CheckBox chkbold

57

End End Begin VB.CommandButton cmddel Caption = "Xa" BeginProperty Font name = "VNtimes new roman" charset = 1 weight = 400 size = 9.75 underline = 0 'False italic = 0 'False strikethrough = 0 'False EndProperty Height = 495 Left = 4920 TabIndex = 4 Top = 2520 Width = 1215 End Begin VB.CommandButton cmdpaste Caption = "Dn" BeginProperty Font name = "VNtimes new roman" charset = 1 weight = 400 size = 9.75 underline = 0 'False italic = 0 'False strikethrough = 0 'False EndProperty Height = 495 Left = 3480 TabIndex = 3 Top = 2520 Width = 1215 End Begin VB.CommandButton cmdcopy Caption = "Sao chp"

Caption = BeginProperty Font name charset weight size underline italic strikethrough EndProperty Height = Left = TabIndex = Top = Width =

"In m" = = = = = = = "VNtimes new roman" 1 400 9.75 0 'False 0 'False 0 'False 375 240 6 360 1215

58

End Attribute VB_Name = "Form1"

BeginProperty Font name = "VNtimes new roman" charset = 1 weight = 400 size = 9.75 underline = 0 'False italic = 0 'False strikethrough = 0 'False EndProperty Height = 495 Left = 1920 TabIndex = 2 Top = 2520 Width = 1215 End Begin VB.CommandButton cmdcut Caption = "Ct" BeginProperty Font name = "VNtimes new roman" charset = 1 weight = 400 size = 9.75 underline = 0 'False italic = 0 'False strikethrough = 0 'False EndProperty Height = 495 Left = 360 TabIndex = 1 Top = 2520 Width = 1095 End Begin VB.TextBox txt BeginProperty Font name = "VNtimes new roman" charset = 1 weight = 400 size = 9.75 underline = 0 'False italic = 0 'False strikethrough = 0 'False EndProperty Height = 2055 Left = 360 MultiLine = -1 'True ScrollBars = 3 'Both TabIndex = 0 Text = "THU1.frx":0000 Top = 120 Width = 3735 End

59

Attribute VB_Creatable = False Attribute VB_Exposed = False Private Sub chkbold_Click() txt.FontBold = Not (txt.FontBold) txt.SetFocus End Sub Private Sub chkitalic_Click() txt.FontItalic = Not (txt.FontItalic) txt.SetFocus End Sub Private Sub chkunder_Click() txt.FontUnderline = Not (txt.FontUnderline) txt.SetFocus End Sub Private Sub cmdcopy_Click() ClipText = txt.SelText txt.SetFocus End Sub Private Sub cmdcut_Click() ClipText = txt.SelText 'Chp khi ln b nh txt.SelText = "" txt.SetFocus End Sub Private Sub cmddel_Click() txt.Text = "" txt.SetFocus End Sub Private Sub cmdpaste_Click() txt.SelText = ClipText txt.SetFocus End Sub Private Sub Form_Load() Dim ClipText As String txt = "" txt.FontBold = False txt.FontItalic = False txt.FontUnderline = False chkbold.Value = 0 chkitalic.Value = 0 chkunder.Value = 0 End Sub Private Sub Text1_Change() Dim ClipText As String End Sub

60

V.
1.

Bin nh
Khi nim

Trong Visual Basic ta c th lu tr cc gi tr phc v cho qu trnh x l d liu i bn hnh thc l : bin, hng, mng v bn ghi. Bin v hng ti mi thi im ch lu tr c mt gi tr cn mng v bn ghi th lu tr c nhiu gi tr cng lc. Tn cc i lng do ngi s dng t qui nh nhng phi tha mn : Khng di qu 40 k t. K t u kin l ch ci, cc k t i sau c th l s, du _ (gch di).

- K t cui cng c th l mt trong cc hu t cho bit kiu d liu nh : %, &, !, #, @ v #. 2. a. Tn bin khng c trng vi cc t dnh ring (Reserved word). Visual Basic khng phn bit k t ch in vi ch thng. Khai bo bin Cch 1 DIM <Tn bin> AS <Tn kiu d liu> Trong tn kiu d liu c chn t mt trong cc kiu sau : Integer (2 byte): l s nguyn bnh thng thuc [-32768, 32767]. Long (4 byte): s nguyn di thuc [-2147483648, 2147483647].

Ta c th nh ngha bin bng mt trong cc cch sau :

- Single (4 byte): s thc chnh xc n thuc [-3.4E+38, -3.4E+38]. Gi li 7 ch s sau du thp phn. - Double (8 byte): s thc chnh xc kp thuc [-1.8E+308, 1.8E+308]. Gi li 16 ch s sau du thp phn - Currency (8 byte) : lu tr cc gi tr l tin t. Cha c ti a 15 ch s bn tri v 4 ch s bn phi du thp phn. String :cha chui k t c chiu dai thay i t 0 n 65535 k t. - String*num : cha chui k t c chiu dai nh trc. Khi khai bo phi n nh trc di t 0 n 32767 k t. Varian : lu tr ng thi hai thng tin l : gi tr v kiu d liu. Phm vi : cc ch th DIM c th xut hin cp n th, cp biu mu hoc cp th tc. Nu ta khai bo DIM cp no th cc bin ch c hiu lc trong cp . V d : DIM sotien AS long DIM luong AS Currency DIM hoten AS String

61

b. Cch 2 DIM <Tn bin><k t hu t> Ta c th khng cn dng AS <kiu d liu> m ghi trc tip k hiu hu t khai bo kiu d liu vo sau tn bin nh kiu. Ta c cc k t hu t (Suffix Character) nh sau : % : Integer. & : Long. ! : Single. # : Double. @ : Currency. $ : String. DIM hoten$ DIM sotien@ DIM luong% c. Khai bo bin ton cc GLOBAL <Tn bin> AS <Tn kiu d liu> Trong trng hp bin s c hiu lc trn tt c cc n th ca chng trnh. Lnh ny ch c s dng phn declarations ca n th. V d : GLOBAL hoten AS String Lc ny bin hoten s c hiu lc trn ton chng trnh. d. Khai bo nhiu bin DefType <min k t> Trong Visual Basic nu mt bin c s dng m khng khai bo th Visual Basic ngm hiu l bin Varian. Vi ch th DefType ta c th chuyn bin Varian thnh mt kiu d liu khc. Visual Basic chp nhn cc ch th DefType sau : DefInt : Integer. DefLng : Long. DefSng : Single. DefDbl : Double. DefCur : Currency. DefStr : String. DefVar : Varian. - Min k t : cho bit khong k t. T y v sau nhng bin no c k t bt u thuc min k t trn s c kiu d liu nh trong DefType qui nh. 62

V d :

V d : DefInt S T y v sau cc bin nh : Sotien, Soluong, S... u c kiu d liu l Integer v c k t m u l S Tuy nhin ch th ny khng nh hng n cc bin c khai bo bi ch th DIM hoc mang cc hu t qui nh kiu d liu. 3. Khai bo hng Hng (Constant) l mt i lng c gi tr khng thay i trong sut thi gian thc hin chng trnh. Cch khai bo : CONST <Tn hng> = <Biu thc>, <Tn hng 2> = <Biu thc 2>, ... Tn hng cng theo qui c ging nh tn bin. Ta c th gn k t hu t nh kiu (%, !, &, #, $, @) cho hng. Tuy nhin, sau ny khi dng tn hng trong chng trnh th khng c vit hu t ny. V d : CONST diemgioi% = 7 Sau ny trong chng trnh ta ch vit : IF dtb% >= diemgioi THEN MsgBox "Sinh vin ny xp loi Gii" Phm vi hot ng ca hng ging nh ca bin. Nu mun khai bo hng c tc dng ton c th vit : GLOBAL CONST <Tn hng> = <Biu thc> 4. Mng Mng (Array) l i lng c th lu tr c nhiu gi tr khc nhau ti cng mt thi im thng qua cc phn t ca n. a. Khai bo mng DIM <Tn mng>(phn t) AS <Kiu d liu> hoc DIM <Tn mng><Hu t kiu>(phn t) Tn mng do ngi s dng t qui nh. Ging nh cch khai bo tn bin. Phn t : khai bo s lng cc phn t trong mng. C nhiu cch : S lng ti a. Trong trng hp ny phn t bt u l khng. V d : DIM a(10) AS Integer hoc DIM a%(10) Lc ny s c cc phn t l a(0), a(1), .... a(10) v mi phn t cha mt s nguyn. Phn t bt u n phn t cui. Qui nh r cc cc phn t u n cui. V d : DIM A(5 TO 10) AS Single hoc DIM A!(5 TO 10) Lc ny c cc phn t l a(5), a(6), ..., a(10) v mi phn t l s thc chnh xc n.. Mng nhiu chiu. Gia cc chiu ngn cch bi du , (phy). V d : DIM a(10,20) AS Integer hoc DIM a%(10,20) 63

Lc ny s c cc phn t l a(0,0), a(0,1), .... a(10,20) v mi phn t cha mt s nguyn. DIM A(1 TO 5, 1 TO 7) AS Single Lc ny s c cc phn t l a(1,1), a(1,2), .... a(5,7) v mi phn t cha mt s thc. Phm vi hot ng ca bin mng cng ging nh cc bin bnh thng khc. - Khai bo bng GLOBAL: lc ny bin s c tc dng trn ton chng trnh. Khai bo ny phi t trong phn khai bo ca n th ch khng t trong th tc hoc biu mu. b. S dng mng Bin mng c s dng trong chng trnh ging nh cc bin thng thng khc, tuy nhin phi ch r s hiu phn t ca n. V d : khai bo bin mng thng v lu tr s th t ca thng trong nm. Sau in cc tn thng ra mn hnh.
DIM FOR thang(1 TO 12) AS Integer I = 1 TO 12 Thang(I) = I NEXT I FOR I = 1 TO 12 Print "Thang :" + Str(thang(I)) NEXT I

5.

Khai bo bn ghi

Bn ghi l kiu d liu c bit bao gm nhiu gi tr thuc nhiu kiu d liu khc nhau. Bin bn ghi c s dng nhiu gii quyt cc bi ton trong qun l s liu. a. Khai bo Khai bo bn ghi bt buc phi c t phn on Declaration ca n th chng trnh m khng th t cp biu mu hoc th tc. Bin bn ghi ng nhin phi l bin ton cc. Cch khai bo :
TYPE <Tn bn ghi> <Tn trng 1> AS <Tn kiu d liu 1> <Tn trng 2> AS <Tn kiu d liu 2> .......................... <Tn trng n> AS <Tn kiu d liu n> TYPE <Tn bin> AS <Tn bn ghi>

END DIM

Tn bn ghi do ngi s dng t qui nh theo qui tc ca tn bin. b. S dng bin bn ghi Cc bin bn ghi c s dng nh cc bin bnh thng khc nhng phi ch r tn trng pha sau v ngn cch vi tn bin bi du . (chm). Cch vit : <Tn bin bn ghi> . <Tn trng> 6. Bin i (convert) t loi d liu ny qua loi d liu khc Nhiu lc ta cn phi convert data type ca mt variable t loi ny qua loi khc, VB6 cho ta mt s cc hm di y. Xin lu rng khi gi cc hm ny, nu chng ta a mt data value bt hp l th c th b li. 64

Tn hm CBool () CByte () CDate () CDbl () CInt () CSng () CStr ()

Chc nng i parameter ra True hay False. Nu Integer khc 0 th c i thnh True i parameter ra mt con s t 0 n 255 nu c th c, nu khng th l 0. i parameter ra Date i parameter ra Double precision floating point number i parameter ra Integer i parameter ra Single precision floating point number i parameter ra String

Ngoi cc hm ni trn chng ta cng c th dng hm Val chuyn i mt String ra Number. Lu l khi hm i chui sang s gp mt k t no khng phi l ch s hay du chm thp phn th n khng x l tip na. Do nu Input String l "$25.50" th gi tr s s l 0 v $ khng phi l mt ch s. Nu Input String l "62.4B" th gi tr tr v l 62.4. CDbl l hm dng convert mt String ra s an ton nht. Input String c th cha cc du , v . (th d: 1,234,567.89) ty theo ni chng ta trn th gii (th d nh u Chu hay M). CSng cng lm vic ging nh CDbl nhng nu con s ln hn 1 triu n c th b bug. Li hay gp ca CSng l nu Input String khng c g c (tc l InputString="") th hm CSng cho chng ta Type Mismatch Error. Do khc phc khuyt im ny chng ta c th vit cho mnh mt hm tm t tn l CSingle dng th cho CSng :
Function CSingle(strNumber) As Single If Trim(strNumber) = "" Then CSingle = 0# Else CSingle = CSng(strNumber) End If End Function

65

CHNG 4. VIT M CHNG TRNH


I. Cc cu trc iu khin
Tng t nh cc ngn ng lp trnh khc, trong Visual Basic ta c th s dng cc cu trc iu khin trong chng trnh c th chn la cng vic thc hin hoc t ng lp li nhm ch th nhiu ln. 1. Cu trc chn IF <iu kin> THEN <Ch th> Khi gp cu trc ny nu iu kin c gi tr True th thc hin ch th nu iu kin c gi tr False th b qua ch th . V d :
IF dtb > 5 THEN Print "Bn im"

a. Cu trc

Trong trng hp ny ch c duy nht mt ch th. b. Cu trc IF <iu kin> THEN <Ch th 1> ELSE <Ch th 2> Khi gp cu trc ny nu iu kin c gi tr True th thc hin ch th 1 nu iu kin c gi tr False th thc hin ch th 2. V d :
IF dtb > 5 THEN Print "Bn im" ELSE Print "Bn thiu im"

Ch : - Nu mun sau THEN hoc ELSE c nhiu ch th cn thc hin th phi vit xung dng v cui cu trc ny phi c END IF. Cch vit :
IF <iu kin> THEN <Ch th 1> .................... <Ch th n> <Ch th 1'> .................... <Ch th n'> IF

ELSE

END

c. Cu trc SELECT CASE <Biu thc>


Select Case <biu thc> Case <Lit k biu thc 1> <Khi ch th 1>

66

<Lit k biu thc 2> <Khi ch th 2> ......... [Case Else <Khi ch th n>] End Select

Case

Trong : - Biu thc : l mt thc chui hoc s. Nu gi tr ca biu thc y trng vi gi tr ca cc biu thc c lit k no bn di th khi ch th tng ng c thc hin. - Lit k biu thc I : l biu thc s c em so snh vi biu thc u. Trong phn ny biu thc lit k c th c vit di cc dng sau : Biu thc : s hoc ch. Biu thc 1 TO Biu thc 2 : ch ra on gi tr nm gia biu thc 1 v 2. IS <php so snh> <biu thc> : ch ra php so snh v gi tr so snh. - Khi ch th I : l cc ch th cn thc hin trong trng hp gi tr ca biu thc th I trng vi gi tr ca biu thc u. y c th gm nhiu ch th c vit trn nhiu dng. V d : vit chng trnh nhp vo tui mt ngi v cho bit ngi thuc la tui no.
Sub Form_Click() Dim Cauhoi, Tuoi 'Khai bo bin Cauhoi v Tuoi Cauhoi = "Bn bao nhiu tui :" Tuoi = InputBox(Cauhoi) ' Nhp tui vo bin tuoi Select Case Tuoi Case 1 TO 12 MsgBox "Bn tui Nhi ng" 'In ra dng thng bo Case 13 TO 18 MsgBox "Bn tui Thiu nin" Case 18 TO 25 MsgBox "Bn tui Thanh nin" Case 25 TO 60 MsgBox "Bn l Ngi ln" Case IS > 60 MsgBox "Bn tui V hu" Case Else MsgBox "Bn khng phi con ngi" End Select End Sub

2.

Cu trc lp FOR <Bin m> = <Gi tr u> TO <Gi tr cui> [STEP n] [Khi ch th 1] [Exit For] [Khi ch th 2] NEXT <bin m> 67

a. Cu trc

Bin m : l tn bin dng kim tra s ln lp. Gi tr u : l gi tr khi gn ln u tin cho bin m khi thc hin vng lp.

- Gi tr cui : l gi tr cui cng ca bin m. Khi bin m t n gi tr ny th vng lp thc hin ln cui v dng qu trnh lp. - STEP n : ch nh bc nhy n thc hin thay i gi tr ca bin m sau mi ln lp. Khi ch th : lit k cc ch th cn thc hin trong mi ln lp. Exit For : nu trong vng lp m gp ch th ny th s ngng vng lp.

Vng lp trn cho php t ng thc hin cc ch th vi s ln lp xc nh trc. V d : vit on lnh in ra cc s nguyn t 1 n 10.
FOR so! = 1 Print so! NEXT so! FOR so! = 0 Print so! NEXT so! TO 10 'bin s l Single

V d : vit on lnh in ra cc s vi bc nhy 0.25 v t 0 n 10.


TO 10 STEP 0.25 'bin s l Single

b. Cu trc WHILE <iu kin> [Khi ch th] Wend - iu kin : qui nh iu kin thc hin vng lp. Nu iu kin c gi tr True th thc hin khi ch th, gp Wend s quay tr li kim tra iu kin. Qu trnh trn kt thc khi iu kin c gi tr False. Khi ch th : cc ch th cn thc hin trong vng lp.
So! = 1 While so! <= 10 Print so! So! = so! + 1 Wend

V d : vit on lnh in ra cc s nguyn t 1 n 10.

c. Cu trc DO [WHILE | UNTIL <iu kin>] [Khi ch th] [Exit Do] [Khi ch th] LOOP [WHILE | UNTIL <iu kin>] iu kin : qui nh iu kin thc hin vng lp.

68

- Nu dng WHILE th iu kin c gi tr True th thc hin khi ch th, nu False kt thc vng lp. - Nu dng UNTIL th iu kin c gi tr False th thc hin khi ch th, nu True kt thc vng lp. Ta c th t iu kin u hoc cui vng lp u c. Khi ch th : cc ch th cn thc hin trong vng lp. Exit Do : cho php dng vng lp m khng cn qua kim tra iu kin.
So! = 1 Do While so! <= 10 Print so! So! = so! + 1 Loop

V d : vit on lnh in ra cc s nguyn t 1 n 10.

Hoc :
So! = 1 Do Print so! So! = so! + 1 Loop While so! <= 10

Hoc :
So! = 1 Do Print so! So! = so! + 1 Loop Until so! > 10

3.

Nhn

Trong Visual Basic ta c th chuyn n thc hin mt on chng trnh hoc mt dng lnh mi bng cch dng nhn hoc s th t dng lnh. a. Khi nim L mt on ch th lnh bt k trong chng trnh c gn mt tn xc nh. Khi cn thc hin on ch th ny ta ch vic nhy v nhn . Mi nhn c dng trong biu mu hoc n th phi l duy nht. Khng th s dng hai nhn trng tn trong mt biu mu, th tc, hp iu khin... b. Cch vit Tn_nhn: <Nhm ch th> c. Cch gi s dng Cch 1 : s dng lnh GOTO <tn_nhn> Cch 2 : s dng lnh ON <biu thc s> GOTO <lit l cc tn nhn> Trong trng hp ny biu thc s c gi tr t 1 n 255 v tn nhn c s th t tng ng vi biu thc s s c thc hin. V d : ON stt GOTO nhan1, nhan2, nhan3 69

Nu stt c gi tr 1 th nhan1 c thc hin, stt l 2 th nhan2 thc hin v stt l 3 th nhan3 c thc hin. V d :
Sub Form_Click() Print "Gio trnh" GOTO Nhan1 Print "Khng in" Nhan1: Print "Lp trnh trc quan" End Sub

Lc ny kt qu trn mn hnh ta nhn c : Gio trnh Lp trnh trc quan Cn dng lnh Print "Khng in" s khng thc hin. 4. S th t dng lnh L phng php nh s trc mi dng lnh v khi cn ta c nhy n v tr ny bt c lc no. Mi s c dng trong biu mu hoc n th phi l duy nht. Khng th s dng hai s trng gi tr nh s dng lnh trong mt biu mu, th tc, hp iu khin... Cc s dng nh s dng lnh l ty khng bt buc phi nh s theo th t tng hay gim dn m ngu nhin, khng bt buc phi nh s tt c cc ch th lnh m thch nh s vo dng lnh no cng c. Cch gi : GOTO <gi tr s> Khi thc hin lnh ny Visual Basic s chuyn n dng lnh c nh s tnmg ng. V d :
100 101 57 GOTO MsgBox MsgBox MsgBox 101 "Dng lnh mang s 100" "Dng lnh mang s 101" "Dng lnh mang s 57"

II.

Method

Method l cc chng trnh c xy dng sn phc v cho vic thc hin cc thao tc thng gp. Method c tc dng gn ging nh lnh, th tc hoc hm c xy dng sn trong cc ngn ng lp trnh c cu trc. Thng thng Method ch tc dng ln mt lp cc i tng. Sau y ta s xt mt s Method thng c s dng. 1. Circle Method Object : tn ca biu mu hoc khung hnh m ta cn v hnh trn trn . C php : [Object].Circle [Step] (X,Y), Radius [, [Color], [Start], [End], [Aspec]] - Step : cho bit y l ta tng i so vi v tr hin hnh do hai thuc tnh CurrentX v CurrentY cung cp. 70

X, Y : ch nh ta tm ca hnh trn, ellipse hoc cung trn. Radius : ch nh bn knh. Color : ch nh mu sc. Mu tng ng vi gi tr l mt s nguyn.

- Start, End : tr s tnh theo Radian, cho bit im xut pht v im kt thc khi v mt cung trn hoc Ellipse. Aspect : tr s cho bit gc xoay mt phng cha hnh trn to ra hnh Ellipse. Tc dng : cho php to ra mt hnh trn, cung trn hoc hnh Ellipse theo yu cu ngi s dng. V d 1: Form.Circle (1000, 2000), 500 V hnh trn c tm l im (1000,2000) v bn knh l 500. (cc n v tnh theo Fixed). V d 2 : v mt dy cc hnh trn ng tm vi mu sc ty .
Private Sub Hinhtron_Click() Dim CX, CY, Radius ' Declare variable. ScaleMode = 3 ' Set scale to pixels. CX = ScaleWidth / 2 ' Set X position. CY = ScaleHeight / 2 ' Set Y position. If CX > CY Then Limit = CY Else Limit = CX For Radius = 0 To Limit ' Set radius. Circle (CX, CY), Radius, RGB(Rnd * 255, Rnd * 255, Rnd * 255) Next Radius End Sub

2. -

Line Method Object : tn ca biu mu hoc khung hnh m ta cn v dng thng trn . X1, Y1 : ch nh ta im xut pht. X2, Y2 : ch nh ta im kt thc. Color : ch nh mu sc. Mu tng ng vi gi tr l mt s nguyn.

C php : [Object].Line [Step] (X1, Y1) - [Step] (X2, Y2)[,Color][,BF]

- Step : cho bit y l ta tng i so vi v tr hin hnh do hai thuc tnh CurrentX v CurrentY cung cp. - B (Box) : v mt khung hnh ch nht. Lc ny im xut pht v im kt thc l hai gc hnh ch nht. F (Fill) : khung hnh ch nht s c t mu. Tc dng : cho php to ra mt on thng hoc khung hnh ch nht theo yu cu ngi s dng. V d : v cc hnh v cc ng thng vi nhiu mu sc v hnh dng khc nhau.
Private Sub duongthang_Click() Dim CX, CY, F, F1, F2, I ' Declare variables ScaleMode = 3 ' Set ScaleMode to pixels. CX = ScaleWidth / 2 ' Get horizontal center. CY = ScaleHeight / 2 ' Get vertical center.

71

DrawWidth = 8 ' Set DrawWidth. For I = 50 To 0 Step -2 F = I / 50 ' Perform interim F1 = 1 - F: F2 = 1 + F ' calculations. ForeColor = QBColor(I Mod 15) ' Set foreground color. Line (CX * F1, CY * F1)-(CX * F2, CY * F2), , BF Next I DoEvents ' Yield for other processing. If CY > CX Then ' Set DrawWidth. DrawWidth = ScaleWidth / 25 Else DrawWidth = ScaleHeight / 25 End If For I = 0 To 50 Step 2 ' Set up loop. F = I / 50 ' Perform interim F1 = 1 - F: F2 = 1 + F ' calculations. Line (CX * F1, CY)-(CX, CY * F1) ' Draw upper-left. Line -(CX * F2, CY) ' Draw upper-right. Line -(CX, CY * F2) ' Draw lower-right. Line -(CX * F1, CY) ' Draw lower-left. ForeColor = QBColor(I Mod 15) ' Change color each time. Next I DoEvents ' Yield for other processing. End Sub

3.

Cls Method [object.]Cls

C php : V d :

Tc dng : xa mn hnh ca Form.


Private Sub Xoa_Click() Dim Msg ' Declare variable. AutoRedraw = -1 ' Turn on AutoRedraw. ForeColor = QBColor(15) ' Set foreground to white. BackColor = QBColor(1) ' Set background to blue. FillStyle = 7 ' Set diagonal crosshatch. Line (0, 0)-(ScaleWidth, ScaleHeight), , B ' Put box on form. Msg = "This is information printed on the form background." CurrentX = ScaleWidth / 2 - TextWidth(Msg) / 2 ' Set X position. CurrentY = 2 * TextHeight(Msg) ' Set Y position. Print Msg ' Print message to form. Msg = "Choose OK to clear the information and background " Msg = Msg & "pattern just displayed on the form." MsgBox Msg ' Display message. Cls ' Clear form background. End Sub

4.

Hide Method [Object.]Hide

C php :

Tc dng : che ca s Form. V d : che v lm xut hin li ca s Form ang lm vic.. 72

Private Sub Chehien_Click() Dim Msg ' Declare variable. Hide ' Hide form. Msg = "Choose OK to make the form reappear." MsgBox Msg ' Display message. Show ' Show form again. End Sub

5.

Show Method [Object.]Show

C php :

Tc dng : lm xut hin ca s Form.


Private Sub Chehien_Click() Dim Msg ' Declare variable. Hide ' Hide form. Msg = "Choose OK to make the form reappear." MsgBox Msg ' Display message. Show ' Show form again. End Sub

6.

Item Method [Object.]Item(Index)

C php :

Tc dng : sp xp li cc thnh vin trong Collection theo th t ca kha ch nh trong Index. V d :


Dim Dim Set Set SmithBillBD SmithAdamBD SmithBillBD SmithAdamBD As Object As Object = Birthdays.Item("SmithBill") = Birthdays("SmithAdam")

7. -

Move Method [Object.]Move Left [, Top][, Width][, Height] Object: tn Object cn chuyn dch. Left : qui nh gi tr cn dch chuyn sang bn tri. Top : qui nh dch chuyn ln pha trn. Width : qui nh rng mi ca i tng. Height : qui nh cao mi ca i tng.

C php :

Tc dng : cho php di chuyn v iu chnh kch thc ca i tng. V d :


Private Sub dichuyen_Click() Dim Inch, Msg ' Declare variables. Msg = "Choose OK to resize and move this form by " Msg = Msg & "changing the value of properties." MsgBox Msg ' Display message. Inch = 1440 ' Set inch in twips. Width = 4 * Inch ' Set width. Height = 2 * Inch ' Set height.

73

Left = 0 ' Set left to origin. Top = 0 ' Set top to origin. Msg = "Now choose OK to resize and move this form " Msg = Msg & "using the Move method." MsgBox Msg ' Display message.
Move Screen.Width-2*Inch, Screen.Height-Inch, 2*Inch, Inch

End Sub

8. -

Point Method [Object.]Point (X, Y) X : Honh ca im cn v. Y : Tung ca im cn v.

C php :

Tc dng : tr v mt im c toa xc nh. V d : t mu bng cc du chm.


Private Sub vediem_Click() Dim LeftColor, MidColor, Msg, RightColor 'Declare variables. AutoRedraw = -1 ' Turn on AutoRedraw. Height = 3 * 1440 ' Set height to 3 inches. Width = 5 * 1440 ' Set width to 5 inches. BackColor = QBColor(1) ' Set background to blue. ForeColor = QBColor(4) ' Set foreground to red. Line (0, 0)-(Width / 3, Height), , BF ' Red box. ForeColor = QBColor(15) ' Set foreground to white. Line (Width / 3, 0)-((Width / 3) * 2, Height), , BF LeftColor = Point(0, 0) ' Find color of left box, MidColor = Point(Width / 2, Height / 2) ' middle box, and RightColor = Point(Width, Height) ' right box. Msg = "The color number for the red box on the left side of " Msg = Msg & "the form is " & LeftColor & ". The " Msg = Msg & "color of the white box in the center is " Msg = Msg & MidColor & ". The color of the blue " Msg = Msg & "box on the right is " & RightColor & "." MsgBox Msg ' Display message. End Sub

9.

Print Method [Object.]Print OutputList

C php :

Tc dng : cho php in gi tr cc biu thc trong OutputList ra i tng. OutputList l mt danh sch cc biu thc cn in. Object l tn i tng m ta cn in ln . Nu mun in my in th tn Object l Printer. V d :
Private Sub Command1_Click() Dim MyVar MyVar = "Chc cc bn lp trnh tht tt vi Visual Basic." Print MyVar End Sub

10. PrintForm Method C php : [Object.]PrintForm 74

Tc dng : cho php in tt c cc hnh nh ca biu mu ra giy. Nu khng ch r tn Form th Form ang lm vic s c in. Object y l tn Form cn in. V d
Private Sub Command1_Click() Dim Msg ' Declare variable. On Error GoTo ErrorHandler ' Set up error handler. PrintForm ' Print form. Exit Sub ErrorHandler: Msg = "The form can't be printed." MsgBox Msg ' Display message. Resume Next End Sub

11. PSet Method C php : [Object.]Pset [Step] (X, Y)[, Color] - Object : An object expression that evaluates to an object in the Applies To list. If object is omitted, the Form with the focus is assumed to be object. - Step : A keyword specifying that the coordinates are relative to the current graphics position given by the CurrentX and CurrentY properties. - (X, Y) : Single-precision values indicating the horizontal (x-axis) and vertical (y-axis) coordinates of the point to set. Color: Long integer value indicating the RGB color specified for point. Tc dng : tng t nh Point Method. V d : v cc chm im vi mu sc v v tr ngu nhin trn ca s Form.
Private Sub Form_Click () Dim CX, CY, Msg, XPos, YPos ' Declare variables. ScaleMode = 3 ' Set ScaleMode to pixels. DrawWidth = 5 ' Set DrawWidth. ForeColor = QBColor(4) ' Set background to red. FontSize = 24 ' Set point size. CX = ScaleWidth / 2 ' Get horizontal center. CY = ScaleHeight / 2 ' Get vertical center. Cls ' Clear form. Msg = "Chc mng nm mi!" CurrentX = CX - TextWidth(Msg) / 2 ' Horizontal position. CurrentY = CY - TextHeight(Msg) ' Vertical position. Print Msg ' Print message. Do XPos = Rnd * ScaleWidth ' Get horizontal position. YPos = Rnd * ScaleHeight ' Get vertical position. PSet (XPos, YPos), QBColor(Rnd * 15) ' Draw confetti. DoEvents ' Yield to other Loop ' processing. End Sub

12. Refresh Method C php : [Object.]Refresh 75

Tc dng : cho php "lm ti'" li i tng, ngha l n cho php v li hnh nh ca Object. V d :
Private Sub Form_Click () Dim FNMA, I, Msg ' Declare variables. File1.Pattern = "TestFile.*" ' Set file pattern. For I = 1 To 8 ' Do eight times. FNMA = "TESTFILE." & I Open FNMA For Output As FreeFile ' Create empty file. File1.Refresh ' Refresh file list box. Close ' Close file. Next I Msg = "Choose OK to remove the created test files." MsgBox Msg ' Display message. Kill "TESTFILE.*" ' Remove test files. File1.Refresh ' Update file list box. End Sub

13. Scale Method C php : [Object.]Scale [(X1, Y1) - (X2, Y2)] Object : tn ca i tng cn nh li h thng ta . (X1, Y1) : ta gc trn bn tri. (X2, Y2) : ta gc phi bn di.

Tc dng : qui nh li h thng ta theo yu cu ngi s dng. Nu khng c (X1, Y1) v (X2, Y2) th tr h thng ta v gi tr ngm nh. V d :
Private Sub Tile_Click() Dim I, OldFontSize ' Declare variables. Width = 8640: Height = 5760 ' Set form size in twips. Move 100, 100 ' Move form origin. AutoRedraw = -1 ' Turn on AutoRedraw. OldFontSize = FontSize ' Save old font size. BackColor = QBColor(7) ' Set background to gray. Scale (0, 110)-(130, 0) ' Set custom coordinate system. For I = 100 To 10 Step -10 Line (0, I)-(2, I) ' Draw scale marks every 10 units. CurrentY = CurrentY + 1.5 ' Move cursor position. Print I ' Print scale mark value on left. Line (ScaleWidth - 2, I)-(ScaleWidth, I) CurrentY = CurrentY + 1.5 ' Move cursor position. CurrentX = ScaleWidth - 9 Print I ' Print scale mark value on right. Next I ' Draw bar chart. Line (10, 0)-(20, 45), RGB(0, 0, 255), BF ' First blue bar. Line (20, 0)-(30, 55), RGB(255, 0, 0), BF ' First red bar. Line (40, 0)-(50, 40), RGB(0, 0, 255), BF Line (50, 0)-(60, 25), RGB(255, 0, 0), BF Line (70, 0)-(80, 35), RGB(0, 0, 255), BF

76

Line (80, 0)-(90, 60), RGB(255, 0, 0), BF Line (100, 0)-(110, 75), RGB(0, 0, 255), BF Line (110, 0)-(120, 90), RGB(255, 0, 0), BF CurrentX = 18: CurrentY = 100 ' Move cursor position. FontSize = 14 ' Enlarge font for title. Print "Widget Quarterly Sales" ' Print title. FontSize = OldFontSize ' Restore font size. CurrentX = 27: CurrentY = 93 ' Move cursor position. Print "Planned Vs. Actual" ' Print subtitle. Line (29, 86)-(34, 88), RGB(0, 0, 255), BF ' Print legend. Line (43, 86)-(49, 88), RGB(255, 0, 0), BF Scale End Sub

Ch : ta c th thay i n v o trong Visual Basic bng cch thay i tr s ca ScaleMode trong b thuc tnh Properties. 14. SetFocus Method C php : [Object.]SetFocus Tc dng : cho php tham chiu n Object c tn c ch nh thc hin cc thay i trn nu c. V d : Vehinh.SetFocus 15. TextHeight v TextWidth Methods C php : [Object.]TextHeight (String) [Object.]TextWidth (String) - Object : tn ca i tng c n nh kch c Font ch m ta da vo tnh chiu cao v chiu rng ca on vn bn cn th hin. String : ni dung chui k t m Method s tnh ton chiu cao v chiu rng. Tc dng : tnh ton v tr v kt qu l chiu cao v chiu rng ca String. V d :
Private Sub Inchu_Click() Dim HalfWidth, HalfHeight, Msg ' Declare variable. AutoRedraw = -1 ' Turn on AutoRedraw. BackColor = QBColor(4) ' Set background color. ForeColor = QBColor(15) ' Set foreground color. Msg = "Visual Basic" ' Create message. FontSize = 48 ' Set font size. HalfWidth = TextWidth(Msg) / 2 ' Calculate one-half width. HalfHeight = TextHeight(Msg) / 2 ' Calculate one-half height. CurrentX = ScaleWidth / 2 - HalfWidth ' Set X. CurrentY = ScaleHeight / 2 - HalfHeight ' Set Y. Print Msg ' Print message. End Sub

77

III. Hm
1. Gii thiu

Trong Visual Basic xy dng sn cc hm phc v cho vic x l d liu mt cch dng v nhanh chng. Trong phn ny ta xt mt s hm thng dng. 2. Cc hm x l chui a. Tm chiu di chui: LEN(String) Tr v kt qu l s k t c trong String. V d : LEN("ABCD") tr v kt qu l 4. b. Chuyn sang ch thng : LCase(String) hoc Lcase$(String) Tr v kt qu l chui k t mi sau khi i chui c sang ch thng. Nu c du $ th tr v kt qu thuc kiu d liu Varian nu c $ kt qu tr v kiu String. V d : LCase("ABCD") tr v kt qu l abcd. c. Chuyn sang ch in : UCase(String) hoc Ucase$(String) Tr v kt qu l chui k t mi sau khi i chui c sang ch in. Nu c du $ th tr v kt qu thuc kiu d liu Varian nu c $ kt qu tr v kiu String. V d : UCase("abcd") tr v kt qu l ABCD. d. Ly cc k t bn tri : Left(String,n) hoc Left$(String,n) Tr v kt qu l chui k t mi gm n k t bn tri ca chui c. V d : Left("ABCD",2) tr v kt qu l AB e. Ly cc k t bn phi: Right(String, n) hoc Right$(String,n) Tr v kt qu l chui k t mi gm n k t bn phi ca chui c. V d : Right("ABCD",2) tr v kt qu l CD f. Ly nhm k t bt k: Mid(String,m,n) hoc Mid$(String,m,n) Tr v kt qu l chui k t mi gm n k t bt u t k t th m ca chui c. V d : Mid("ABCD",2,2) tr v kt qu l BC g. B cc k t trng: Trim(String) hoc Trim$(String) Tr v kt qu l chui k t mi sau khi vt b cc k t trng hai u chui c. V d : Trim(" AB ") tr v kt qu l "AB" h. B cc k t trng bn tri: LTrim(String) hoc LTrim$(String) Tr v kt qu l chui k t mi sau khi vt b cc k t trng bn tri ca chui c. V d : LTrim(" AB ") tr v kt qu l "AB " i. B cc k t trng bn phi: RTrim(String) hoc RTrim$(String) Tr v kt qu l chui k t mi sau khi vt b cc k t trng bn phi ca chui c. V d : RTrim(" AB ") tr v kt qu l " AB" 78

j.

i m s sang k t: Chr(m s) hoc Chr$(m s)

Tr v kt qu l mt k t tng ng vi m s trong bng m ANSI. M s l mt s nguyn t 0 n 255. V d : Chr(65) tr v kt qu l "A" k. i k t sang m s: Asc(K t) Tr v kt qu l mt s kiu Integer tng ng vi k t trong bng m ANSI. V d : Asc("A") tr v kt qu l 65. l. i chui sang s: Val(biu thc chui) Tr v kt qu l mt s sau khi i chui dng s (kiu String) sang gi tr s. V d : Val("123") + Val("213") tr v kt qu l 336 m. i s sang chui: Str[$](biu thc s) Tr v kt qu l mt chui k t sau khi i s sang. V d : Str(123) + Str(213) tr v kt qu l "123213" n. nh dng chui: Format[$](biu thc [, dng]) Tr v kt qu l mt chui k t c nh dng theo mt khun mu cho trc. Biu thc y c th l s hoc chui. Cc k t nh dng s : # : hin th s nu c cn khng th khng hin g c. 0 : hin th s nu c cn khng th xut hin k t 0. . : hin th du chm v tr khai bo. , : hin th du phy v tr khai bo. % : nhn biu thc vi 100 ri xut hin du %. V d :
So! = 1234.5 Format(so, "#.###") Format(so, "###,#.##") Format(so, "0.000") Format(so, "0%") Format(so, "$0.00") kt qu 1234.5 kt qu 1,234.5 kt qu 1234.5000 kt qu 1234500% kt qu $1234.50

Cc k t nh dng chui k t : & : hin th k t nu c cn khng th khng hin g c. & : hin th k t nu c cn khng th hin ln mt k t trng. < : i chui sang ch trng. > : i chui sang ch in.

V d :
Format("visual basic",">") Format("VISUAL BASIC",">") tr v "VISUAL BASIC" tr v "visual basic"

79

o. -

Tm chui con: InStr[$]([s,] chui 1, chui 2[, so snh]) S : nu c th n qui nh v tr bt u tm kim. Khng c th tm t u.

Trong : - So snh : l qui nh phng thc tm. Nu so snh l gi tr 1 th khng phn bit ch in vi ch thng, nu gi tr 0 th c phn bit ch in vi ch thng. Chui 1 : chui m. y l chui c th cha chui cn tm. Chui 2 : chui con. y l chui cn tm xem c c cha trong chui 1 hay khng.

Hm ny tr v kt qu l gi tr s. Nu bng 0 ngha l khng tm thy, nu mt s ln th khng th l v tr xut hin chui 2 trong chui 1. V d : 3. InStr("I Love You", "Love") tr v kt qu l 3 InStr("I Love You", "love", 0) tr v kt qu 0. Cc hm x l s : SIN(gc) COS(gc) TAN(gc) ATAN(s) EXP(s) LOG(s) CCUR(s) CINT(s) CLNG(s) CSNG(s) CDBL(s) FIX(s) INT(s) RND[(s)] ABS(s) SGN(s) SQR(s) Tnh sin ca gc. Tnh Cosin ca mt gc Tnh Tang ca mt gc Tnh Arctang ca mt gc Expenential Logarithm Chuyn i mt s v kiu Currency Chuyn i mt s v kiu Integer Chuyn i mt s v kiu Long Chuyn i mt s v kiu Single Chuyn i mt s v kiu Double B phn thp phn i thnh s nguyn Qui trn v s nguyn. To mt s ngu nhin. Tr tuyt i Du m/dng ca mt con s Ly cn bc hai.

80

CHNG 5. THIT K GIAO DIN


I. Gii thiu
Visual Basic cung cp mt giao din ho ngi dng hon chnh v gip cho ngi lp trnh rt nhiu trong vic thit k giao din khi pht trin cc phn mm. Ngi lp trnh ch cn s dng v khai bo hp l cc i tng thit k giao din v trn c s my tnh s t pht sinh ra m ngun tng ng. Trong chng ny, chng ti ch chn gii thiu nhng loi i tng cn thit v tng i phc tp khi thit k l Listbox v Combobox. Ngoi ra, chng ti cng gii thiu cch thc ngi s dng t to ra cc i tng ph hp vi yu cu thc t khi thit k giao din.

II.

Dng list control

C hai loi List controls dng trong VB6 l Listbox v Combobox. C hai u hin th mt danh sch cc gi tr ngi s dng c th la chn m khng cn phi nhp t bn phm. im khc bit khi thit k giao din l Listbox c th nm trn nhiu dng cn Combobox ch hin th trn mt dng. Listbox c th chim mt khung ch nht, nu chiu di khng hin th tt c mi dng th Listbox t ng cho ta mt thanh cun ng cho bit cn c nhiu dng b che v ta c th xem cc dng y bng cch dng phm hoc chut thay i cc dng. Combobox ch hin th trn mt dng nhng ta c th chn xem nhng dng khc bng cch click chut vo du hiu .

Listbox c rt nhiu cng dng v n rt uyn chuyn khi s dng. Trong bi ny chng ta s xem xt mt s ng dng ca Listbox khi thit k giao din: Hin th nhiu s la chn ngi s dng c th chn bng cch click hay drag-drop. Chn la mt gi tr trong danh sch. Dng hin th cc s kin. Dng tm kim hoc x l vn bn. Dng lm hng i. 81

1.

Listbox

a. Hin th nhiu s la chn Ta th bt u vit mt chng trnh gm c mt Listbox tn lstNames nm trong mt Form. Trong lstNames ta nh vo tn ca by ngi, mi ln xung dng nh nh CtrlEnter, thay v ch Enter, nu khng VB6 ngm hiu nh xong nn t ng ca s thuc tnh List. Cc tn ny l nhng dng s hin ra trong Listbox khi ta bt u chy chng trnh.

Ngoi lstNames ta cho thm mt Label vi Caption STUDENTS trang tr, v mt Label khc tn lblName. Mi khi ngi s dng click ln dng tn no th s hin th dng tn y trong lblName. Sau cng ta cho vo mt CommandButton tn CmdExit cho dng chng trnh. Ta s c chng trnh nh sau:
Private Sub lstNames_Click() lblName.Caption = lstNames.List(lstNames.ListIndex) End Sub Private Sub CmdExit_Click() End End Sub

Gi s ta click vo tn John Smith trn Listbox, ta s thy tn y cng uc hin th trong Label lblName.

82

Trong v d ny, Listbox lstNames c 7 dng (Items). S Items ny l thuc tnh ListCount ca Listbox. Cc Items ca Listbox c m t 0 n ListCount-1. Trong trng hp ny l t 0 n 6. Khi ngi s dng click ln mt dng, Listbox s pht sinh Event lstNames_Click. Lc by gi ta c th bit c ngi s dng va mi Click dng no bng cch hi thuc tnh ListIndex ca lstNames, n s c gi tr t 0 n ListCount-1. Lc chng trnh mi chy, cha ai Click ln Item no ca Listbox th ListIndex = -1. Nhng Items trong Listbox c xem nh mt mng xu k t. Mng ny c gi l List. Do , ta ni n Item th nht ca Listbox lstNames bng cch vit lstNames.List(0) , v tng t nh vy, Item cui cng l lstNames.List( lstNames.ListCount-1). Ta c th ni n item va c Clicked bng hai cch: lstNames.List(lstNames.ListIndex) lstNames.text.

b. Ghi ni dung ca Listbox By gi lu tr ni dung ca lstNames, ta thm mt CommandButton tn CmdSave. Ta s vit code khi ngi s dng click nt CmdSave chng trnh s m mt tp tin (dng text) v vit mi phn t ca lstNames vo :
Private Sub CmdSave_Click() Dim i, FileName, FileNumber FileName = App.Path ' Make sure FileName ends with a backslash If Right(FileName, 1) <> "\" Then FileName = FileName & "\" FileName = FileName&"MyList.txt" 'output text file MyList.txt ' Obtain an available filenumber from the operating system FileNumber = FreeFile ' Open the FileName as an output file Open FileName For Output As FileNumber ' Now iterate through each item of lstNames For i = 0 To lstNames.ListCount - 1 ' Write the List item to file Print #FileNumber, lstNames.List(i) Next Close FileNumber ' Close the output file End Sub

83

App l mt Object c bit i din cho chnh chng trnh ang chy. y ta dng thuc tnh Path bit lc chng trnh ang chy th m-un EXE ca n nm u. L do l ta thng cc tp tin lin h cn thit cho chng trnh nm ngay trong th mc ca chng trnh hay trong mt th mc con, chng hn nh data, logs,... App cn c mt s thuc tnh khc cng rt c ch nh PrevInstance, Title, Revision... Nu mi khi ng mt chng trnh m thy App.PrevInstance = True th lc by gi cng c mt bn sao khc ca chng trnh ang chy. Nu cn, ta kt thc chng trnh ny trnh chy 2 bn sao ca chng trnh cng mt lc. App.Title v App.Revision cho ta tin tc v Title v Revision ca chng trnh ang chy. vit ra mt tp tin nh dng vn bn (text file) ta cn phi m n trong ch output v khai bo t y tr i s dng mt ch s (FileNumber) i din tp tin thay v dng chnh tn tp tin. trnh dng mt FileNumber hin hu, tt nht ta ngh h iu hnh cung cp mt gi tr s cha ai dng bng cch gi Function FreeFile. Ch s FileNumber ny cn uc gi l FileHandle. Sau khi ta Close FileNumber ch s ny c gii phng v h iu hnh s c th dng n li cho ln gi sau. Do , chng ta phi trnh gi FreeFile lin tip hai ln v h iu hnh s cho chng ta cng mt ch s. Tc l, sau khi gi FreeFile phi dng n ngay bng cch m mt File ri mi gi FreeFile ln k c mt ch s khc. cch dng ch Input, Output cho tp tin l tng i vi v tr ca chng trnh (n nm trong b nh ca my tnh). Nu t trong b nh vit ra a cng th gi l Output. Ngc li, nu c t mt tp tin nm trn a cng vo b nh cho chng trnh ta th gi l Input. c. Ti mt text file vo Listbox Trong phn ny, thay v nh cc Items ca Listbox vo thuc tnh List ca lstNames ta c th to cc gi tr ca lstNames bng cch c cc Items t mt tp tin vn bn. Ta th thm mt CommandButton tn CmdLoad. Ta s vit code khi ngi s dng nhn nt CmdLoad chng trnh s m mt tp tin u vo dng vn bn v c tng dng b vo lstNames:
Private Sub CmdLoad_Click() Dim i, FileName, FileNumber, anItem ' Obtain Folder where this program's EXE file resides FileName = App.Path ' Make sure FileName ends with a backslash If Right(FileName, 1) <> "\" Then FileName = FileName & "\" FileName = FileName & "MyList.txt" ' Obtain an available filenumber from the operating system FileNumber = FreeFile ' Open the FileName as an input file Open FileName For Input As FileNumber lstNames.Clear ' Clear the Listbox first ' Now read each line until reaching End-Of-File Do While NOT EOF(FileNumber) Line Input #FileNumber, anItem ' Read a line from the file lstNames.AddItem anItem ' Add this item to the lstNames Loop Close FileNumber ' Close the input file End Sub

84

c t mt tp tin ta cn phi m n trong ch output. Trc khi lm y lstNames ta cn phi xa tt c mi items c sn bn trong. thc hin vic ta dng phng thc Clear ca Listbox. Sau ta dng phng thc AddItem cho thm tng dng vo trong Listbox. ch mc nh, nu ta khng ch r chn vo dng no th AddItem s chn Item mi vo phn t cui ca Listbox. Nu mun chn dng mi vo ngay trc item th 5 (ListIndex = 4), ta vit:
stNames.AddItem newItemString, 4 ' newItemString contains ' To insert a new Item at the beginning of the Listbox, write: lstNames.AddItem newItemString, 0

Lu l mi ln chng ta Add mt Item vo Listbox th ListCount ca Listbox tng 1. Mun xa mt item t Listbox ta dng phng thc RemoveItem, v d nh mun xa item th ba (ListIndex=2) ca lstNames, ta vit:
lstNames.RemoveItem 2

Mi ln chng ta xo mt phn t t Listbox th ListCount ca Listbox gim i mt n v. Do , nu chng ta dng Test da vo ListCount ca mt ListBox nhy ra khi mt Loop th phi lu trnh lm cho gi tr ListCount thay i trong Loop v thm hay bt phn t. Ta c tng dng ca mt Text file bng cch dng Line Input #FileNumber. Khi c n cui tp tin, h thng s cho ta gi tr EOF(FileNumber) = True. Ta dng gi tr y cho chng trnh nhy ra khi While.. Loop. Cu Do While NOT EOF(FileNumber) c ngha khi cha n cui ca Text File i din bi FileNumber th c tng dng v b vo Listbox. 2. Drag-Drop Ta xem qua Click Event ca Listbox. By gi dng Drag-Drop cho Listbox chng ta hy t 2 Labels mi ln Form. Ci th nht tn g cng c nhng c Caption l Room A. Hy gi nhn th hai l lblRoom v cho thuc tnh BorderStyle ca n bng Fixed Single. K n chn c hai nhn ri chn copy v paste ln Form. VB6 s cho chng ta hai nhn lblRoom. cho lstNames mt DragIcon, chng ta click lstNames, chn thuc tnh DragIcon popup mt hp thoi cho chng ta chn mt dragdrop icon t th mc C:\Program Files\Microsoft Visual Studio\Common\Graphics\Icons\Dragdrop, chng hn nh DRAG2PG.ICO:

85

Ta s dng Event MouseDown ca lstNames pop-up DragIcon hnh 2 trang giy cho UserDrag n qua bn phi ri b xung ln mt trong hai lblRoom. Khi DragIcon ri ln lblRoom, lblRoom s generate Event DragDrop. Ta s dng Event DragDrop ny gn thuc tnh Text ca Source (tc l lstNames, mc control t n pht xut Drag action) vo thuc tnh Caption ca lblRoom. Lu v y ta dng cng mt tn cho c hai lblRoom nn ch cn vit vit m chng trnh mt ch qun l Event DragDrop.
Private Sub lstNames_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) ' Start Pop-up DragIcon and start Drag action lstNames.Drag End Sub Private Sub lblRoom_DragDrop(Index As Integer, Source As Control, X As Single, Y As Single) ' Assign Property Text of Source (i.e. lstNames) to Caption lblRoom(Index).Caption = Source.Text End Sub

Kt qu sau khi Drag hai tn t Listbox qua Labels l nh sau:

3.

Dng thuc tnh Sorted

Trong v d trn ta c th quyt nh v tr ca mt Item mi khi ta chn n vo Listbox. i khi ta mun cc Items ca Listbox c t ng sp theo th t Alphabet. Chng ta c th thit lp thuc tnh Sorted = True thc hin chuyn ny. C mt gii hn l chng ta phi cho thuc tnh Sorted mt gi tr (True hay False) trong lc thit k. Thuc tnh ny khng th thay i khi chy chng trnh. Gi s ta mun sp xp cc Items ca mt Listbox khi cn. Vy th ta lm sao? Gii php rt n gin. Chng ta to mt Listbox tn lstTemp chng hn. Cho n thuc tnh Visible= False ( khng hin th) v thuc tnh Sorted=True. Khi cn sp xp lstNames chng hn, ta chp ni dung ca lstNames b vo lstTemp, tip n xo lstNames ri chp ni dung ( c sp) ca lstTemp tr li lstNames. Lu l ta c th AddItem vo mt Listbox vi thuc tnh Sorted=True, nhng khng th xc nh chn Item vo trc dng no, v v tr ca cc Items do Listbox quyt nh khi n sp xp cc Items. Ta hy cho thm vo Form mt CommandButton mi tn CmdSort v vit code cho Event Click ca n nh sau:
Private Sub CmdSort_Click()

86

Dim i lstTemp.Clear ' Clear temporary Listbox ' Iterate though every item of lstNames For i = 0 To lstNames.ListCount - 1 ' Add the lstNames item to lstTemp lstTemp.AddItem lstNames.List(i) Next lstNames.Clear ' Clear lstNames ' Iterate though every item of lstTemp For i = 0 To lstTemp.ListCount - 1 ' Add the lstTemp item to lstNames lstNames.AddItem lstTemp.List(i) Next lstTemp.Clear ' Tidy up - clear temporary Listbox End Sub

Trong trng hp ta mun c tu chn sp xp cc tn theo FirstName hay Surname th vn c th dng sorted Listbox v hnh tn lstTemp. Chng ta hy t ln pha trn lstName hai Labels mi tn lblFirstName v lblSurName v cho chng Caption "FirstName" v "SurName". T y ta ti tp tin "MyList.txt" vo lstNames bng cch nhp chut vo nt CmdLoad m khng sa thuc tnh List ca lstNames nhp cc phn t lc thit k na. Ngoi ra ta dng du phy (,) tch FirstName khi SurName trong mi tn cha trong file MyList.txt. Ni dung ca tp tin MyList.txt by gi tr thnh nh sau:
Peter,Jones Kevin,White Sue,Rose John,Smith Trevor,Kennedy Alan,Wright Ron, Bruno

Ta s sa code trong Sub CmdLoad_Click li khi chn tn vo lstNames, FirstName v SurName mi th chim 10 k t. cc ch trong Items ca lstNames sp dng ngay ngn ta i Font ca lstNames ra Courier New. Courier New l mt loi phng ch m chiu ngang ca tt c cc ch l nh nhau trong khi hu ht cc phng ch khc nh Arial, Times Roman ... c rng cc k t l khc nhau (Proportional Spacing). M mi ca Sub CmdLoad_Click tr thnh nh sau:
Private Sub CmdLoad_Click() Dim i, Pos Dim FileName, FileNumber, anItem Dim sFirstName As String*10 ' fixed length string of 10 chars Dim sSurName As String * 10 ' fixed length string of 10 chars ' Obtain Folder where this program's EXE file resides FileName = App.Path ' Make sure FileName ends with a backslash If Right(FileName, 1) <> "\" Then FileName = FileName & "\" FileName = FileName & "MyList.txt" ' Obtain an available filenumber from the operating system

87

FileNumber = FreeFile ' Open the FileName as an input file , using FileNumber Open FileName For Input As FileNumber lstNames.Clear ' Clear the Listbox first ' Now read each line until reaching End-Of-File Do While Not EOF(FileNumber) Line Input #FileNumber, anItem ' Read a line from the file ' Now separate FirstName from SurName Pos = InStr(anItem, ",") ' Locate the comma "," ' The part before "," is FirstName sFirstName = Left(anItem, Pos - 1) sFirstName = Trim(sFirstName) ' Trim off any blank spaces ' The part after "," is SurName sSurName = Mid(anItem, Pos + 1) sSurName = Trim(sSurName) ' Trim off any blank spaces lstNames.AddItem sFirstName & sSurName ' Add this item to the bottom of lstNames Loop Close FileNumber ' Close the input file End Sub

V FirstName nm bn tri ca mi Item nn sp xp theo FirstName cng ging nh sp xp c Item. Vic y ta lm bng Sub CmdSort_Click ri, do khi ngi s dng click Label lblFirstName ta ch cn gi CmdSort_Click nh sau:
Private Sub lblFirstName_Click() CmdSort_Click End Sub

sp xp theo SurName ta cn phi tm thi SurName qua bn tri ca Item trc khi b vo lstTemp. Ta thc hin chuyn ny bng cch hon chuyn v tr ca FirstName v SurName trong Item trc khi b vo lstTemp. Sau , khi copy cc Items t lstTemp t vo li lstNames ta li nh hon chuyn FirstName v SurName chng nm ng li v tr. on m sp xp tn theo SurName cng ging nh CmdSort_Add nhng sa i cht t nh sau:
Private Sub lblSurName_Click() Dim i, anItem Dim sFirstName As String*10 'fixed length string of 10 chars Dim sSurName As String * 10 ' fixed length string of 10 chars lstTemp.Clear ' Clear temporary Listbox ' Iterate though every item of lstNames For i = 0 To lstNames.ListCount - 1 anItem = lstNames.List(i) ' Identify FistName and SurName sFirstName = Left(anItem, 10) sSurName = Mid(anItem, 11) ' Swap FirstName/SurName positions before adding to lstTemp lstTemp.AddItem sSurName & sFirstName Next lstNames.Clear ' Clear lstNames ' Iterate though every item of lstTemp For i = 0 To lstTemp.ListCount - 1 anItem = lstTemp.List(i)

88

sSurName = Left(anItem, 10) ' SurName now is on the left sFirstName = Mid(anItem, 11) ' Add FirstName/SurName in correct positions to lstNames lstNames.AddItem sFirstName & sSurName Next lstTemp.Clear ' Tidy up - clear temporary Listbox End Sub

Cc Items trong lstNames c sp xp theo SurName hin ra nh sau:

Ta sa Sub CmdSave_Click Save Items theo trt t sp xp mi nu cn:


Private Sub CmdSave_Click() Dim i, FileName, FileNumber, anItem ' Obtain Folder where this program's EXE file resides FileName = App.Path ' Make sure FileName ends with a backslash If Right(FileName, 1) <> "\" Then FileName = FileName & "\" ' Call Output filename "MyList.txt" FileName = FileName & "MyList.txt" ' Obtain an available filenumber from the operating system FileNumber = FreeFile ' Open the FileName as an output file, using FileNumber Open FileName For Output As FileNumber ' Now iterate through each item of lstNames For i = 0 To lstNames.ListCount - 1 anItem = lstNames.List(i) anItem=Trim(Left(anItem, 10)) & "," & Trim(Mid(anItem, 11)) ' Write the List item to file. Make sure you use symbol # in front of FileNumber Print #FileNumber, anItem Next Close FileNumber ' Close the output file End Sub

III. T to cc i tng (Object)


T trc n gi, ta lp trnh VB6 bng cch thit k cc Forms ri vit codes x l cc Events ca nhng controls trn Form khi ngi s dng click mt Button hay Listbox, .v.v.. Ni chung, cch y cng hu hiu trin khai chng trnh, nhng nu ta c th hng c cc li ch sau y th cng tt hn : 89

Dng li c code vit trc y trong mt d n khc D nhn din c mt li (error) pht xut t u D trin khai mt d n ln bng cch phn phi ra thnh nhiu d n nh D bo tr

Lp trnh theo hng i tng l thit k cc b phn phn mm ca chng trnh, gi l Objects sao cho mi b phn c th t lo liu cng tc ca n ging nh mt module lm vic c lp. Cu hi t ra l cc Sub hay Function m chng ta tng vit x l tng giai on trong chng trnh c th m trch vai tr ca mt module c lp khng? C mt cch nh ngha khc cho Object l mt Object gm c data structure v cc Subs/Functions lm vic trn cc data y. Thng thng, khi ta dng Objects khng cn gim st chng thc hin nh th no, ngc li nu khi c s c g th ta mun chng bo co cho ta bit. Trong VB6, cc Forms, Controls hay ActiveX l nhng Objects m ta vn s dng. Ly v d nh Listbox. Mt Listbox t qun l cc items hin th bn trong n. Ta bit listbox List1 ang c bao nhiu items bng cch hi List1.ListCount. Ta bit item no va mi c selected bng cch hi List1.ListIndex. Ta thm mt item vo listbox bng cch gi phng thc AddItem ca List1, ..v.v.. Ni cho ng ra, Object l mt thc th ca mt Class. Nu Listbox l mt Class th List1, List2 l cc thc th ca Listbox. Ngay c mt form tn frmMyForm m ta vit trong VB6 chng hn, n cng l mt Class. Thng thng ta dng thng frmMyForm nh sau:
frmMyForm.Show

Trong trng hp ny tht ra frmMyForm tuy l mt Class nhng c dng y nh mt Object. Nu cn thit, ta c th to ra hai, ba Objects ca Class frmMyForm cng mt lc nh trong v d sau:
Dim firstForm As frmMyForm Dim secondForm As frmMyForm Set firstForm = New frmMyForm Set secondForm = New frmMyForm firstForm.Show secondForm.Show

Trong v d trn ta khai bo firstForm v secondForm l nhng Objects ca Class frmMyForm. Sau ta lm nn (instantiate) cc Objects firstForm v secondForm bng statements Set... = New... firstForm v secondForm cn c gi l cc instances ca Class frmMyForm. Class ging nh ci khun, cn Objects ging nh nhng ci bnh lm t khun y. Chc chng ta thy trong VB6 t dng hai t Class v Object ln ln nhau. u ny cng khng quan trng, min l chng ta nm vng ngha ca chng. VB6 c h tr Class m ta c th trin khai v instantiate cc Objects ca n khi dng. Mt Class trong VB6 c cha data ring ca n, c nhng Subs v Functions m ta c th gi. Ngoi ra, Class cn c th Raise Events, tc l bo cho ta bit khi chuyn g xy ra bn trong n. Cng ging nh Event Click ca CommandButton, khi ngi s dng clicks ln button th n Raise Event Click cho ta x l trong Sub myCommandButton_Click(), chng hn. Classtrong VB6 khng c h tr Visual components, tc l khng c cha nhng controls nh TextBox, Label .v.v.. Tuy nhin, ta c th ly nhng control c sn t bn ngoi ri chuyn cho Object ca Class dng. 90

By gi chng ta hy bt u vit mt Class. Chng ta hy m mt Project mi loi Standard EXE Visual Basic. Sau dng Menu Command chn Add Class Module:

Khi Add Class Module dialog hin ra chn Class Module v click Open.

Chng ta s thy m ra mt khung trng v Project Explorer vi Properties Window. Trong Properties Window, hy sa thuc tnh Name ca Class thnh clsBox nh di y:

K nh vo nhng dng code di y, trong c biu din cch dng Class clsBox.
Option Explicit

91

Private Private Private Private

mX As Integer mY As Integer mWidth As Integer mHeight As Integer

Public Property Let X(ByVal vValue As Integer) mX = vValue End Property Public Property Get X() As Integer X = mX End Property Public Property Let Y(ByVal vValue As Integer) mY = vValue End Property Public Property Get Y() As Integer Y = mY End Property Public Property Let Width(ByVal vValue As Integer) mWidth = vValue End Property Public Property Get Width() As Integer Width = mWidth End Property Public Property Let Height(ByVal vValue As Integer) mHeight = vValue End Property Public Property Get Height() As Integer Height = mHeight End Property Public Sub DrawBox(Canvas As Object) Canvas.Line (mX, mY)-(mX + mWidth, mY + mHeight), , B End Sub Public Sub ClearBox(Canvas As Object) Canvas.Line (mX, mY)-(mX + mWidth, mY + mHeight), Canvas.BackColor, B End Sub

Class clsBox c 4 Properties: X, Y, Width v Height. Ta s dng mt v d c th l mt hp t clsBox. Mi hp c ta (X,Y) v kch thc chiu rng v chiu cao (width, height) ca n. Tht ra ta c th dng Public statement khai bo cc bin X, Y, Width v Height. Nhng y ta c khai bo chng l Private, di dng mX, mY, mWidth v mHeight. Khi ta mun thay i cc tr s ca chng, ta s dng cng mt cch vit code nh bnh thng (v d: myBox.X = 80 ). Nhng khi chng trnh x l assignment statement y, n s thc thi mt loi phng thc (ging nh Sub) gi l thuc tnh Let X (vValue). Ta thy y vValue 92

c gn cho mX (i.e. mX = vValue ), bin cc b ca X. Nh th cng vic ny cng chng khc g sa i mt Public variable X. Tuy nhin, y ta c th vit thm code trong thuc tnh Let X n lm g cng c. Mi ln chng ta dng ca s thuc tnh hiu chnh kch thc ch, mu ch hay mu nn th chng nhng cc thuc tnh y ca Label thay i, m kt qu ca s thay i c c hiu lc ngay lp tc, ngha l Label c hin th tr li vi tr s mi ca thuc tnh. l v trong phng thc thuc tnh c c m lnh bo Label thc hiu vic hin th li. Ngc li, khi ta dng thuc tnh X ca Object myBox, khng phi ta ch c tr s thi m cn thc thi c phng thc thuc tnh Get X. Ni tm li, thuc tnh cho ta c hi thc thi mt phng thc mi khi ngi s dng c hay vit tr s ca bin y. V d nh nu ta mun kim sot ch chp nhn tr s ta X mi khi n khng phi l s m. Ta s sa thuc tnh Let X li nh sau:
Public Property Let X(ByVal vValue As Integer) If (vValue >= 0) Then mX = vValue End If End Property

Thuc tnh c th l Read Only hay Write Only. Nu mun mt thuc tnh l Read Only th ta khng cung cp thuc tnh Let. Nu mun mt thuc tnh l Write Only th ta khng cung cp thuc tnh Get. Ngoi ra nu lm vic vi Object, thay v kiu d liu thng thng, th ta phi dng thuc tnh Set, thay v thuc tnh Let. V d ta cho clsBox mt thuc tnh mi gi l Font dng i tng ca lp stdFont ca VB6. Trong clsBox ta khai bo mt bin cc b mFont v vit mt thuc tnh Set Font nh sau:
Private mFont As StdFont Public Property Set Font(ByVal newFont As StdFont) Set mFont = newFont End Property

Ta s dng thuc tnh Font ca myBox (thuc Class clsBox) nh sau:


' Declare an object of Class StdFont of VB6 Dim myFont As StdFont Set myFont = New StdFont myFont.Name = "Arial" myFont.Bold = True Dim myBox As clsBox Set myBox = New clsBox Set myBox.Font = myFont ' Call the Property Set method

Class clsBox c hai Public Subs, DrawBox v ClearBox. ClearBox cng v mt hp nh DrawBox, nhng n dng BackColor ca mn nh (canvas), nn coi nh xa ci hp c sn. Do , nu mun, chng ta c th hiu chnh Sub DrawBox nhn mt tu chn v mu sc nt v nh sau:
Public Sub DrawBox(Canvas As Object, Optional fColor As Long) If IsMissing(fColor) Then Canvas.Line (mX, mY)-(mX + mWidth, mY + mHeight), , B Else Canvas.Line (mX, mY)-(mX + mWidth, mY + mHeight), fColor, B

93

End If End Sub

Trong v d trn, tham s tu chn fColor c kim tra bng hm IsMissing. Nu fColor l BackColor ca canvas th ta s c hiu qu ca ClearBox. Trong form chnh ca chng trnh dng test clsBox, mi khi ta tham chiu n mt i tng thuc lp clsBox, IDE Intellisense s hin th cc Properties v Subs/Functions ca clsBox nh trong hnh di y:

Trong chng trnh ny, mi khi ta click nt Draw th mt hp c khi to, cho ta X,Y v kch thc Width, Height, ri c v ra ngay trn form.

cho chng trnh sinh ng hn, khi ngi s dng clicks nt Animate, ta s cho mt hp mu chy t tri qua phi. Khi ngi s dng clicks nt Two Boxes ta s v hai hp, hp trong mu xanh, hp ngoi mu , v cho chng chy t tri sang phi. y ta biu din cho thy mnh mun instantiate bao nhiu hp t clsBox cng c, v d nhin mi hp c mt b properties vi gi tr ring ca n. 94

Ta c th lp trnh cho Object bo co chng trnh ch ca n khi c mt bin c (Event) xy ra bn trong Class. Ta th khai bo mt Event tn Draw trong clsBox, v vit code mi khi Sub DrawBox thc thi th Class s xy dng mt s kin Draw.
Public Event Draw(X As Integer, Y As Integer) Public Sub DrawBox(Canvas As Object, Optional fColor As Long) If IsMissing(fColor) Then Canvas.Line (mX, mY)-(mX + mWidth, mY + mHeight), , B Else Canvas.Line (mX, mY)-(mX + mWidth, mY + mHeight), fColor, B End If RaiseEvent Draw(mX, mY) End Sub

By gi, trong frmClass thay v ch khai bo Dim myBox as clsBox, ta s khai bo Private WithEvents myBox as clsBox. Ngay sau , ch myBox s hin ra trong danh sch cc Object c h tr Event ca frmClass. K ta s vit chng trnh qun l Event Draw ca myBox, tc l ta cung cp chng trnh cho Private Sub myBox_Draw (X as Integer, Y as Integer). y ta ch hin th mt thng ip bo co mt hp va c v u.

95

Khi chy chng trnh, mi ln mt i tng clsBox thc hin Sub DrawBox ta s thy frmClass hin th mt message ging nh di y.

Nh rng, ta khai bo mt Object vi WithEvents khi ta mun qun l cc Events ca n. Trong v d trn, frmClass l ch ca myBox v n nm gi Event Draw ca myBox. Tng t nh vy, ngay c bn trong mt Class, nu Class y c giao cho mt Object c th Raise Events (v d nh TextBox, ListBox, Timer .v.v..), chng ta cng c th khai bo Object y vi cc s kin km theo n c th qun l cc Events ca Object. Trong v d di y ta vit cc on m trong mt Class c giao cho mt Textbox khi form chnh gi Sub InitObject chuyn cho Object mt TextBox:
Private WithEvents mTextBox As TextBox Public Sub InitObject(givenTextBox As TextBox) Set mTextBox = givenTextBox End Sub Private Sub mTextBox_KeyPress(KeyAscii As Integer) ' Place your code here to handle this event End Sub

96

CHNG 6. CC CH HI THOI
Dialogs (hi thoi) c dng hin th tin tc v nhn thng tin t chut hay bn phm t ngi s dng ty theo tnh hung. Chng c dng tp trung s ch ca ngi s dng vo cng vic hin ti ca chng trnh nn rt hu dng trong cc chng trnh ca Windows. C nhiu dng Dialogs, mi dng c p dng cho mt ng cnh ring bit. Trong chng ny ta s bn qua 4 loi dialogs chnh v xem xt khi no v bng cch no ta dng chng: Message Boxes Input Boxes Common Dialogs Custom Dialogs

I. Message Boxes (hp thng ip)


Message Boxes c dng nhc nh ngi s dng mt chuyn g, v i hi mt phn ng no t ngi s dng. V d, khi ta chm dt chng trnh MSWord m cha lu tr h s th MSWord s nhc ta lu tr n bng Dialog di y:

Trong trng hp ny ngi s dng c th click mt trong 3 buttons. Nu click Yes th s xc tin vic lu tr h s trc khi kt thc chng trnh MSWord. Nu click No th MSWord s lng l kt thc m khng lu tr h s. Nu click Cancel th c ngha ngi s dng i vic chm dt chng trnh v tr li tip tc dng MSWord. Ta dng MsgBox hin th Message Box nh trong hnh di y:

97

Tham s th nht ca MsgBox l thng ip Close the program down?, tham s th hai l tp hp ca icon (vbQuestion) v s buttons (vbOKCancel) bng cch cng hai hng: vbQuestion + vbOKCancel (hai buttons OK v Cancel), tham s th ba l title (tiu ) ca Dialog. Trong v d MSWord trn hng s ca icon v buttons l vbExclamation + vbYesNoCancel (ba nt Yes, No v Cancel). Ta chn s v loi buttons theo bng di y: Tn hng vbOKOnly vbOKCancel vbYesNo vbRetryCancel vbYesNoCancel vbAbortRetryIgnore Cc buttons OK OK Cancel Yes No Retry Cancel Yes No Cancel Abort Retry Ignore

Hng s ca cc icons ta c th dng l vbCritical, vbQuestion, vbExclamation v vbInformation. Khi mt Message Box c m ra, c chng trnh ngng li v i ngi s dng phn ng. Ta ni Message Box c hin th trong Modal Mode, n dnh mi s ch v tm ngng cc s thc thi khc trong cng chng trnh. Sau khi ngi s dng click mt button, Message Box s bin mt v chng trnh s tip tc chy t dng code ngay di dng MsgBox. Trong v d trn ta dng MsgBox nh mt Sub, nhng ta cng c th dng MsgBox nh mt Function bit ngi s dng va mi click button no. Function MsgBox returns mt value (tr v mt gi tr) m ta c th th theo thi hnh. V d nh:
Private Sub CmdPrompt_Click() Dim ReturnValue As Integer ReturnValue = MsgBox("Close the program down", vbQuestion + vbOKCancel, "Exit Program") Select Case ReturnValue Case vbOK MsgBox "You clicked OK" Case vbCancel MsgBox "You clicked Cancel"

98

End Select End Sub

Cc tr s Visual Basic intrinsic constants m Function MsgBox returns l: Tr s 1 2 3 4 5 6 7 Tn nt OK Cancel Abort Retry Ignore Yes No Tn hng vbOK vbCancel vbAbort vbRetry vbIgnore vbYes vbNo

Chng ta c th hin th thng ip trong Message Box thnh nhiu dng bng cch dng hng vbCrLf (CarriageReturn v LineFeed) nh du nhng ch ngt khc nh sau:
MsgBox "This is the first line" & vbCrLf & " followed by the second line"

Nu chng ta thy mnh thng dng MsgBox vi cng mt icon v nhng buttons, nhng c thng ip khc nhau, chng ta c th vit mt Global Subroutine trong m-un .BAS dng li nhiu ln. V d chng ta c mt Global Sub nh sau:
Public Sub DisplayError(ByVal ErrMess As String ) MsgBox ErrMess, vbCritical + vbOKOnly, "Error" End Sub

Mi ln mun hin th mt Error message chng ta ch cn gi Sub DisplayError vi ni dung thng ip m khng s dng lm ln icon. Sau ny mun i cch hin th thng ip Error ch cn edit mt ch. Nu ngi s dng mun chng ta lu tr tt c mi errors xy ra lc run-time, chng ta ch cn thm vi dng code trong Sub DisplayError vit thng bo li vo mt tp tin dng Text.

II.

Input Boxes

Vi Message Boxes, ngi s dng ch c th click ln mt button. Trong thc t, i khi ta mun ngi s dng nh vo thm mt t d kin, trong trng hp y ta c th dng Input Boxes. Input Boxes ging ging Message Box, nhng n chuyn nhn d liu u vo t ngi s dng v khng hin th mt biu tng. V d:
Private Sub CmdGreeting_Click() Dim strReply As String strReply = InputBox$("Please enter your name", "What 's your name?", "John", 2000, 1000) MsgBox "Hi " & strReply & ", it 's great to meet you!", vbOKOnly, "Hello" End Sub

cc tham s ca Function InputBox$. Tham s th nht l Text Message, tham s th hai l Title ca Dialog, tham s th ba l Default Input Value. y l gi tr c hin th 99

sn trong Input Box khi n xut hin, nu l u vo m ngi s dng thng nh vo th ngi s dng ch cn click nt OK l . Hai tham s cui cng l Optional (ty chn, c cng c, khng c cng khng sao). N l to X,Y ca Input Box trong n v twips. H thng ta ly gc trn bn tri lm chun vi X=0, Y=0.

Input Box c hai dng hm: InputBox$ - tr v mt xu ng hong InputBox - tr v mt xu nm trong bin Variant

Nu chng ta click nt Cancel th gi tr tr v l xu rng (empty string), chng ta c th th xu rng nhn din trng hp ny. Di y l mt v d dng hm InputBox:
Private Sub CmdFortuneTeller_Click() Dim varValue As Variant Dim intAge As Integer varValue = InputBox("Please enter your age", "How old are you?", "18") If IsNumeric(varValue) Then intAge = Val(varValue) If intAge < 20 Then MsgBox "You are a young and ambitious person", vbOKOnly, "Observation" Else MsgBox "You are a matured and wise person", vbOKOnly, "Observation" End If Else MsgBox "Oh oh! - please type your age!", vbCritical + vbOKOnly, "Input Error" End If End Sub

Mc du Input Boxes rt d dng, trn thc t rt t khi ta dng n v nhng l do sau y: Ta khng th lm g c trong lc ngi s dng nhp d liu, phi i sau khi ngi s dng click OK th mi bt u x l xu vn bn u vo. Ngc li nu ta dng mt Textbox trong mt Form thng thng, ta c th code trong cc b qun l s kin ca Events KeyPress hay Change kim sot cc s bm phm (keystrokes) ca ngi s dng. Input Boxes ch cho ta nh vo mt xu vn bn duy nht. Nhiu khi ta mun ngi s dng nh vo nhiu th nn cn phi c mt form ring.

100

Sau cng, Input Boxes xem khng p mt. Chng trnh dng Input Boxes c v nh khng chuyn nghip, do ta cn phi dng Custom Dialogs.

III. Common Dialogs


Chng ta c th thy hu nh mi chng trnh trong Windows u c cng nhng dialogs m v ghi tp tin ? V hu nh tt c chng trnh u c cng dialogs chn mu, phng ch hay in ? l v cc Dialogs thng dng y thuc v Common Dialog Library ca MSWindows v cho php cc chng trnh gi. Mun dng cc Dialogs y trong VB6 ta phi reference Comdlg32.ocx bng IDE Menu command Project | Components... ri chn v Apply Microsoft Common Dialog Control 6.0.

Microsoft Common Dialog Control 6.0 cho ta su dng Dialogs ty theo gi Method no: Tn Open File Save File Color Font Print Help Method ShowOpen ShowSave ShowColor ShowFont ShowPrinter ShowHelp

IV. Open v Save File Dialogs


Chng ta hy m mt Project mi vi mt button tn CmdOpen trong Form1 v nh vo code sau y cho Sub CmdOpen_Click:
Private Sub CmdOpen_Click() On Error GoTo DialogError With CommonDialog1

101

.CancelError = True ' Generate Error number cdlCancel if user click Cancel .InitDir = "E:\VB6" ' Initial (i.e. default ) Folder .Filter = "Executables (*.exe) | *.exe| Batch Files (*.bat)| *.bat" .FilterIndex = 1 ' Select ""Executables (*.exe) | *.exe" as default .DialogTitle = "Select a program to run" .ShowOpen ' Lauch the Open Dialog MsgBox "You selected " & .FileName, vbOKOnly + vbInformation, "Open Dialog" End With Exit Sub DialogError: If Err.Number = cdlCancel Then MsgBox "You clicked Cancel!", vbOKOnly + vbInformation, "Open Dialog" Exit Sub Else MsgBox "Error in Dialog's use: " & Err.Description, vbOKOnly + vbCritical, "Error" Exit Sub End If End Sub

Hy chy chng trnh y v click trn nt Open, chng trnh s hin th thng bo li di y:

L do l ta qun b mt Microsoft Common Dialog Control 6.0 vo Form1. Vy chng ta hy nhn p chut ti biu tng ca n trong ToolBox. By gi hy chy chng trnh li v click button Open hin th Open Dialog.

102

Chng ta c th chn th mc no ty bng cch di chuyn t th mc ny qua th mc khc hay thay i a. Nu chng ta click vo bn phi ca combobox File of type, n s dropdown cho thy chng ta c th chn mt trong hai loi Files nh lit k trong cu lnh:
.Filter = "Executables (*.exe) | *.exe| Batch Files (*.bat)| *.bat"

Sau khi chn mt Filename c sn hay nh mt tn vo File name textbox, chng ta click Open. Sau , CommonDialog1.Filename s cha tn file chng ta chn hay nh vo.

V ta cho .CancelError = True nn nu ngi s dng click Cancel chng trnh s sinh ra mt li vi m s 32755 (cdlCancel). y ta bt Error y bng cch dng On Error GoTo DialogError v th Err.Number= cdlCancel hin th Error message di y:

Save Dialog cng tng t nh Open Dialog, ta dng method ShowSave hin th n. 103

Trong v d trn ta nh ngha cc thuc tnh ca CommonDialog1 bng code. Chng ta cng c th dng Thuc tnh Windows nh ngha chng nh di y:

Ngoi ra, chng ta cng c th dng cc trang thuc tnh ca CommonDialog1 nh ngha thuc tnh lc thit k bng cch right click Commondialog1 trn Form1 ri chn thuc tnh:

104

Thuc tnh Pages Dialog s hin th vi Tab Open/Save As c sn lc u, chng ta c th nh cc tin tc nh sau:

V.
1.

Cc loi Dialog c sn dng


Color Dialog

Color Dialog cho ngi s dng mt cch chn mu rt d dng. Ngoi nhng mu c sn, ngi s dng c th t to ra mt mu ri cho n thm vo trong bng mu c cung cp, gi l Windows Palette bng cch click button Add to Custom Colors.

105

Chng ta to ra mt mu bng cch click ch c mu theo trong bng mu ln hnh vung ri nm hnh tam gic bn phi ko ln, ko xung thay i m ca mu nh hin th trong hp vung Color|Solid. Khi va vi mu hin th, chng ta click button Add to Custom Colors, mu y s c cho thm vo nhm Custom Colors nm pha di, bn tri.

Ta dng method ShowColor hin th Color Dialog. Sau khi ngi s dng chn mt mu ri, ta c th trc tip assign n cho property ForeColor hay BackColor ca mt control. Trong v d di y ci mu m ngi s dng va chn c assigned cho background ca picturebox Picture1:
Private Sub CmdSelectColor_Click() On Error GoTo NoColorChosen With CommonDialog1 .CancelError = True ' Entire dialog box is hin thed, including the Define Custom Colors section .Flags = cdlCCFullOpen .ShowColor ' Launch the Color Dialog

106

Picture1.BackColor = .Color ' Assign selected color to background of Picture1 Exit Sub End With NoColorChosen: ' Get here if user clicks the Cancel button MsgBox "You did not select a color!", vbInformation, "Cancelled" Exit Sub End Sub

2.

Font Dialog

Font Dialog cho ta chn Font cho mn nh hay printer v chn mu dng cho ch ca Font. Ta dng method ShowFont hin th FontDialog. Cc chi tit trnh by trong Font Dialog ty thuc vo tr s ca Flags nh sau: Tn hng cdlCFScreenFonts cdlCFPrinterFonts cdlCFBoth cdlCFScalableOnly 1 2 3 &H20000 Tr s Hiu qu Ch hin th cc Fonts printer h tr Ch hin th cc Fonts ca mn nh, cha chc tt c u c printer h tr Hiin th cc Fonts mn nh v printer Ch hin th cc scalable Fonts nh TrueType fonts m chng ta ci vo my

Nu chng ta mun cho ngi s dng ty chn chn mu th thm 256 vo tr s ca Flags.

107

Di y l code cho ngi s dng chn Font v mu ca Label1.


Private Sub CmdSelectFont_Click() On Error GoTo NoFontChosen CommonDialog1.CancelError = True ' Causes the dialog box to list only the screen fonts supported by the system. CommonDialog1.Flags = cdlCFScreenFonts + 256 ' Add 256 to include Color option CommonDialog1.ShowFont ' Launch the Font Dialog With Label1.Font .Bold = CommonDialog1.FontBold .Italic = CommonDialog1.FontItalic .Name = CommonDialog1.FontName .Size = CommonDialog1.FontSize .Strikethrough = CommonDialog1.FontStrikethru .Underline = CommonDialog1.FontUnderline End With Label1.ForeColor = CommonDialog1.Color Label1.Caption = "Hello world!!!, this is a Font Dialog Demo" Exit Sub NoFontChosen: MsgBox "No font was chosen!", vbInformation, "Cancelled" Exit Sub End Sub

108

Ch : Nu chng ta qun cho Flags mt trong nhng hng s ni trn chng trnh s cho mt Error message nh sau:

3.

Print Dialog

Print Font cho ta mt giao din cng ging nh trong Microsoft Office chn nhng ty chn v vic in. Vi Print Dialog ta c th chn printer no vi nhng c tnh no bng cch nhn nt Properties hay nt Preferences. Ta cng c th quyt nh in t trang no n trang no ca t liu v in bao nhiu bn sao. Ch c iu phi lu l nu ngi s dng dng Print Dialog chn mt Printer khc m trong Print Dialog ta chn Property PrinterDefault = True th Printer y s tr thnh Default Printer v n cng s c hiu lc vnh vin trong c Windows cho n khi ngi s dng thay i li. Khc vi Color v Font Dialogs, Print Dialog khng i hi ta phi cho mt tr s ca Property Flags. Ta ch cn dng Method ShowPrinter hin th Print Dialog. Ba thuc tnh thng c dng nht sau khi ngi s dng chn cc ty chn ca Print Dialog l Copies, FromPage v ToPage. cho ngi s dng cc gi tr mc nh ca nhng thuc tnh ny, chng ta c th sn cc tr s trc khi hin th Print Dialog.

Di y l code mu dng print Dialog:


Private Sub CmdSelectPrinter_Click() With CommonDialog1 .FromPage = 1 .ToPage = 1 .Copies = 1 .ShowPrinter End With End Sub

109

4.

Help Dialog

Ta dng method ShowHelp hin th cc thng tin gip , nhng nh phi cho CommonDialog t nht tr s ca cc thuc tnh HelpFile v HelpCommand.
Private Sub CmdHelp_Click() CommonDialog1.HelpFile = "YourProgram.hlp" CommonDialog1.HelpCommand = cdlHelpContents CommonDialog1.ShowHelp End Sub

bit thm chi tit v cch dng ShowHelp, highlight ch HelpContext trong source code VB6 ri n phm F1 v chn MsComDlg.

VI. Custom Dialogs


Nhiu khi Message Box, Input Box hay cc dng Common Dialogs vn khng thch hp cho hon cnh lp trnh. Trong trng hp y chng ta c th dng mt Form bnh thng lm thnh mt Dialog theo yu cu. N hi mt cng hn mt cht, nhng th nht n c nhng mu sc ging nh cc Forms khc trong chng trnh, v th hai ta mun lm g ty . Ch c ci bt li l chng trnh s dng nhiu ti nguyn hn v cn thm mt t b nh. Sau y ta th trin khai mt Login Form tng qut, c th dng trong nhiu trng hp. Khi khi ng, chng trnh ny s hin th mt Login form yu cu ngi s dng nh vo tn v mt khu. Sau , nu tn v mt khu hp l th ci Form chnh ca chng trnh mi hin ra. Cch ta thc hin l cho chng trnh khi ng vi mt Sub Main trong .BAS Module. Sub Main s gi Sub GetUserInfo (cng nm trong cng Module) hin th form frmLogin trong Modal mode n lm vic cng mt cch nh Message Box, Input Box hay Common Dialogs. Khi form frmLogin c du kn bng statement Me.Hide th execution trong Sub GetUserInfo s tip tc chi tit in vo cc textboxes txtUserName v txtPassword c tr v local variables strUserName v strPassword. M ngun ca Sub Main v Sub GetUserInfo c lit ra di y:
Sub Main() Dim strUserName As String Dim strPassword As String ' Call local Sub getUserInfo to obtain UserName and Password GetUserInfo strUserName, strPassword If strUserName = "" Then MsgBox "Login failed or aborted", vbInformation, "login Aborted" Else MsgBox "User " & strUserName & " logged in with password " & strPassword, vbInformation, "Login accepted" ' Check UserName and Password here ' If valid password then show the Main form of the program which is implemented separately... ' frmMain.Show End If End Sub

110

Private Sub GetUserInfo(ByRef sUserName As String, ByRef sPassword As String) ' Invoke frmLogin form in Modal mode frmLogin.Show vbModal ' As soon as frmLogin is hidden, the execution gets here sUserName = frmLogin.txtUserName ' assign the form's txtUserName to sUserName sPassword = frmLogin.txtPassword ' assign the form's txtPassword to sPassword Unload frmLogin ' Unload form frmLogin End Sub

Login form c hin th nh di y:

Sau khi user in chi tit v click OK, tm thi ta ch hin th mt thng ip xc nhn cc chi tit y.

Trong tng lai, chng ta c th vit thm code kim tra xem tn v mt khu c hiu lc khng. C mt vi chi tit v form frmLogin n lm vic ging mt Common Dialog: Ta cho property BorderStyle ca frmLogin l Fixed Dialog. Ta cho Property PasswordChar ca textbox txtPassword bng "*" khi ngi s dng in mt khu, ta ch thy mt dng du hoa th. Ta cho Property StartupPosition ca form l CenterScreen. Property Default ca button cmdOK l True khi ngi s dng n phm Enter trong form l coi nh tng ng vi click button cmdOK. Tng t nh th, Property Cancel ca button cmdCancel l True khi ngi s dng n phm Esc trong form l coi nh tng ng vi click button cmdCancel. Tm thi coding ca event click ca cmdOK v cmdCancel ch n gin nh lit k di y:
Sub Main() Dim strUserName As String Dim strPassword As String ' Call local Sub getUserInfo to obtain UserName and Password GetUserInfo strUserName, strPassword If strUserName = "" Then

111

MsgBox "Login failed or aborted", vbInformation, "login Aborted" Else MsgBox "User " & strUserName & " logged in with password " & strPassword, vbInformation, "Login accepted" ' Check UserName and Password here ' If valid password then show the Main form of the program which is implemented separately... ' frmMain.Show End If End Sub Private Sub GetUserInfo(ByRef sUserName As String, ByRef sPassword As String) ' Invoke frmLogin form in Modal mode frmLogin.Show vbModal ' As soon as frmLogin is hidden, the execution gets here sUserName = frmLogin.txtUserName ' assign the form's txtUserName to sUserName sPassword = frmLogin.txtPassword ' assign the form's txtPassword to sPassword Unload frmLogin ' Unload form frmLogin End Sub

112

CHNG 7. THIT K HA
Visual Basic 6 c cho ta mt s cng c v ha (graphics) trang im cho cc ca s thm phong ph, thn thin, d lm vic v p mt hn. D cc phng tin v ho ny khng mnh ta vit nhng chng trnh i hi k thut ho cao nh tr chi (games), thit k cc bn v k thut (CAD) nhng c th p ng cc yu cu c bn v ho khi thit k giao din cho cc phn mm ng dng trong qun l, h thng. Khi ni n ha, ta mun phn bit n vi ch vn bn (text) thng thng. V d ta dng Notepad son tho mt bi th, trong lc bi th ang c hin th ta c th sa i d dng bng cch dng bn phm nh thm cc ch mi vo, dng cc nt Delete, Backspace xa cc ch. l ta lm vic vi ch Text. Tip n, trong khi bi th cn ang hin th, ta dng mt chng trnh Graphic b sung thm cc hnh nh minh ho hoc chuyn vn bn bi th thnh file nh th ta c mt Graphic. Sau , mun sa i bi th t graphic ny ta phi dng mt graphic editor nh MSPaint, PhotoShop, PaintShopPro...

I. Mu (color) v phn gii (resolution)


Ta ni mt tm hnh tt v n c mu sc so v r rng. Mt graphic trong Windows gm c nhiu m nh, mi m, c gi l mt pixel, c kh nng hin th 16, 256, ... mu khc nhau. 1. phn gii (resolution) Thng thng phn gii (resolution) ca mn hnh ta dng l 800x600, tc l chiu ngang c 800 pixels v chiu cao c 600 pixels. Sau ny, xem cc hnh r hn ta cn dng phn gii 1028x768 vi card mn hnh SuperVGA v mn hnh tt. Ta ni card SuperVGA c n 2MB RAM, ti sao phi cn n 2MB hin th cc hnh nh ho p? Nu mu ca mi pixel c biu din bi mt byte d liu th vi mt byte ta c th cha mt con s t 0 n 255, v d: ngi ta quy c rng s 0 tng trng cho mu en, s 255 tng trng cho mu trng chng hn. Nu phn gii ca mn hnh l 1024x768 th ta s cn 1024x768=786432 bytes, tc l gn 0,8 MB. Mt byte c 8 bits. i khi ta nghe ni 16 bt mu, iu ny c ngha l thay v 1 byte ngi ta dng n 2 bytes cho mi pixel. Nh vy mi pixel ny c kh nng hin th 216 = 65536 mu khc nhau. Mun dng 16 bt mu cho SuperVGA, ta cn phi c 1024x768x2 =1572864 bytes, tc l gn 1,6 MB. l l do ti sao ta cn 2MB RAM. Lu l RAM ca VGA card (Vector Graphic Adapter) khng lin h g vi RAM ca b nh my tnh. Nn nh rng cng mt hnh nh ho hin th trn hai mn hnh c cng phn gii, v d nh 800x600, nhng kch thc khc nhau, v d nh 14 inches v 17 inches, th d nhin hnh trn mn hnh 17 inches s ln hn, nhng n vn c cng mt s pixels, c iu pixel ca n ln hn pixel ca mn hnh 14 inches. Ni mt cch khc, nu ta dng mn hnh ln hn th nh ho s ln hn nhng khng c ngha l n r hn. Mun thy r chi tit, ta phi lm cho ho c phn gii cao hn. Ta thay i Display Properties ca mt mn hnh bng cch nhp chut phi ln desktop ri 113

chn Properties, k nhn vo Tab Settings ri chn Screen resolution v Color quality ging nh hnh di y:

Khi ta tng phn gii ca mn hnh, cc hnh nh s nh li v kch thc ca pixel c thu nh li. Do , ta c th cho hin th nhiu th hn trn desktop. Cht lng ca cc nh ho vn khng thay i, mc du hnh nh hn. Chng ta cn lu l mun hnh r hn th khi xy dng v lu tr nh ho, ta phi dng mt phn gii cao. 2. Mu (color) Khi ta dng ch c mt bt (ch c tr s 0 hay 1) cho mi pixel th ta ch c trng hay en. Lc y ta c th dng mt byte (8 bt) cho 8 pixels. Du vy, nu phn gii ca nh cao th hnh cng p. Visual Basic 6 cho ta ch nh mt con s vo mi mu VB c th hin th, hay chn trc tip mt mu t Dialog. C bn cch ch nh mu, v d: chng ta ch nh trc tip mt con s hay chn mt mu t bng mu:

114

Chng ta cng c th chn mt trong cc hng s nh ngha sn trong VB, gi l intrinsic color constants, chng hn nh vbRed , vbBlue. Danh sch ca intrinsic color constants ly t VB6 online help c lit k di y:

Dng hm QBColor chn mt trong 16 mu. Hm QBColor xut pht t thi Quick Basic (QBasic) v trong QBasic chng ta c th dng cc con s 1, 2, 3... ch nh cc mu Blue, Green, Cyan Hm QBColor n gin ha cch dng mu, ngi s dng khng cn phi bn tm v cch trn ba loi mu cn bn Red, Green, Blue. Chng ta vit code mt cch n gin nh sau:

Di y l tr s cc mu ta c th dng vi hm QBColor. Tr s 0 1 2 3 4 5 6 7 Mu Black Blue Green Cyan Red Magenta Yellow White Tr s 8 9 10 11 12 13 14 15 Gray Light Blue Light Green Light Cyan Light Red Light Magenta Light Yellow Bright White Mu

Dng hm RGB trn ba mu Red, Green v Blue. Trong bng lit k cc intrinsic color constants pha trn, nu chng ta s thy vbWhite(0xFFFFFF) l tng s ca vbRed(0x0000FF), vbGreen(0x00FF00) v vbBlue(0xFF0000). Mt mu c biu din bng s pha trn ca ba thnh phn mu cn bn, mi mu bng mt byte c tr s t 0 n 255. H thng s ta dng hng ngy l h thp thn (decimal). Tr s 0xFF ca vbRed l con s 255 vit di dng thp lc phn (Hexadecimal hay cn gi l Hex v y c nh du bng 0x trc con s phn bit vi s thp phn). Trong h thng s Hex ta m t 0 n 9 ri A,B,C,D,E,F ri qua s dng thp lc 10, 11,.., 19, 1A, 1B, ..1E, 1F, 20, 21 Tc l thay v ch dng 10 k hiu t 0 n 9 trong h thp phn, ta dng 16 k hiu t 0..9, A..F. 115

Trong hnh di y l mt v d cho thy mu xanh nht c chn gm ba thnh phn Blue(0x990000= 153*256*256), Green(0xCC00= 204*256) v Red(0xFF= 255):

Ghi ch: Chng ta c th dng Windows Calculator hon chuyn s gia cc dng Decimal, Binary v Hexadecimal. Chn View|Scientific thay v View|Standard.

II.

Hm RGB

p dng Hm RGB, ta s vit mt chng trnh VB6. Chng ta hy khi ng mt chng trnh VB6 mi, b vo mt Label tn Label1 vi Caption Red v mt Vertical Scroll tn VScroll1. K select c hai Label1 v VScroll1 ri Copy v Paste hai ln l thm hai cp. i Caption ca hai Label mi ny ra Green v Blue. By gi ta c mt Array ba Vertical Scrolls cng tn VScroll1, vi index l 0,1 v 2. t mt PictureBox tn picColor vo bn phi ba VScrolls. Thm mt Label pha di, t tn n l lblRGBValue, nh clear caption ca n, ng c ch Label1 nh di y:

116

By gi chn c ba VScrolls v thay i gi tr ca property Max trong ca s Properties thnh 255, mc ch l khi ko thanh iu chnh ca mt VScroll1 ln xung ta gii hn tr s ca n t Min l 0 n Max l 255.

Ni dung chnh ta phi lm l vit m chng trnh x l Event Change ca cc VScrolls. V chng l mt Array nn ta c th dng mt Sub duy nht handle events n t c ba VScrolls. Mi lc mt trong 3 VScrolls thay i tr s ta s trn ba mu Red, Green, Blue biu din bi tr s ca 3 VScrolls thnh mu BackColor ca PictureBox picColor. ng thi ta cho hin th tr s ca ba thnh phn mu Red, Green v Blue trong Label lblRGBValue. Chng ta hy double click ln mt trong 3 VScrolls ri vit code nh sau: 117

Private Sub VScroll1_Change(Index As Integer) ' Use Function RGB to mix 3 colors VScroll1(0) for Red, ' VScroll1(1) for Green and VScroll1(2) for Blue ' and assign the result to BackColor of PictureBox picColor picColor.BackColor = RGB(VScroll1(0).Value, VScroll1(1).Value, VScroll1(2).Value) ' Variable used to prepare hin th string Dim strRGB As String ' Description of what is hin thed strRGB = "picColor.BackColor = RGB(Red, Green, Blue) " & vbCrLf ' Values of Red, Green, Blue in Decimal strRGB = strRGB & " Decimal: " & VScroll1(0).Value & ", " & VScroll1(1).Value & ", " & VScroll1(2).Value & vbCrLf ' Values of Red, Green, Blue in Hexadecimal strRGB = strRGB & " Hex: 0x" & Hex(VScroll1(0).Value) & ", 0x" & Hex(VScroll1(1).Value) & ", 0x" & Hex(VScroll1(2).Value) ' Assign the resultant string to caption of Label lblRGBValue lblRGBValue.Caption = strRGB End Sub

Chng ta hy khi ng chng trnh ri nm cc bar ca 3 VScrolls ko ln, ko xung xem kt qu. Ca s ca chng trnh s c dng ging nh di y:

III. Mt s k thut
1. Color Mapping

Nu dng Hex Calculator i con s 0xFFFFFF ra decimal ta s c 16777215, nu k c s 0 ta s c tng cng 16777216 mu. Lc ny ta bn v 8bt (1 byte) v 16bt (2 bytes) color, nhng y ta ni chuyn 3 byte color. Nh th c th mn hnh khng kh nng cung 118

cp mi mu m hm RGB tnh ra. Vy vi nhng my tnh s dng VGA card th ta s lm th no? V d mt VGA card ch h tr n 8 bits v n ch c kh nng cung cp 256 mu khc nhau. Nu hm RGB i hi mt mu m VGA card c th cung cp chnh xc th tt, nu khng n s tm cch dng hai hay ba m mu gn nhau trn mu v cho ta o tng mu ta mun. Cng tc ny c gi l Color Mapping v mu c lm ra c gi l custom color. 2. Dng Intrinsic Color Constants Mt trong nhng features ca MSWindows l cho ta chn Color Scheme ca Windows theo s thch. Bnh thng, Color Scheme ca Windows l Blue, nhng ta c th chn Olive Green hay Silver, nu ta mun.

Ch tuy nhin nu ta dng mt mu m hin th tuyt p th g trong chng trnh VB6 m by gi ngi s dng t nhin thay i Color Scheme thnh Olive Green chng hn khin cho mu m y coi chng ging ai trong Color Scheme mi. trnh trng hp y, thay v ni thng ra l mu g (xanh hay ) ta ni dng mu vbActiveTitlebar hay vbDesktop, .v.v. Dng Intrinsic Color Constant s bo m mu ta dng s c bin i theo Color Scheme m ngi s dng chn khi b trng hp mu tr nn chng ging ai. Lc thit k, ta cng c th chn Intrinsic Color Constant t Tab System khi chn mu.

119

3.

Tp tin ho

Khi mt nh ho c lu tr theo dng s pixels vi mu ca chng nh ni trn th ta gi l mt Bit Map v tn tp tin ca n trong a c phn m rng l BMP, v d nh House.bmp. Lu tr kiu ny cn rt nhiu b nh v bt tin gi i hay hin th trn mt trang Web. Do ngi ta dng nhng k thut gim thiu lng b nh cn cha nh ho nhng vn gi c cht lng ca hnh nh. C hai dng tp tin ho rt thng dng trn Web, mang tn vi phn m rng l JPG v GIF. c bit vi tp tin GIF ta c th cha c nh ng (animation), tc l mt GIF file c th cha nhiu hnh (gi l Frames) chng ln lt thay nhau hin th, to cho ngi xem c cm gic nh mt vt ang di ng.

120

CHNG 8. KT NI N C S D LIU
T phin bn 5.0, Visual Basic cung cp mt control truy cp c s d liu c gi l Data. Nh ta bit, c mt b x l c s d liu ca Microsoft gi km theo VB6 - l Jet Database Engine. Jet Database Engine l cng c x l d liu ca h qun tr c s d liu MS Access. Cho n VB6, Microsoft cho ta ba k thut chnh: - DAO (Data Acess Objects): DAO l k thut c bit ca Microsoft, ch dng vi Jet Database Engine. N rt d dng, hiu qu v tin li nhng b gii hn trong phm vi MS Access. D vy, n rt thnh hnh v rt d s dng v mang li hiu qu cao. - ODBC (Open Database Connectivity): ODBC c thit k cho php ngi s dng kt ni vi loi c s d liu m ch dng mt phng thc duy nht. iu ny gim bt gnh nng cho lp trnh vin. Ta ch cn hc mt k thut lp trnh duy nht m c th lm vic vi bt c loi c s d liu no. Nht l sau ny nu cn phi thay i loi c s d liu, nh nng cp t Access ln SQLServer chng hn, th s sa i v m ngun chng trnh rt t. Khi dng ODBC chung vi DAO, ta c th cho c s d liu ca Access ni vi cc c s d liu khc. C mt bt li ca ODBC l hi phc tp khi s dng. - RDO (Remote Data Object): Mt trong nhng l do chnh RDO c thit k l gii quyt kh khn v s rc ri ca ODBC. Cch lp trnh vi RDO n gin nh DAO, nhng tht ra n dng ODBC nn cho php ngi s dng ni vi nhiu c s d liu. Tuy nhin, RDO khng c thnh hnh lm. VB6 tip tc h tr cc k thut ni trn, v cho thm mt k thut truy cp c s d liu mi, rt quan trng, l ADO (ActiveX Data Objects).

I. S dng Data Control


Cch dng gin tin ca Data Control l t n ln mt Form ri lm vic vi nhng Properties ca n. Chng ta hy bt u mt d n VB6 mi, cho n tn DataControl bng cch click tn ca d n trong Project Explorer bn phi ri thay i cc thuc tnh trong Properties Window. DoubleClick ln Icon ca Control Data trong Toolbox. Mt Control Data tn Data1 s hin ra trn Form. Mun cho n nm bn di Form, ging nh mt StatusBar, hy thit lp property Align ca n trong Properties Window thnh 2 - Align Bottom. Click bn phi dng thuc tnh DatabaseName, k click ln nt browse c ba chm chn mt file Access dabase t giao thoi cho Data1. y ta chn E:\Program Files\Microsoft Visual Studio\VB98\BIBLIO.MDB , trong my tnh ca chng ta c th n nm trn disk C hay D.

121

Trong chng trnh ny ta mun lm vic vi bng Titles ca c s d liu BIBLIO.MDB, xem v hiu chnh cc bn ghi. thuc tnh DefaultType ca Data1 c tr s 2- UseJet, tc l dng k thut DAO, thay v dng k thut ODBC. Khi chng ta click ln thuc tnh Recordsource ca Data1, ri click ln ci tam gic nh bn phi, mt ComboBox s m ra cho ta thy danh sch cc bng trong c s d liu. Chng ta hy chn Titles. thuc tnh RecordsetType ca Data1 c tr s l 0 - Table:

Thut ng mi m ta s dng thng xuyn khi truy cp d liu trong VB6 l Recordset (tp hp cc bn ghi). Recordset l mt tp hp cc bn ghi, n c th cha mt s cc bn ghi hay khng c bn ghi no c. Mt bn ghi trong Recordset c th l mt bn ghi ly t mt Bng. Trong trng hp y c th ta ly v tt c bn ghi trong bng hay ch nhng bn ghi tha mn mt iu kin, v d nh ta ch mun ly cc bn ghi ca nhng sch xut bn trc nm 1990 (Year Published < 1990).

122

Mt bn ghi trong Recordset cng c th l tp hp cc ct (columns) t hai hay nhiu bng qua cc mi lin h one-to-one v one-to-many. V d, khi ly cc bn ghi t bng Titles, ta mun c thm chi tit tn cng ty (Company Name) v in thoi (Telephone) ca nh xut bn (bng Publishers) bng cch dng Foreign Key PubID trong bng Titles lm Primary Key trong bng Publishers ly cc chi tit y. Trong trng hp ny ta c th xem nh c mt bng o l tp hp ca hai bng Titles v Publishers. By gi chng ta hy t ln Form 4 labels vi captions: Title, Year Published, ISBN v Publisher ID. K cho thm 4 textboxes tng ng v t tn chng l txtTitle, txtYearPublished, txtISBN v txtPublisherID. Chn textbox txtTitle, ri thit lp thuc tnh Datasource ca n trong Properties Window thnh Data1. Khi click ln thuc tnh Datafield ca txtTitle v m ComboBox ra chng ta s thy lit k tn cc trng trong bng Titles. l v Data1 c coi nh trung gian ly t bng Titles ca c s d liu. y ta s chn ct Title. Lp li cng tc ny cho 3 textboxes kia, v chn cc ct Year Published (nm xut bn), ISBN (s l lch trong th vin quc t), v PubID (s l lch nh xut bn) lm Datafield cho chng.

Ti y, mc du cha vit mt dng code, ta c th chy chng trnh c ri. N s hin th chi tit ca bn ghi u tin trong bng Titles nh di y:

123

Chng ta c th bm cc nt di chuyn Navigator Buttons i n cc bn ghi u (first), trc (previous), k (next) v cui (last). Mi ln chng ta di chuyn n mt bn ghi mi l chi tit ca bn ghi y s hin th. Nu khng dng cc Navigator Buttons, ta cng c th code lm cng tc tng ong bng cch gi cc Recordset methods MoveFirst, MovePrevious, MoveNext v MoveLast. Khi bn ghi cui ca Recordset ang hin th, nu ta gi phng thc MoveLast th thuc tnh EOF (End-Of-File) ca Recordset tr thnh True. Tng t nh vy, khi bn ghi th nht ca Recordset ang hin th, nu ta gi phng thc MovePrevious th thuc tnh BOF (Begin-Of-File) ca Recordset tr thnh True. Nu mt Recordset khng c cha mt bn ghi no c th c hai thuc tnh EOF v BOF u l True. c tnh hin th d liu trong cc textbox theo ng bn ghi hin thi (current record) c gi l data binding hay data bound (rng buc d liu) v control TextBox h tr chc nng ny c ni l Data Aware (nhn bit d liu). Khi bn ghi u tin ang hin th, nu chng ta sa i Year Published i t 1985 thnh 1983 ri nhn nt lnh Next hin th bn ghi th nh, k nhn nt Previous hin th li bn ghi u tin th chng ta s thy l trng Year Published ca bn ghi u tin tht s c thay i (updated) thnh 1983. iu ny c ngha rng khi duyt Data1 t bn ghi ny n bn ghi khc th nu bn ghi ny c s thay i v ngi s dng sa i, n lu tr s thay i trc khi di chuyn. Cha chc l chng ta mun iu ny, do , nu chng ta khng mun ngi s dng tnh c sa i mt bn ghi th chng ta c th thit lp thuc tnh Locked ca cc textboxes y thnh True ngi s dng khng th sa i cc textboxes nh trong hnh di y:

1.

Ch nh v tr c s d liu lc chy chng trnh

Cch ch nh tn DatabaseName trong giai on thit k (at design time) ta dng trc y tuy tin li nhng hi nguy him, v khi ta ci chng trnh ny ln my tnh ca khch, cha chc tp tin c s d liu y nm trong mt th mc c cng tn. V d trn my tnh ngi lp trnh th c s d liu nm trong th mc E:\Program Files\Microsoft Visual Studio\VB98, nhng trn my tnh ca khch th c s d liu nm trong th mc C:\VB6\DataControl chng hn. Do , khi chng trnh khi ng ta nn xc nh li v tr ca c s d liu. Gi d ta mun c s d liu trong cng mt th mc vi chng trnh ang chy, ta c th dng thuc tnh Path ca Application Object App nh sau:
Dim AppFolder As String

124

Private Sub Form_Load() ' Fetch Folder where this program EXE resides AppFolder = App.Path ' make sure it ends with a back slash If Right(AppFolder, 1) <> "\" Then AppFolder = AppFolder & "\" ' Assign Full path database filename to Data1 Data1.DatabaseName = AppFolder & "BIBLIO.MDB" End Sub

Vi cch code ni trn ta s m bo chng trnh tm thy tp tin c s d liu ng ch m khng cn bit ngi ta ci chng trnh chng ta u trong a cng ca my tnh khch. 2. Thm bt cc bn ghi Chng trnh trn dng cng tm c, nhng n khng cho ta phng tin thm (add), bt (delete) cc bn ghi. By gi chng ta hy vo Form 5 buttons tn: cmdEdit, cmdNew, cmdDelete, cmdUpdate v cmdCancel. Mc du chng ta khng thy, nhng tht ra Control Data Data1 c mt thuc tnh Recordset v khi ta dng Navigator buttons l di chuyn t bn ghi ny n bn ghi khc trong Recordset y. Ta c th ni n n bng Notation (cch vit) Data1.Recordset, v mi ln mun ly Recordset mi nht t c s d liu ta dng phng thc Refresh nh Data1.Recordset.Refresh. Lc chung trnh mi khi ng, ngi s dng ang xem (browsing) cc bn ghi th hai buttons Update v Cancel khng cn phi lm vic. Do ta s nhn tin Lock (kha) cc textboxes v disable (lm cho bt lc) hai buttons ny v khng cn dng chng. Trong Sub SetControls di y, ta dng mt parameter gi l Editing vi tr s False hay True ty theo ngi s dng ang Browse hay Edit, ta gi l Browse mode v Edit mode. Trong Edit mode, cc Textboxes c unlocked (m kha) v cc nt cmdNew, cmdDelete v cmdEdit tr nn bt lc:
Sub SetControls(ByVal Editing As Boolean) ' Lock/Unlock textboxes txtTitle.Locked = Not Editing txtYearPublished.Locked = Not Editing txtISBN.Locked = Not Editing txtPublisherID.Locked = Not Editing ' Enable/Disable buttons CmdUpdate.Enabled = Editing CmdCancel.Enabled = Editing CmdDelete.Enabled = Not Editing cmdNew.Enabled = Not Editing CmdEdit.Enabled = Not Editing End Sub

Trong Browse mode, Form c dng nh sau:

125

Sub SetControls c gi trong Sub Form_Load khi chng trnh khi ng v trong Sub CmdEdit khi ngi s dng click nt Edit nh sau:
Private Sub Form_Load() ' Fetch Folder where this program EXE resides AppFolder = App.Path ' make sure it ends with a back slash If Right(AppFolder, 1) <> "\" Then AppFolder = AppFolder & "\" ' Assign Full path database filename to Data1 Data1.DatabaseName = AppFolder & "BIBLIO.MDB" ' Place controls in Browse Mode SetControls (False) End Sub Private Sub CmdEdit_Click() ' Place controls in Edit Mode SetControls (True) End Sub

Khi ta xa mt bn ghi trong recordset, v tr ca bn ghi hin ti (current record) vn khng thay i. Do , sau khi xa mt bn ghi ta phi MoveNext. Tuy nhin, nu ta va xa bn ghi cui ca Recordset th sau khi MoveNext, thuc tnh EOF ca Recordset s thnh True. Thnh ra ta phi kim tra iu , nu ng vy th li phi MoveLast hin th bn ghi cui ca Recordset nh trong code ca Sub cmdDelete_Click di y:
Private Sub CmdDelete_Click() On Error GoTo DeleteErr With Data1.Recordset ' Delete new record .Delete ' Move to next record .MoveNext If .EOF Then .MoveLast Exit Sub End With DeleteErr: MsgBox Err.Description Exit Sub End Sub

126

Trong lc code, ta Update (cp nht) mt bn ghi trong Recordset bng phng thc Update. Nhng ta ch c th gi phng thc Update ca mt Recordset khi Recordset ang trong Edit hay AddNew mode. Ta t mt Recordset vo Edit mode bng cch gi phng thc Edit ca Recordset, v d nh Data1.Recordset.Edit. Tng t nh vy, ta t mt Recordset vo AddNew mode bng cch gi phng thc AddNew ca Recordset, v d nh Data1.Recordset.AddNew.
Private Sub cmdNew_Click() ' Place Recordset into Recordset AddNew mode Data1.Recordset.AddNew ' Place controls in Edit Mode SetControls (True) End Sub

Sau khi Recordset gi phng thc Update th Recordset y ra khi AddNew hay Edit modes. Ta cng c th t thot ra khi AddNew hay Edit modes, hay ni cho ng hn l hy b mi pending (ang ch i) Update bng cch gi phng thc CancelUpdate, v d nh Data1.Recordset.CancelUpdate. 3. Dng DataBound Combo Trong chng trnh hin ti ta ch hin th l lch nh xut bn (PubID) ca Title, ch khng c thm chi tit. Nu chng trnh lu tr PubID, nhng hin th c Company Name ca nh xut bn cho ta lm vic khi phi nh cc con s th s tt hn. Ta c th thc hin iu bng cch dng Control DBCombo (Data Bound Combo). Chng ta hy dng IDE Menu Command Project | Components... chn Microsoft Data Bound List Controls 6.0 ri click Apply.

K , thm mt DBCombo tn DBCombo1 vo Form. V ta cn mt Recordset khc cung cp Bng Publisher cho DBCombo1, nn chng ta hy thm mt control Data th nh tn Data2 vo Form. Cho Data2, hy thit lp thuc tnh DatabaseName thnh E:\Program Files\Microsoft Visual Studio\VB98\BIBLIO.MDB v thuc tnh RecordSource thnh Publishers. khng cho ngi ta thy hnh Data2 lc run-time, chng ta hy thit lp Visible n thnh False.

127

Mc ch ca chng ta khi dng DBCombo1 l hin th Company Name ca nh xut bn, nhng ng sau lng th khng c g thay i, tc l ta vn lm vic vi PubID cho cc record Title ca Data1. Khi ngi s dng click ln DBCombo1 chn mt nh xut bn, th ta theo Company Name m cha PubID tng ng trong record Title ca Data1. Do c nhiu th ta phi sp t cho DBCombo1 nh sau: Thuc tnh RowSource Listfield Gi tr Data2 Ch thch y l datasource ca chnh DBCombo1. N cung cp bng Publishers.

Company Khi RowSource pha trn c chn ri, Combo ca thuc Name tnh Listfield ny s hin th cc trng ca bng Publishers. Company Name l trng ca RowSource m ta mun hin th trn DBCombo1. Data1 PubID y l datasource ca bn ghi m ta mun. sa i, tc l bn ghi ca bng Titles Trng (ca record Title) s c thay i. Trng trong RowSource (bng Publishers) tng ng vi item user chn trong DBCombo1 (Company Name).

DataSource Datafield

BoundColumn PubID

Khi trong Edit mode user chn mt Company Name khc trong DBCombo1 ri click nt Update chng ta s thy Textbox txtPublisherID cng i theo v hin th con s l lch PubID mi. Nu trc khi Update chng ta mun thy PubID mi hin th trong Textbox txtPublisherID th chng ta c th dng Event Click ca DBCombo1 nh sau:
Private Sub DBCombo1_Click(Area As Integer) ' Hin th new PuBID txtPublisherID.Text = DBCombo1.BoundText End Sub

Thuc tnh BoundText ca DBCombo1 l tr s ca BoundColumn m ta c th truy cp (vit hay c) c. V d nh chng ta mun mi khi thm mt bn ghi Title mi th default PubID l 324, tc l Company Name= "GLOBAL ENGINEERING". Chng ta c th assign tr s 324 vo thuc tnh BoundText ca DBCombo1 trong Sub cmdNew_Click nh sau:
Private Sub cmdNew_Click() ' Place Recordset into Recordset AddNew mode

128

Data1.Recordset.AddNew ' Default Publisher is "GLOBAL ENGINEERING", i.e. PubID=324 DBCombo1.BoundText = 324 ' Place controls in Edit Mode SetControls (True) End Sub

II.
1.

Lp trnh vi k thut DAO


Tham chiu DAO

Trong phn ny chng ti gii thiu nhng bc lp trnh cn bn vi MS Access Database qua k thut DAO m khng cn dng n Control Data nh trong phn trc. Ta s cn n vi Objects trong th vin DAO, do nu chng ta m mt d n VB6 mi th hy dng Menu Command Project | References... chn Microsoft DAO 3.51 Object Library bng cch click ln checkbox bn tri nh trong hnh di y.

Sau trong code ca Form chnh ta s khai bo bin myDatabase cho mt instance ca DAO database v bin myRS cho mt DAO recordset. y ta ni r Database v Recordset l thuc loi DAO phn bit vi Database v Recordset thuc loi ADO (ActiveX Data Object) sau ny.

129

By gi chng ta hy t ln Form chnh, tn frmDAO, 4 labels vi captions: Title, Year Published, ISBN v Publisher ID. K cho thm 4 textboxes tng ng v t tn chng l txtTitle, txtYearPublished, txtISBN v txtPublisherID. iu ta mun lm l khi Form mi c loaded, n s ly v t c s d liu mt Recordset cha tt c bn ghi trong bng Titles theo th t v mu t (alphabetical order) ca field Title v hin th bn ghi u tin. 2. Dng keyword SET Cng vic u tin cn lm l m mt Database Object da vo tn y (full path name) ca Access database:
' Open main database Set myDB = OpenDatabase(AppFolder & "BIBLIO.MDB")

ch Set trong cu lnh c vit trn. l v myDB l mt Pointer n mt Object. Mc du t y v sau ta s dng myDB nh mt Database theo cch ging nh bt c bin thuc kiu d liu no khc, nhng khi ch nh ln u l n t u n th ta dng ch Set, ni rng tht ra myDB khng phi l Object Database, nhng l Pointer n Object Database. Mc ch l VB6 dnh ra cho khi cn thc hin mt phn trong b nh cha Object Database khi ta nhn c n t s thc thi ca Phng thc OpenDatabase. Mc d v tr ch cha Object Database trong b nh khng nht nh, nhng v ta nm con tr ch n v tr y nn ta vn c th lm vic vi n mt cch bnh thng. Con tr l value (tr s) ca bin myDB. V gi tr ny khng phi l Object, nhng n cha memory address ch n (point to hay refer to) Object Database, nn ta gi n l Pointer. Lp trnh dng Pointer ni chung rt linh ng v mang li hiu qu cao trong cc ngn ng nh C, Pascal, C++ ,v.v.. Tuy nhin, lp trnh vin phi nh tr li h iu hnh phn b nh mnh dng khi khng cn cn n na h iu hnh li ly ch cho Object khc. Nu cng vic qun l dng li b nh khng n tha th c nhng mnh b nh nm ri rc m h iu hnh khng bit. Dn dn h iu hnh s khng cn b nh cp pht cho cc hot ng tip theo na. Ta gi hin tng y l memory leakage (hao mn b nh). Cc ngn ng sau ny nh Java, C# u khng dng Pointer na. Visual Basic khng mun lp trnh vin dng Pointer. Ch trong vi trng hp c bit VB6 mi l ra cho ta thy tht ra trong hu trng VB6 Runtime dng Pointer nh trong trng hp ny. Tng t nh vy, v Recordset l mt Pointer n mt Object, ta cng dng Set khi ch nh mt DAO Recordset ly v t Phng thc OpenRecordset ca c s d liu myDB.
'Open recordset Set myRS=myDB.OpenRecordset("Select*from Titles ORDER BY Title")

Ci parameter loi String ta dng cho phng thc OpenRecordset l mt Lnh (Statement) SQL. N ch nh cho c s d liu ly tt c mi trng (columns) (Select *) ca mi bn ghi t Bng Titles (from Titles) lm mt Recordset v sp xp cc bn ghi trong Recordset y theo alphabetical order ca trng Title (ORDER BY Title). Nh l Recordset ny cng ging nh thuc tnh Recordset ca mt Control Data m ta dng trong phn trc. By gi c Recordset ri, ta c th hin th chi tit ca bn ghi u tin nu Recordset y c t nht mt bn ghi. Ta kim tra iu y da vo thuc tnh RecordCount ca Recordset nh trong code di y:
Private Sub Form_Load()

130

' Fetch Folder where this program EXE resides AppFolder = App.Path ' make sure it ends with a back slash If Right(AppFolder, 1) <> "\" Then AppFolder = AppFolder & "\" ' Open main database Set myDB = OpenDatabase(AppFolder & "BIBLIO.MDB") 'Open recordset Set myRS=myDB.OpenRecordset("Select * from Titles ORDER BY Title") ' if Recordset is not empty then hin th the first record If myRS.RecordCount > 0 Then myRS.MoveFirst ' move to first record Hin threcord ' hin th details of current record End If End Sub

Sau khi dng phng thc MoveFirst ca Recordset nh v con tr hin ti bn ghi u tin, ta hin th tr s cc trng ca bn ghi bng cch ghi gi tr chng vo cc textboxes ca Form nh sau:
Private Sub Hin threcord() ' Assign record fields to the appropriate textboxes With myRS ' Assign field Title to textbox txtTitle txtTitle.Text = .Fields("Title") txtYearPublished.Text = .Fields("[Year Published]") txtISBN.Text = .Fields("ISBN") txtPublisherID.Text = .Fields("PubID") End With End Sub

v trng Year Publshed gm c hai ch nn ta phi t tn ca trng y gia hai du ngoc vung ([]). trnh b phin phc nh trong trng hp ny, khi chng ta t tn trng trong lc thit k mt bng hy dn dnh cc ch li vi nhau, ng ri ra. V d, nn dng YearPublished thay v Year Published. 3. Cc nt di chuyn Mun c cc nt duyt tng ng vi ca mt Control Data, chng ta hy t ln Form 4 buttons mang tn CmdFirst, CmdPrevious, CmNext v CmdLast vi captions: <<, <, >, >>. Vit m lnh cho cc nt ny cng n gin, nhng ta phi coi chng khi ngi s dng mun di chuyn qu bn ghi cui cng hay bn ghi u tin. Ta phi kim tra xem EOF c tr thnh True khi ngi s dng click CmdNext, hay BOF c tr thnh True khi ngi s dng click CmdPrevious:
Private Sub CmdNext_Click() myRS.MoveNext ' Move to ' Display record details If Not myRS.EOF Then Displayrecord ' hin Else myRS.MoveLast ' Move End If End Sub next record if has not gone past the last record th details of current record back to last record

131

Private Sub CmdPrevious_Click() myRS.MovePrevious ' Move to previous record ' Display record details if has not gone past the first record If Not myRS.BOF Then Displayrecord ' hin th details of current record Else myRS.MoveFirst ' Move back to first record End If End Sub Private Sub CmdFirst_Click() myRS.MoveFirst ' Move back to first record Displayrecord ' hin th details of current record End Sub Private Sub CmdLast_Click() myRS.MoveLast ' Move back to last record Displayrecord ' hin th details of current record End Sub

Khi chy chng trnh chng ta s thy n hin th chi tit ca bn ghi u tin khc vi trong phn trc y v cc bn ghi c sp xp:

4.

Thm bt cc bn ghi

Ging nh chng trnh trong phn trc, ta s thm cc nt chn thm (add), bt (delete) cc bn ghi. By gi chng ta hy vo Form 5 cc nt lnh c tn: cmdEdit, cmdNew, cmdDelete, cmdUpdate v cmdCancel. Ch no trong chng trnh trc ta dng Data1.Recordset th by gi ta dng myRS. Ta s dng li Sub SetControls vi parameter Editing c tr s False hay True ty theo ngi s dng ang Browse hay Edit. Trong Browse mode, cc Textboxes b Locked (kha) v cc nt cmdUpdate v cmdCancel tr nn bt lc. Trong Edit mode, cc Textboxes c unlocked (m kha) v cc nt cmdNew, cmdDelete v cmdEdit tr nn bt lc. V y khng c Data Binding nn i cho n khi Update ta mi t Recordset vo AddNew hay Edit mode. Do ta ch cn nh l khi ngi s dng edits l ang sa i mt bn ghi hin hu hay thm mt bn ghi mi. Ta cha tr s Boolean y trong variable AddNewRecord. Nu ngi s dng sp thm mt bn ghi mi th AddNewRecord = True, nu ngi s dng sp sa i mt bn ghi hin hu th AddNewRecord = False. 132

Ngoi ra, khi ngi s dng sp thm mt bn ghi mi bng cch click nt New th ta phi t clear (lm trng) ht cc textboxes bng cch xc nhn Empty vo thuc tnh Text ca chng nh sau:
' If Editing existing record then AddNewRecord = False ' Else AddNewRecord = true Dim AddNewRecord As Boolean Private Sub ClearAllFields() ' Clear all the textboxes txtTitle.Text = "" txtYearPublished.Text = "" txtISBN.Text = "" txtPublisherID.Text = "" End Sub Private Sub cmdNew_Click() ' Remember that this is Adding a new record AddNewRecord = True ' Clear all textboxes ClearAllFields ' Place controls in Edit Mode SetControls (True) End Sub Private Sub CmdEdit_Click() ' Place controls in Edit Mode SetControls (True) ' Remember that this is Editing an existing record AddNewRecord = False End Sub

Nu ngi s dng nhn Cancel trong khi ang edit cc textboxes, ta khng cn gi phng thc CancelUpdate v Recordset cha b t vo AddNew hay Edit mode. y ta ch cn hin th li chi tit ca current record, tc l hy b nhng g ngi s dng ang nh vo:
Private Sub CmdCancel_Click() ' Cancel update SetControls (False) ' Redisplay details or current record Displayrecord End Sub

Lc ngi s dng nhn Update, chng ta c dp kim tra data xem c trng no b b trng (nht l Primary Key ISBN bt buc phi c tr s) hay c g khng valid bng cch gi Function GoodData. Nu GoodData tr li mt tr s False th ta khng xc tin vi vic Update. Nu GoodData tr v tr s True th ta t Recordset vo AddNew hay Edit mode ty theo tr s ca Boolean variable AddNewRecord. Ging nh khi hin th chi tit ca mt bn ghi ta phi ghi tng trng vo textbox, th by gi khi Update ta phi lm ngc li, tc l ghi gi tr Text ca tng textbox vo Record Field tng ng. Sau cng ta gi phng thc Update ca recordset v cho cc controls tr li Browse mode:
Private Function GoodData() As Boolean ' Check Data here. If Invalid Data then GoodData = False

133

GoodData = True End Function Private Sub CmdUpdate_Click() ' Verify all data, if Bad then do not Update If Not GoodData Then Exit Sub ' Assign record fields to the appropriate textboxes With myRS If AddNewRecord Then .AddNew ' Place Recordset in AddNew Mode Else .Edit ' Place Recordset in Edit Mode End If ' Assign text of txtTitle to field Title .Fields("Title") = txtTitle.Text .Fields("[Year Published]") = txtYearPublished.Text .Fields("ISBN") = txtISBN.Text .Fields("PubID") = txtPublisherID.Text ' Update data .Update End With ' Return controls to Browse Mode SetControls (False) End Sub

Cng v khng c Data Binding, nn khi ngi s dng xa mt bn ghi, sau khi di chuyn qua bn ghi k tip ta phi t hin th chi tit ca bn ghi nh sau:
Private Sub CmdDelete_Click() On Error GoTo DeleteErr With myRS .Delete ' Delete new record .MoveNext ' Move to next record If .EOF Then .MoveLast Displayrecord ' Display details of current record Exit Sub End With DeleteErr: MsgBox Err.Description Exit Sub End Sub

5.

Tm mt bn ghi

Tip theo y, ta mun lit k cc sch c tiu cha mt ch hay cu no , v d nh ch "Guide". K ngi s dng c th chn mt sch bng cch chn tiu sch y v click nt Go. Chng trnh s nh v n bn ghi ca sch y v hin th chi tit ca n. By gi chng ta hy cho vo Form mt textbox tn txtSearch v mt Image tn ImgSearch. K t mt frame tn fraSearch vo Form. ln frame ny mt listbox tn List1 hin th tiu cc sch, v hai buttons tn CmdClose v CmdGo, vi nhn l Close v Go. Sau khi la chn mt cun sch trong List1, ngi s dng s click nt Go hin th chi tit sch y. Nu i , ngi s dng s click nt Close lm bin mt frame fraSearch. Bnh thng frame fraSearch ch hin ra khi cn, nn lc u hy thit lp Visible ca n thnh False. Ta s cho ImgSearch hin th hnh mt ng dm nn chng ta hy click vo bn 134

phi thuc tnh Picture trong Properties Window chn Icon BINOCULR.ICO t folder E:\Program Files\Microsoft Visual Studio\Common\Graphics\Icons\Misc:

Primary Key ca bng Titles l ISBN. Khi ngi s dng la chn mt cun sch, ta cn phi bit ISBN ca sch y nh v n trong Recordset myRS. Do , trong khi thm tiu ca mt sch vo List1, ta ng thi thm ISBN ca sch y vo mt Listbox th hai tn List2. Ta ch s dng List2 sau hu trng, nn hy thit lp thuc tnh Visible ca n thnh False. Di y l code load tiu sch v ISBN vo cc Listboxes:
Private Sub ImgSearch_Click() ' Show Search Frame fraSearch.Visible = True Dim SrchRS As DAO.Recordset Dim SQLCommand As String ' Define SQL statement SQLCommand = "Select * from Titles where Title LIKE '" & "*" & txtSearch & "*" & "' ORDER BY Title" ' Fetch all records having Title containing the text pattern given by txtSearch Set SrchRS = myDB.OpenRecordset(SQLCommand) ' If Recordset is not Empty then list the books' titles in List1 If SrchRS.RecordCount > 0 Then List1.Clear ' Clear List1 ' We use List2 to contain the Primary Key ISBN corresponding to the books in List1 List2.Clear ' Clear List2 With SrchRS ' Iterate through the Recordset until EOF Do While Not SrchRS.EOF

135

' Hin th Title in List1 List1.AddItem .Fields("Title") ' Store corresponding ISBN in List2 List2.AddItem .Fields("ISBN") .MoveNext ' Move to next record in the Recordset Loop End With End If End Sub

Khi ngi s dng Click ImgSearch vi text pattern l ch Guide, ta s thy hnh di y:

Trong SELECT statement bn trn ta dng ton t LIKE trn text pattern, ch Guide, c wildcard character (*) hai bn. Wildcard character l ch c (hay khng c) ch g cng c. Trong trng hp ny c ngha l ch cn c ch Guide trong tiu sch l c, khng cn bit n nm u. Ngoi ra s chn la ny khng c Case Sensitive, tc l ch guide, Guide hay GUIDE u c c. Khi ngi s dng nhn nt Go, ta s dng phng thc FindFirst ca Recordset myRS nh ch ca bn ghi c tr s Primary Key l dng text trong List2 tng ng vi tiu dc chn trong List1 nh sau:
Private Sub CmdGo_Click() Dim SelectedISBN As String Dim SelectedIndex As Integer Dim Criteria As String ' Index of line selected by user in List1 SelectedIndex = List1.ListIndex ' Obtain corresponding ISBN in List2 SelectedISBN = List2.List(SelectedIndex) ' Define Search criteria - use single quotes for selected text Criteria = "ISBN = '" & SelectedISBN & "'" ' Locate the record, it will become the current record myRS.FindFirst Criteria ' Hin th details of current record Hin threcord ' Make fraSearch disappeared fraSearch.Visible = False End Sub

Lu l trong Criteria ta dng xu k t, v ISBN thuc loi text, ch khng phi l mt con s, nn ta phi t n gia hai du ngoc n. 136

6.

Bookmark

Khi di chuyn t bn ghi ny n bn ghi khc trong Recordset, i khi ta mun nh du v tr ca mt bn ghi c dp s tr li. Ta c th thc hin iu y bng cch ghi nh Bookmark ca Recordset. V d: khi ngi s dng nhn nt Go, ta mun nh v tr ca bn ghi lc y sau ny quay tr li khi ngi s dng nhn nt Go Back. Chng ta hy thm vo Form mt nt lnh tn CmdGoBack vi Caption Go Back. Ta s thm mt variable tn LastBookmark loi data type Variant:
Dim LastBookMark As Variant

Lc u nt lnh CmdGoBack invisible, v ch tr nn visible sau khi ngi s dng nhn nt Go. Ta thm cc dng codes sau vo Sub CmdGo_Click() nh sau:
' Remember location of current record LastBookMark = myRS.BookMark CmdGoback.Visible = True

Di y l code quay tr li v tr current record trc y trong Recordset:


Private Sub CmdGoback_Click() ' Reposition record to last position myRS.BookMark = LastBookMark ' Rehin th details or current record Displayrecord End Sub

7.

LastModified

LastModified l v tr ca bn ghi va mi c sa i hay thm vo trong Recordset. th iu ny chng ta hy thm mt nt lnh khng hin th c tn CmdLastModified vi caption l Last Modified. Nt lnh ny ch hin ra sau khi ngi s dng nhn Update. Bt c lc no chng ta nhn nt CmdLastModified, bn ghi mi va c sa i hay thm vo s hin th:
Private Sub CmdLastModified_Click() ' Reposition record to last position myRS.BookMark = myRS.LastModified ' Redisplay details or current record Displayrecord End Sub

Di y l hnh ca Form lc ang c thit k:

137

III. Lp trnh vi ADO


Visual Basic 6 cho ta nhiu s la chn v k thut khi lp trnh vi c s d liu, hoc l dng DAO nh trong hai phn trc, hoc l dng ADO (ActiveX Data Objects). S khc bit chnh gia ADO v DAO l ADO cho php ta lm vic vi mi loi ngun d liu, khng nht thit phi l c s d liu ca Access hay ODBC. Ngun d liu c th l danh sch cc a ch Email, hay mt tp tin vn bn, trong mi dng l mt bn ghi gm nhng trng ngn cch bi cc du phy. Nu trong DAO ta dng thng tn ca MSAccess Database th trong ADO cho ta ni vi mt c s d liu qua mt Connection bng cch ch nh mt Connection String. Trong Connection String c Database Provider (v d nh Jet, ISAM, Oracle, SQLServer..v.v.), tn C s d liu, UserName/Password ng nhp vo mt c s d liu... Sau ta c th ly v nhng recordsets, v cp nht ha cc bn ghi bng cch dng nhng lnh SQL trn cc bng hay dng nhng th tc lu tr bn trong c s d liu. Bnh thng, khi ta mi khi ng mt d n VB6 mi, Control Data ADO khng c sn trong IDE. Mun c n, chng ta hy dng Menu Command Project | Components..., ri chn Microsoft ADO Data Control 6.0 (OLEDB) t giao din Components nh di y:

Chng ta hy bt u mt d n VB6 mi, cho n tn ADODataControl bng cch click tn project trong Project Explorer bn phi ri thay i thuc tnh Name trong Properties Window. Sa tn ca form chnh thnh frmADO, v nh cu ADO DataControl Demo vo Caption ca n. DoubleClick ln Icon ca Control Data ADO trong Toolbox. Mt Control Data ADO tn Adodc1 s hin ra trn Form. Mun cho n nm bn di Form, ging nh mt StatusBar, hy set property Align ca n trong Properties Window thnh 2 - vbAlignBottom. Click bn phi dng property (Custom), k click ln nt browse c ba chm giao thoi Property Pages hin ra. Trong giao thoi ny, trn Tab General chn Radio (Option) Button Use Connection String ri click nt Build....

138

Trong giao thoi Data Link Properties, Tab Provider, chn Microsoft Jet 3.51 OLE DB Provider, ri click nt Next >> hay Tab Connection.

ch Select or enter a database name ta chn E:\Program Files\Microsoft Visual Studio\VB98\BIBLIO.MDB, trong my tnh ca chng ta c th file y nm trn disk C hay D. Sau , chng ta c th click nt Test Connection pha di th xem connection c c thit lp tt khng. 139

Lp connection xong ri, ta ch nh mun ly g v lm Recordset bng cch chn thuc tnh Recordsource ca Adodc1. Trong giao din Property Pages ca n chn 2-adCmdTable lm Command Type, k m Combo box cho Table or Stored Procedure Name chn bng Titles.

Ty theo cch ta dng Recordset trong ADO, n c ba loi v c gi l Cursor Type. Cursor chng qua l mt tn khc ca Recordset: - Static Cursor: Static Cursor cho chng ta mt static copy (bn sao cng ngc) ca cc bn ghi. Trong lc chng ta dng Static Cursor, nu c ai khc sa i hay thm, bt g vo recordset chng ta s khng thy. - Keyset Cursor: Keysey Cursor hn Static Cursor ch trong lc chng ta dng n, nu c ai sa i bn ghi no chng ta s bit. Nu ai xa bn ghi no, chng ta s khng thy n na. Tuy nhin chng ta s khng bit nu c ai thm mt bn ghi no vo recordset. - Dynamic Cursor: Nh ch sng ng (dynamic) hm , trong lc chng ta ang dng mt Dynamic Cursor, nu c ai khc sa i hay thm, bt g vo recordset chng ta s thy ht. 140

Chng ta hy chn tr s 2-adOpenDynamic cho property Cursor Type ca Adodc1:

By gi chng ta hy t ln Form 4 labels vi captions: Title, Year Published, ISBN v Publisher ID. K cho thm 4 textboxes tng ng v t tn chng l txtTitle, txtYearPublished, txtISBN v txtPublisherID. thc hin Data Binding, chng ta hy chn textbox txtYearPublished (nm xut bn), ri set property Datasource ca n trong Properties Window thnh Adodc1. Khi click ln property DataField ca txtYearPublished v m ComboBox ra chng ta s thy lit k tn cc Trng trong bng Titles. l v Adodc1 c coi nh trung gian ly bng Titles t c s d liu. y ta s chn ct Year Published. Lp li cng tc ny cho 3 textboxes kia, v chn cc ct Title (Tiu ), ISBN (s l lch trong th vin quc t), v PubID (s l lch nh xut bn) lm DataField cho chng.

n y, mc du cha vit mt dng code no, chng ta c th chy chng trnh v n s hin th nh di y:

141

IV. Data Form Wizard


gip lp trnh vin thit k cc data forms nhanh hn, VB6 cho ta Data Form Wizard generate (pht sinh) ra mt form c h tr Edit, Add v Delete bn ghi. By gi chng ta hy khi ng mt standard project VB6 mi, tn ADOClass v copy MS Access file BIBLIO.MDB, tc l c s d liu, vo trong cng th mc ca d n mi ny. Mun dng Data Form Wizard, trc ht ta phi thm n vo mi trng pht trin (IDE) ca VB6. Chng ta hy dng IDE Menu Command Add-Ins | Add-In Manager.... Chn VB6 Data Form Wizard trong giao thoi, ri click Checkbox Loaded/Unloaded ch Loaded hin bn phi dng "VB6 Data Form Wizard" nh trong hnh di y:

Nu chng ta mun mi ln khi ng VB6 IDE l c sn Data Form Wizard trong menu Add-Ins th ngoi option Loaded, chng ta click thm check box Load on Startup. Mt Add-In l mt menu Item mi m ta c th thm vo mt chng trnh ng dng c sn. Thng thng, ngi ta dng Add-Ins thm chc nng cho mt chng trnh, lm nh l chng trnh c sn chc nng y t u. Chng ta hy khi ng Data Form Wizard t IDE Menu Command mi Add-Ins | Data Form Wizard...

142

Khi trang Data Form Wizard - Introduction hin ra, click Next

Trong trang k chn Access lm Database Type.

143

Trong trang Database, click Browse chn mt MS Access database file. y ta chn file BIBLIO.MDB t chnh th mc ca chng trnh ny. on click Next.

Trong trang Form, ta chn Single Record cho Form Layout v Class cho Binding Type. on click Next. Nu ta chn ADO Data Control th kt qu s ging ging nh khi ta dng Control Data DAO nh trong mt phn trc.

Trong trang bn ghi Source ta chn bng Titles. Listbox ca Available Fields s hin th cc trng ca bng Titles. Sau khi chn mt trng bng cch click ln tn trng y trong Listbox, nu chng ta click hnh tam gic ch qua phi th tn trng y s c di qua nm di cng trong Listbox Selected Fields bn phi. 144

Nu chng ta click hnh hai tam gic ch qua bn phi th tt c mi trng cn li bn tri s c di qua bn phi. Chng ta cng c th sp t v tr ca cc trng chn bng cch click ln tn trng y ri click hnh mi tn ch ln hay xung di chuyn trng y ln hay xung trong danh sch cc trng. Ngoi ra, chng ta hy chn Title lm Column to Sort By trong ci Combobox ca n cc bn ghi trong Recordset c sp xp theo th t ABC (alphabetical order) ca trng Tiu (Title).

Trong trang Control Selection, ta s y nguyn c mi buttons. Chng ta hy click Next.

145

Khi Data Form Wizard chm dt, n s generate form frmADODataForm. Chng ta hy remove Form1 v dng Menu Command Project | ADODataControl Properties... i Startup Object thnh frmADODataForm. Th l tm xong chng trnh Edit cc bn ghi ca bng Titles.

Chng ta hy quan st ci Form v phn code c Data Form Wizard generated. Trong frmADODataForm, cc textboxes lm thnh mt array tn txtFields. Mi textbox u c property DataField nh sn tn trng ca bng Titles. V d nh txtFields(2) c DataField l ISBN. Form chnh khng dng Control Data ADO nhng dng mt Object ca class clsTitles. Phn Initialisation ca class clsTitles l Open mt Connection v ly v mt Dataset c tn DataMember l Primary nh sau:
Private Sub Class_Initialize() Dim db As Connection Set db = New Connection db.CursorLocation = adUseClient ' Open connection db.Open "PROVIDER=Microsoft.Jet.OLEDB.3.51;Data Source=E:\Websites\Vovisoft\VisualBasic\ADOForm\BIBLIO.MDB;" ' Instantiate ADO recordset Set adoPrimaryRS = New Recordset ' Retrieve data for Recordset adoPrimaryRS.Open "select Title,[Year Published],ISBN,Description,Notes,PubID from Titles Order by Title", _ db, adOpenStatic, adLockOptimistic ' Define the only data member, named Primary DataMembers.Add "Primary" End Sub

V v tr ca c s d liu, nu chng ta khng mun mt th mc no th dng App.Path xc nh mi lin h gia v tr ca c s d liu v th mc ca chnh chng trnh ang chy, v d nh:
db.Open "PROVIDER=Microsoft.Jet.OLEDB.3.51;Data Source=" & App.Path & "\BIBLIO.MDB;"

Trong Sub Form_Load, ta c th dng For Each i qua ht cc textboxes trong array txtFields. V property Datasource ca textbox l mt Object nn ta dng keyword Set point n n Object PrimaryCLS. ng thi ta cng phi ch nh tn ca DataMember ca mi textbox l Primary:
Private Sub Form_Load()

146

' Instantiate an Object of class clsTitles Set PrimaryCLS = New clsTitles Dim oText As TextBox ' Iterate through each textbox in the array txtFields 'Bind the text boxes to the data source, i.e. PrimaryCLS For Each oText In Me.txtFields oText.DataMember = "Primary" ' Use Set because property Datasource is an Object Set oText.DataSource = PrimaryCLS Next End Sub

Khi s di chuyn t bn ghi ny n bn ghi khc chm dt, chnh Recordset c raise Event MoveComplete. Event y c handled (gii quyt) trong class clsTitles bng cch li raise Event MoveComplete n c handled trong Form.
Dim WithEvents adoPrimaryRS As Recordset Private Sub adoPrimaryRS_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, _ ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset) ' Raise event to be handled by main form RaiseEvent MoveComplete End Sub

Mun handle Event trong clsTitles ta phi declare recordset adoPrimaryRS vi WithEvents: V trong Form ta cng phi declare (object clsTitles) PrimaryCLS vi WithEvents:
Private WithEvents PrimaryCLS As clsTitles

Trong Form, Event MoveComplete s lm hin th v tr tuyt i (Absolute Position) ca bn ghi bng code di y:
Private Sub PrimaryCLS_MoveComplete() 'This will hin th the current record position for this recordset lblStatus.Caption="Record: " & CStr(PrimaryCLS.AbsolutePosition) End Sub

Khi ngi s dng nhn Refresh, cc textboxes s c hin th li vi chi tit mi nht ca bn ghi t trong recordset, nh khi c ai khc sa i bn ghi. Phng thc Requery ca clsTitles li gi phng thc Requery ca Recordset nh sau:
Private Sub cmdRefresh_Click() 'This is only needed for multi user applications On Error GoTo RefreshErr ' fetch the latest copy of Recordset PrimaryCLS.Requery Exit Sub RefreshErr: MsgBox Err.Description End Sub 'In Class clsTitles Public Sub Requery() ' Fetch latest copy of record adoPrimaryRS.Requery

147

DataMemberChanged "Primary" End Sub

148

CHNG 9. THIT K H THNG THC N


Thc n (menu) trong Windows l ni tt c cc chc nng ca mt chng trnh c sp xp th t theo tng loi gip ngi s dng c th gi thc hin mt cch d dng. C hai loi menu ta thng gp : Menu Bar (thanh menu ngang) v Pop-Up Menu (thc n ch xut hin khi c chn). Ta thng dng Menu Bar l thc n chnh v thng t n nm pha trn nh mn hnh. Nm dc theo chiu ngang ca Menu Bar l tn cc nhm chc nng chnh, nu ta click ln mt chc nng no trong Menu Bar th chng trnh s th xung mt Pop-Up vi nhng MenuItems nm dc theo chiu thng ng. Nu ta click ln MenuItem no c du hnh tam gic nh bn phi th chng trnh s popup mt Menu nh trong hnh di y (khi ta click Format | Make Same Size):

I. Main Menu (Thc n chnh)


Ta dng Menu Editor to hoc sa mt thc n cho chng trnh. Thc n thuc v mt Form. Do , trc ht ta chn mt Form lm vic vi Designer ca n. K ta dng Menu Command Tools | Menu Editor hay click ln biu tng ca Menu Editor trn Toolbar lm cho Menu Editor hin ra.

149

u tin c mt vt mu xanh nm trong khung trng ca Menu Editor, ni s hin th Caption ca Menu Command u tin ca Form. Khi ta nh ch &File vo Textbox Caption, n cng hin ra trn vt xanh ni trn. K , chng ta c th nh tn ca Menu Command vo Textbox Name. D ta cho Menu Command mt tn nhng ta t khi dng n, tr trng hp mun n visible/invisible (hin ra/bin mt). Bnh thng ta dng tn ca MenuItems nhiu hn.

c mt Menu nh trong hnh di y ta cn phi hiu chnh thm vo cc MenuItems Open, Save, Close v Exit.

Hnh di y cho thy tt c cc MenuItems ca Menu Command File u nm tht qua bn phi vi bn du chm (....) pha trc. Khi ta click du tn ch qua phi th MenuItem ta ang hiu chnh s c thm bn du chm, tc l tht mt bc trong Menu (Nested).

150

Tng t nh vy, khi ta click du tn ch qua tri th MenuItem ta ang Edit s mt bn du chm, tc l tri mt bc trong Menu. Nu mun cho ngi s dng dng Alt key x dng Menu, chng ta nh thm du & trc k t chng ta mun trong nhn ca thc n. V d Alt-F s th xung Menu ca Menu Command File. Nu chng ta t cho MenuItem &Open tn mnuOpen, th khi chng ta Click ln Caption n trn Form trong lc thit k, VB6 IDE s hin th ci v ca Sub mnuOpen_Click(), ging nh Sub cmdButton_Click() ca mt CommandButton:
Private Sub mnuOpen_Click() MsgBox "You clicked mnuOpen" End Sub

Trong v d trn ta nh thm mt ch th hin th mt thng ip n gin "You clicked mnuOpen". Chng ta c th t cho mt MenuItem tn g cng c, nhng ngi ta thng dng tin v t mnu d phn bit mt menuItem Event vi mt CommandButton Event. Do , ta c nhng tn mnuFile, mnuOpen, mnuSave, mnuClose, mnuExit. Du gch ngang gia MenuItems Close v Exit c gi l Menu Separator. Chng ta c th chn mt du ngn cch Menu bng cch cho Caption n bng du tr ( - ). Ngoi Alt key ta cn c th cho ngi s dng dng Shortcut ca menuItem. cho MenuItem mt Shortcut, chng ta chn cho n mt Shortcut t ComboBox Shortcut trong Menu Editor. Trong hnh di y ta chn Ctrl+O cho mnuOpen.

151

ch mc nh, menuItem c Enabled v Visible. Lc thit k chng ta c th cho MenuItem gi tr khi u ca Enabled v Visible bng cch dng Checkboxes Enabled v Visible. Trong khi chy chng trnh (at runtime), chng ta cng c th thay i cc values Enabled v Visible nh sau:
mnuSave.Enabled = False mnuOpen.Visible = False

Khi mt MenuItem c Enabled=False th n b m v ngi s dng khng dng c. Chng ta dng cc du mi tn ch ln v xung di chuyn MenuItem c la chn ln v xung trong danh sch cc MenuItems. Chng ta dng nt Delete hy b MenuItem c la chn, Insert chn mt MenuItem mi ngay trn MenuItem c la chn v Next chn MenuItem ngay di MenuItem c la chn.

152

II.

Pop-up Menu

i vi ngi s dng, ang khi lm vic vi mt Object trong Windows tin nht l ta c th lm hin th Context Menu (menu p dng theo tnh hung) bng mt nhp chut. Thng thng l Right Click (nhn phm phi ca chut) v Context Menu cn c gi l Pop-up Menu. Pop-Up menu tht ra l Drop-down menu ca mt Menu Bar Command. Bnh thng Menu Bar Command y c th visible (nhn thy) hay invisible (khng nhn thy). Trong hnh di y, khi ngi s dng Right click trn Form, mnuEdit s hin ln. Nu bnh thng chng ta khng mun cho ngi s dng dng n trong Main Menu th chng ta cho n invisible:

Code lm cho Popup menu hin ln c vit trong Event Mousedown ca mt Object m tnh c y l ca chnh ci Form:
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) ' Popup the Edit Menu if User clicked the Right Button of the Mouse If Button = vbRightButton Then PopupMenu mnuEdit End If End Sub

Ngay c khi chng ta mun cho mnuEdit bnh thng l invisible, chng ta cng nn cho n visible trong lc u tin b code vo dng x l Click Events ca nhng MenuItems thuc v mnuEdit nh mnuCopy, mnuCut v mnuPaste.

III. Lu tr vic thit lp thc n trong Registry


Gi s chng trnh chng ta cho ngi s dng mt Option WordWrap nh di y:

153

Chng ta mun chng trnh nh Option m ngi s dng chn, ln ti khi ngi s dng khi ng chng trnh th Option WordWrap cn gi nguyn gi tr nh c. Cch tin nht l cha gi tr ca Option WordWrap nh mt Key trong Registry. Registry l mt loi c s d liu c bit ca h iu hnh Windows dng cha nhng d kin lin quan n Users, Hardware, Configurations, ActiveX Components... dng trong my tnh. Trong Registry, d liu c sp t theo tng loi. Chng ta c th sa i trc tip tr s cc Keys trong Registry bng cch dng Registry Editor.

Trong chng trnh ny ta cng lp trnh chng trnh nh lun v tr ca Form khi chng trnh ngng li, ln ti khi ngi s dng khi ng chng trnh th chng trnh s c v tr lc u ging y nh trc. Ta s dng Sub SaveSetting cha gi tr Checked ca mnuWordWrap v Left, Top ca Form. Chng trnh ny ta s trong Sub Form_QueryUnload v n s c thc thi trc khi Form Unload.
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) SaveSettings End Sub Private Sub SaveSettings() ' Save Location of the form SaveSetting App.Title, "Location", "Left", Me.Left

154

SaveSetting App.Title, "Location", "Top", Me.Top ' Save the setting of WordWrap in menu SaveSetting App.Title, "Settings", "WordWrap", mnuWordWrap.Checked End Sub

App.Title l tiu ca chng trnh. Thng thng n l tn ca VB Project, nhng chng ta c th sa n trong Project Property Dialog (Tab Make) :

Khi cha gi tr ca mt Key vo Registry chng ta c th sp t cho n nm trong Section no ty . y ta t ra hai Sections tn Location cha Top, Left ca Form v tn Settings cha Key mnuWordWrap.Checked. Mun cho chng trnh c cc gi tr ca Keys cha trong Registry khi n khi ng ta ch cn dng Function GetSetting trong Sub Form_Load c vo t Registry nh di y:
Private Sub Form_Load() ' Initialise Location of the form by reading the Settings from the Registry Me.Left = Val(GetSetting(App.Title, "Location", "Left", "0")) Me.Top = Val(GetSetting(App.Title, "Location", "Top", "0")) ' Initialise setting of WordWrap in the menu mnuWordWrap.Checked = ( GetSetting(App.Title, "Settings", "WordWrap", "False") = "True" ) End Sub

Lc u khi cha c g trong Registry th "0" (string "0" c i t kiu s sang) l gi tr mc nh cho Left v Top, cn "False" l gi tr mc nh ca mnuWordWrap.Checked. Ngoi ra, ta cng mun chng trnh nh tn ca 3 tp tin ngi dng s dng gn y nht. Tc l trong Drop-down ca Menu Command File s c MenuItem Recent Files hin th t mt n ba tn tp tin, ci mi nht nm trn cng. Trc ht, ta cn to ra 3 SubmenuItem c cng tn mnuRFile nhng mang Index bng 0, 1 v 2 (chng ta nh vo Textbox Index). Ta s dng Captions ca chng hin th tn cc tp tin. Lc cha c Filename no c th MenuItem Recent Files s b lm m i (tc l mnuRecentFiles.Enabled = False ). Ta s cha tn cc tp tin nh mt xu k t trong Section Settings ca Registry. Ta phn cch tn cc tp tin bng k t c bit |. V d: "LattestFileName.txt|OldFileName.txt|OldestFilename.txt" 155

Mi ln ngi s dng m mt tp tin ta s thm tn tp tin y vo trong Registry v bt c lc no ch gi li tn ca 3 tp tin mi dng nht.

Di y l on chng trnh dng thm tn tp tin mi dng nht vo Registry:


Private Sub mnuOpen_Click() ' Initialise Folder in Common Dialog CommonDialog1.InitDir = App.Path ' Launch the dialog CommonDialog1.ShowOpen ' Save the Filename in the Registry, using Object myRecentFiles myRecentFiles.AddFile CommonDialog1.FileName End Sub

V chng trnh dng trong Sub Form_Load c tn RecentFiles v hin th trong Menu:
Set myRecentFiles = New clsRecentFiles ' Pass the form handle to it ' This effectively loads the most recently used FileNames to menu myRecentFiles.Init Me

156

Ta s dng mt Class tn clsRecentFiles c bit lo vic cha tn cc tp tin vo Registry v hin th tn cc tp tin y trong thc n. Bn trong clsRecentFiles ta cng dng clsString, l mt Class gip ta ngt on xu k t trong Registry ra tn ca cc tp tin da vo ch cc k t phn cch |.
' Class Name: clsRecentFiles ' This Class saves the most Recent FileNames used in the Registry ' in form of a String delimited by |. ' Up to MaxFiles Filenames maybe stored. ' You need to pass the Form that contains the menu to it. ' The assumption is that you have created an array of MenuItems ' named mnuRFile to display the FileNames Const MaxFiles = 3 ' Maximum number of FileNames to remember Private myForm As Form Private RecentFiles As clsString Public Sub Init(TForm As frmMenu) Set myForm = TForm Set RecentFiles = New clsString ' Read the Most Recent Filename String from the Registry RecentFiles.Text = GetSetting(App.Title, "Settings", "RecentFiles", "") ' Assign the Delimiter character and tokennise the String (i.e. split it) into FileNames RecentFiles.Delimiter = "|" UpdateMenu End Sub Public Sub AddFile(FileName As String) ' Add the latest FileName to the list and update the Registry ' Prefix the FileName to the existing MostRecentFileName String RecentFiles.Text = FileName & "|" & RecentFiles.Text ' Discard the oldest FileNames if the total number is greater than MaxFiles If RecentFiles.TokenCount > MaxFiles Then Dim TStr As String Dim i As Integer ' Reconstitute the String that contains only the most recent MaxFiles FileNames For i = 1 To MaxFiles TStr = TStr & RecentFiles.TokenAt(i) & "|" Next ' Remove the last delimiter character on the right RecentFiles.Text = Left(TStr, Len(TStr) - 1) End If ' Update the String in the Registry SaveSetting App.Title, "Settings", "RecentFiles", RecentFiles.Text UpdateMenu End Sub Private Sub UpdateMenu() ' Hin th the most recent Filenames in the menu Dim i As Integer

157

' If there is no FileNames to hin th then disable the MenuItem entry If RecentFiles.TokenCount = 0 Then myForm.mnuRecentFiles.Enabled = False Exit Sub Else ' Otherwise enable the MenuItem entry myForm.mnuRecentFiles.Enabled = True End If ' Assign FileName to Caption of mnuRFile array ' and make the MenuItem elements visible For i = 1 To RecentFiles.TokenCount myForm.mnuRFile(i - 1).Caption = RecentFiles.TokenAt(i) myForm.mnuRFile(i - 1).Visible = True ' Make the MenuItem If i = MaxFiles Then Exit Next ' Make the rest of the MenuItem array mnuRFile invisible If RecentFiles.TokenCount < MaxFiles Then For i = RecentFiles.TokenCount To MaxFiles - 1 myForm.mnuRFile(i).Visible = False Next End If End Sub

Chng ta c th chy dng lnh RegEdit sau khi chn Start | Run

xem chi tit ca cc Keys m chng trnh cha trong Sections Location v Settings ca Th mc HKEY_CURRENT_USER\Software\VB and VBA Program Settings\Menu

158

CHNG 10. G LI CHNG TRNH


Bugs l nhng li ca chng trnh m ta pht hin khi chy n. Debug l cng vic loi tt c nhng li trong chng trnh n chy tt trong mi tnh hung. Thng thng mun sa mt li no trc ht ta phi tm hiu l do khin n xut hin. Mt khi bit c nguyn nhn ri ta s ngh ra cch gii quyt. Ni chung, c hai loi bugs : hoc l chng trnh khng lm ng chuyn cn phi lm v lp trnh vin hiu sai yu cu/c t hay c cho tin tc sai lc, hoc l chng trnh b st chi tit cn phi x l. Trng hp ny ta gii quyt bng cch gim thiu s hiu lm qua s nng cp kh nng truyn thng. Chng trnh khng thc hin ng nh lp trnh vin mun, tc l lp trnh vin mun mt ng m bo chng trnh lm mt ng v v tnh khng vit chng trnh ng cch. Trng hp ny ta gii quyt bng cch dng nhng cng c phn mm (k c ngn ng lp trnh) thch hp, v c nhng qu trnh lm vic c h thng. C nhiu yu t nh hng n cht lng ca mt chng trnh nh chc nng ca chng trnh, cu trc ca cc b phn, k thut lp trnh v phng php debug. Debug khng hn nm giai on cui ca d n m ty thuc rt nhiu vo cc yu t k trn trong mi giai on trin khai.

I. c t chng trnh (Program Specifications)


Du chng trnh ln hay nh, trc ht ta phi xc nh r rng v t m n cn phi lm g, bao nhiu ngi dng, mng nh th no, c s d liu ln bao nhiu, phi chy nhanh n mc no... C nhiu chng trnh phi b thay i na chng v lp trnh vin hiu lm iu khch hng mun. Do , khi trin khai mt d n phn mm ta cn phi p dng cht ch qui trnh pht trin phn mm (xem trong mn hc Cng ngh phn mm hoc c thm cc ti liu v Software Engineering). 1. Cu trc cc b phn Chng trnh no cng c mt kin trc tng t nh mt c my. Mi b phn cng n gin cng tt v cch rp cc b phn phi nh th no ta d dng th, d kim tra (testing). Trong khi thit k ta phi bit trc nhng yu im ca mi b phn nm u ta chun b cch th chng. Ta s khng th tin b phn no hon ho cho n khi th n, d n n gin n u. Nu ta mun dng mt k thut g trong mt hon cnh no m ta khng bit chc n chy khng th nn th ring r n trc. Phng php y c gi l Prototype. Ngoi ra, ta cng nn xy dng nhng kch bn kim th cho nhng trng hp c bit, in hnh l dng bad data (d liu xu) - khi ngi s dng bm lung tung hay c s d liu cha nhiu rc. Nu chng trnh chy trong real-time (tc l d liu thu nhp qua cng COM, hay qua mng), chng ta cn phi lu nhng trng hp khc nhau ty theo vic g xy ra trc, vic 159

g xy ra sau. Phng php kim th tt nht l xy dng trc nhng kch bn v d liu c th th tng giai on v tnh hung. Ngy nay vi k thut hng i tng, giai on thit k ny l lc quyt nh cc cu trc d liu (bng, mng, bn ghi...) v s lng cc Form, Class. Lu rng, mi Class gm c mt cu trc d liu v nhng Subs/Functions/Properties lm vic trn d liu y. Cu trc d liu phi cha y nhng chi tit ta cn (tn trng, tn kiu d liu...). K l nhng cch chng trnh x l d liu. Subs/Functions no c th cho bn ngoi gi th ta cho n Public, cn nhng Subs/Functions khc hin hu phc v bn trong class th ta cho n Private. 2. K thut lp trnh Kin thc c bn ca lp trnh vin v cc thi quen ca h rt quan trng. Ni chung, nhng ngi hp tp, nhy vo vit chng trnh trc khi suy ngh hay cn nhc chn chn th sau ny bugs xut hin nhiu l iu t nhin. 3. Dng Subs v Functions Nu giai on thit k kin trc ca chng trnh ta chia ra tng Class, th khi lp trnh ta li thit k chi tit v Subs, Functions..., mi th s cn phi th nh th no. Nu ta c th chia cng vic ra tng giai on th mi giai on c th gi n mt Sub. Th g cn phi tnh ra hay ly t ni khc th c th c thc hin bng mt Function. Nh rng im khc bit chnh gia mt Sub v mt Function l Function cho ta mt kt qu m khng lm thay i gi tr nhng tham s u vo m ta cung cp cho n. Trong khi , du rng Sub khng cho ta g mt cch r rng nhng n c th thay i tr s (gi tr) ca bt c tham s no ta chuyn cho n ByRef. Do trnh trng hp v tnh lm cho tr s mt bin b thay i v ta dng n trong mt Sub/Function chng ta nn dng ByVal khi chuyn n nh mt tham s vo mt Sub/Function. Tht ra, chng ta c th dng ByRef cho mt tham s chuyn vo mt Function. Trong trng hp d nhin bin y c th b sa i. iu ny gi l phn ng ph (side effect), v bnh thng t ai lm vy. Do , nu chng ta tht s mun vt ngoi qui c thng thng th nn Comment r rng cnh bo ngi s c chng trnh chng ta sau ny. Ngoi ra, mi lp trnh vin thng c mt Source Code Library ca nhng Subs/Functions ng . Chng ta nn dng cc Subs/Functions trong Library ca chng ta cng nhiu cng tt, v chng c th nghim ri.

II.
1.

Mt s lu
ng s li

Mi khi chng trnh c mt Li, hoc l Compilation Error (v ta vit code khng ng vn phm, ng vng), hoc l li trong khi chy chng trnh, th chng ta khng nn s n. Hy bnh tnh c ci Error Message xem n mun ni g. Nu khng hiu ngay th c i c li vi ln v suy nghim xem c tm c s hng dn no khng. Khi lp trnh chng ta s gp li rt nhiu, nn chng ta phi tp bnh tnh i din vi chng.

160

2.

Dng Comment (Ch thch)

Lc vit code nh thm Comment y bt c khi no tr li c on code y trong tng lai chng ta khng cn phi da vo ti liu no khc m c th hiu ngay lp tc mc ch ca mt Sub/Function hay on code. Nh th khng nht thit chng ta phi vit rt nhiu Comment nhng h c im no khc thng, b him th chng ta cn thng bo v gii thch ti sao chng ta lm cch y. C th sau ny ta khm ph ra on code c bugs; lc c li c th ta s thy du rng nh v thit k ng nhng cch lp trnh c phn thiu kim sot chng hn. Tnh ra trung bnh mt lp trnh vin ch lm vic 18 thng mi ch. Tc l, gn nh chc chn code chng ta vit s c ngi khc c v bo tr ( debug v thm bt). Do , code phi cng n gin, d hiu cng tt. ng lo ngi l chng trnh s chy chm hay chim nhiu b nh, v ngy nay computer chy rt nhanh v b nh rt r. Khi no ta tht s cn phi quan tm v vn tc v b nh th iu cn c thit k cn thn ch khng phi da vo nhng tiu xo v lp trnh. 3. t tn cc bin c ngha Trong thc t chng ta gp rt nhiu kh khn khi lm vic vi cc bin c tn vn tt nh K, L, AA, XY. Ta khng c mt cht nim g v chng, mc ch s dng chng lm g. Thay vo , nu ta t cc tn bin nh NumberOfItems, PricePerUnit, Discount .v.v.. th s d hiu hn. Mt trong nhng bugs kh thy nht l ta dng cng mt tn cho bin cc b (bin c khai bo bn trong Sub/Function) v bin ton cc (bin c khai bo trong Form hay Basic Module). Bin cc b s che y bin ton cc cng tn, nn nu chng ta mun ni n bin ton cc trong hon cnh y chng ta s dng lm bin cc b. 4. Dng Option Explicit Chng ta nn trung thnh vi cch dng Option Explicit u mi Form, Class hay Module. Nu c bin no nh vn sai VB6 IDE s cho chng ta bit ngay. Nu chng ta khng dng Option Explicit, mt bin nh vn sai c xem nh mt bin mi vi gi tr 0 hay "" (chui rng). Ni chung chng ta nn thn trng khi ch nh mt kiu d liu cho mt bin vi kiu d liu khc. Chng ta phi bit r chng ta ang lm g khi b phn ng ph (side effect). 5. Desk Check Kim tra li chng trnh trc khi bin dch. Khi ta bin dch m ngun chng trnh, nu khng c li ch c ngha l c php ca chng trnh ng, khng c ngha l gii thut ng. Do ta cn phi bit chc l m chng trnh ta vit s lm ng iu ta mun bng cch c li chng trnh trc khi bin dch n ln u tin. Cng vic ny gi l Desk Check (Kim tra trn bn). Mt chng trnh c Desk Checked k s cn t debug v cha t bugs khng ng trc. L do l mi kch bn c tin liu chu o. 6. Son mt Test Plan Test Plan (k hoch kim th) lit k tt c nhng g ta mun th v cch th chng. Khi th theo Test Plan ta s khm ph ra nhng bug v tm cch loi chng ra. H s ghi li lch s ca Test Plan (trc trc g xy ra, chng ta dng bin php no gii quyt) s b ch trn nhiu phng din. Ta s hc c t kinh nghim Debug v bit r nhng th g trong d n c th theo cch no. 161

III. Cc k thut x l li
1. X l li lc thc thi chng trnh

Khi mt chng trnh ( dch sang EXE) vit bng VB6 ang chy, nu gp li, n s hin th mt thng bo li cho bit l do gy li. Sau khi chng ta chn OK, chng trnh s ngng. Nu chng ta chy chng trnh trong VB6 IDE, chng ta c dp bo chng trnh ngng trong m ngun ch c li bng cch bm nt Debug trong thng bo li. Tip theo chng ta c th tm hiu tr s cc bin on nguyn do ca li. Do , nu chng ta bt u cho dng mt chng trnh chng ta vit cho ni b n v, nu tin th trong vi tun u, thay v chy EXE ca chng trnh, chng ta chy source code trong VB6 IDE. Nu c bug no xy ra, chng ta c th cho chng trnh ngng trong source code debug. Khi chng ta dng lnh: ON Error Resume Next th t ch tr i, nu chng trnh gp li, n s b qua hon ton. im ny tin ch gip chng trnh EXE ca ta trnh b treo ngay lp tc ti im xut hin bug. Nhng n cng bt li l khi khch hng cho hay h gp nhng trng hp l, khng gii thch c (v li b b qua m khng ai ), th ta cng khng bit c nguyn nhn, c th khng bit bt u t u debug. Do , d nhin trong lc debug ta khng nn dng n, nhng trc khi giao cho khch hng chng ta nn cn nhc k trc khi dng. 2. Dng Breakpoints Cch hay nht theo di vic thc hin ca chng trnh l dng Breakpoint lm cho chng trnh ngng li mt ch ta mun trong chng trnh, ri sau ta cho chng trnh bc tng bc. Trong dp ny ta s xem xt tr s ca nhng bin coi chng c ng nh d nh khng. Chng ta on trc my tnh s thc hin cc on chng trnh s thc hin v chn mt ch thch hp ri click bn tri ca dng code, ch du chm trn nh trong hnh di y:

Nu chng ta click ln du chm trn mt ln na th l hy b n. Mt cch khc t mt breakpoint l editor cursor ln dng code ri bm F9. Nu chng ta bm F9 ln na khi con tr nm trn dng th l hy b breakpoint. Lc chng trnh ang dng li, chng ta c th xem tr s ca mt bin bng cch con tr ln trn bin y, tooltip s hin ra nh trong hnh di y:

162

C mt s chuyn khc chng ta c th lm trong lc ny. Chng ta c th nm du chm trn ko (drag) n ngc ln mt hay nhiu dng code n s thc thi tr li vi dng code. Chng ta cho chng trnh thc thi tng dng code bng cch bm F8. Menu command tng ng vi n l Debug | Step Into. S c lc chng ta khng mun chng trnh bc vo bn trong mt Sub/Function m mun vic thc thi mt Sub/Function nh mt bc n gin. Trong trng hp , chng ta dng Menu command Debug | Step Over hay Shift-F8.

Nh l cho chng trnh chy li chng ta bm F5, tng ng vi Menu command Run | Continue. C khi chng ta mun chng trnh ngng gia mt For Loop khi Iterator value c mt tr s kh ln. Nu ta sn mt breakpoint ri c bm F5 nhiu ln th hi bt tin. C mt phng php hu hiu l dng mt lnh IF th khi Iterator value c tr s y th ta ngng breakpoint ti lnh Beep (thay v lnh Print ICounter) nh trong hnh di y:

Mun hy b mi breakpoints chng ta dng Menu command Debug | Clear All Breakpoints. tin vic debug, chng ta c th dng Debug Toolbar bng cch hin th n vi Menu command View | Toolbars | Debug

VB6 IDE s hin th Debug Toolbar nh sau:

163

3.

Dng Immediate Window

Immediate Window cho php ta thc thi nhng lnh VB trong khi chng trnh ang dng li. Ta c th dng mt lnh Print hin th tr s ca mt bin hay kt qu ca mt Function, gi mt Sub hay thay i tr s mt bin trc khi tip tc cho chng trnh chy li. hin th Immediate Window, dng Menu command View | Immediate Window.

Thay v nh "Print ICounter" chng ta cng c th nh "? ICounter". Nh l mi lnh VB chng ta nh trong Immediate Window s c executed ngay khi chng ta bm Enter. Chng ta c th dng li bt c lnh VB no trong Immediate Window, ch cn bm Enter cui dng y. 4. Theo du vt chng trnh (Tracing) i khi khng tin ngng chng trnh nhng chng ta vn mun bit chng trnh ang lm g trong mt Sub. Chng ta c th gia code ca mt Sub/Function mt lnh ging nh di y. Debug.Print Format ( Now,"hh:mm:ss ") & "(Sub ProcessInput) Current Status:" & Status chng trnh hin th trong Immediate Window value ca Status khi n thc thi bn trong Sub ProcessInput lc my gi. C mt cch khc l thay v cho hin th trong Immediate Window chng ta cho vit xung (Log) vo trong mt text file. Di y l mt Sub in hnh chng ta c th dng Log mt Event message:
Sub LogEvent(ByVal GivenFileName, ByVal Msg As String, HasFolder As Boolean, IncludeTimeDate As Integer) ' Append event message Msg to a text Logfile GivenFileName ' If GivenFileName is fullPathName then HasFolder is true ' IncludeTimeDate = 0 : No Time or Date ' = 1 : Prefix with Time ' = 2 : Prefix with Time and Date

164

Dim FileNo, LogFileName, theFolder If HasFolder Then LogFileName = GivenFileName Else If Right(App.Path, 1) <> "\" Then theFolder = App.Path & "\" Else theFolder = App.Path End If LogFileName = theFolder & GivenFileName End If FileNo = FreeFile If Dir(LogFileName) <> "" Then Open LogFileName For Append As FileNo Else Open LogFileName For Output As FileNo End If Select Case IncludeTimeDate Case 0 ' No Time or Date Print #FileNo, Msg Case 1 ' Time only Print #FileNo, Format(Now, "hh:nn:ss ") & Msg Case 2 ' Date & Time Print #FileNo, Format(Now, "dd/mm/yyyy hh:nn:ss ") & Msg End Select Close FileNo End Sub

5.

Dng Watch Window

i khi chng ta mun chng trnh ngng khng phi mt ch no nht nh, nhng khi tr s ca mt bin hay ca mt biu thc l bao nhiu, c th l chng ta khng bit ti sao mt bin t nhin c mt tr s nh vy. V d, chng ta mun chng trnh ngng li khi ICounter = 15. Chng ta c th dng Menu command Debug | Add Watch. VB6 IDE s hin th hp thoi di y. Chng ta nh ICounter = 15 vo textbox Expression v click option box Break When Value Is True trong hp Watch Type. Lm nh vy c ngha l ta mun chng trnh ngng khi ICounter bng 15.

165

6.

Dng phng php loi suy (Elimination Method)

C mt phng php rt thng dng khi debug l loi b nhng dng code nghi ng xem bug c bin mt khng. N c gi l Elimination Method. Nu bug bin mt th nhng dng code c loi b l th phm. Chng ta c th Comment Out mt s dng cng mt lc bng cch highlight cc dng y ri click Comment Block trn Edit ToolBar.

Khi dng Elimination Method chng ta phi cn nhc thut ton ca chng trnh chng ta trong khi quyt nh Comment Out nhng dng no, nu khng, l mt phng php kh nguy him. Ngoi ra, Menu Command View | Locals Window lit k cho chng ta tr s ca tt c bin trong mt Sub/Function v View | Call Stack lit k th bc cc Sub gi ln lt t ngoi vo trong cho n v tr code ang ngng hin thi.

166

TI LIU THAM KHO


[1] Brown M. and Sedgewick R., A system for algorithm animation. In Proc. Of SIGGRAPH 84, pp. 177186, 1984. [2] Burnett M. and Ambler A. L., A declarative approach to event-handling in visual programming languages. In Proc. 1993 IEEE Symposium Visual Languages, pp. 3440, Seattle, Washington, September 1992. [3] Burnett M., and Baker M. J., A classification system for visual programming languages. J. Visual Languages and Computing, pp. 287300, September 1994. [4] Chang S., Visual languages: A tutorial and survey. IEEE Software, 4(1):2939, January 1987. [5] Chang S.-K., Principles of Visual Programming Systems. Prentice Hall, New York, 1990. [6] Cox P. T. and Pietryzkowsky T., Using a pictorial representation to combine dataflow and object-orientation in a language-independent programming mechanism. IEEE Computer Society Press, Los Alamitos, CA, 1990. [7] Erwig M. and Meyer B., Heterogeneous visual languages : Integrating visual and textual programming. In Proc. 1995 IEEE Symposium Visual Languages, pp. 318325, 1995. [8] Golin E. J., A method for the specification and parsing of visual languages. PhD dissertation, Brown University, 1990. [9] Lakin F., Spatial parsing for visual languages. In Chang, S.-K., Ichikawa, T., and Ligomenides, P., editors, Visual Languages, pp. 3585. Plenum Press, New York, 1986. [10] Najork M., Visual programming in 3-d. Dr. Dobbs Journal, 20(12):1831, December 1995. [11] Litwin P., Getz K., Mike Gilbert, Access 2000 Developer's Handbook. Published by Sybex, ISBN-10: 0782123708, September 1999. [12] Rod S., Visual Basic 2005 Programmer's Reference. Published by Wrox, ISBN: 978-0-7645-7198-5, October 2005.

167

MC LC
LI NI U ......................................................................................................... 3 CHNG 1. LP TRNH TRC QUAN................................................................. 5 I. Gii thiu ...........................................................................................................5 II. Lch s ca cc ngn ng lp trnh trc quan...............................................5 III. Phn loi cc ngn ng lp trnh trc quan ..................................................6 IV. L thuyt ca cc ngn ng lp trnh trc quan...........................................8 1. c t hnh thc ca ngn ng lp trnh trc quan .....................................8 2. Phn tch cc ngn ng lp trnh trc quan ...............................................10 V. Nhng vn ca ngn ng trc quan ........................................................11 1. Control Flow (lung iu khin) ...............................................................11 2. S tru tng ho th tc (Procedural Abstraction) .................................11 3. S tru tng ho d liu (Data Abstraction) ...........................................12 VI. Cc ngn ng lp trnh trc quan ................................................................12 1. ARK ...........................................................................................................12 2. Prograph.....................................................................................................14 3. Form/3........................................................................................................16 VII. Kt lun ...........................................................................................................18 CHNG 2. LP TRNH TRC QUAN VI MS ACCESS ................................. 20 I. Gii thiu .........................................................................................................20 1. Khi nim v c s d liu ........................................................................20 2. Microsoft Access .......................................................................................24 3. Khi ng ACCESS ..................................................................................25 4. C s d liu trong Access ........................................................................25 5. Cc php ton.............................................................................................25 II. Lm vic vi c s d liu (CSDL) ...............................................................26 1. To c s d liu .......................................................................................26 2. Hiu chnh c s d liu ............................................................................27 III. Lm vic vi Table .........................................................................................28 1. To cu trc ca Table...............................................................................28 2. Nhp s liu vo Table ..............................................................................30 3. Hiu chnh Table........................................................................................31 4. Khai thc s liu trn Table .......................................................................32 IV. LM VIC VI QUERY..............................................................................32 1. Khi nim...................................................................................................32 2. Cch to QUERY.......................................................................................33 3. Hiu chnh QUERY ..................................................................................37 4. Thc hin QUERY ....................................................................................37 V. Lm vic vi Report .......................................................................................37 1. Khi nim...................................................................................................37 2. Cch to Report .........................................................................................38 168

3. Hiu chnh Report ......................................................................................41 4. Thc hin Report.......................................................................................41 VI. Lm vic vi Form..........................................................................................41 1. Khi nim ...................................................................................................41 2. Thit k Form.............................................................................................41 3. Hiu chnh Form ........................................................................................43 4. Thc hin Form..........................................................................................43 VII. Macro v h thng thc n ..........................................................................43 1. Macro .........................................................................................................43 2. H thng thc n......................................................................................44 CHNG 3. BT U LP TRNH VI VISUAL BASIC ................................... 47 I. Gii thiu .........................................................................................................47 II. Cc khi nim thng dng...........................................................................48 III. Lp trnh trong Visual Basic..........................................................................48 1. Lm vic vi hp/nt iu khin ...............................................................49 2. Thuc tnh ..................................................................................................51 3. Th tc tnh hung .....................................................................................53 IV. V d .................................................................................................................54 1. B sung hp iu khn..............................................................................54 2. Thay i thuc tnh ....................................................................................54 3. Vit cc th tc tnh hung ........................................................................55 4. Ghi v thc hin trng trnh.....................................................................56 V. Bin nh ...........................................................................................................61 1. Khi nim ...................................................................................................61 2. Khai bo bin .............................................................................................61 3. Khai bo hng ............................................................................................63 4. Mng ..........................................................................................................63 5. Khai bo bn ghi ........................................................................................64 6. Bin i (convert) t loi d liu ny qua loi d liu khc ....................64 CHNG 4. VIT M CHNG TRNH ............................................................. 66 I. Cc cu trc iu khin..................................................................................66 1. Cu trc chn .............................................................................................66 2. Cu trc lp ................................................................................................67 3. Nhn ...........................................................................................................69 4. S th t dng lnh ....................................................................................70 II. Method .............................................................................................................70 1. Circle Method.............................................................................................70 2. Line Method ...............................................................................................71 3. Cls Method .................................................................................................72 4. Hide Method...............................................................................................72 5. Show Method .............................................................................................73 6. Item Method ...............................................................................................73 7. Move Method ............................................................................................73 8. Point Method..............................................................................................74 169

9. Print Method ..............................................................................................74 10. PrintForm Method...................................................................................74 11. PSet Method............................................................................................75 12. Refresh Method........................................................................................75 13. Scale Method ...........................................................................................76 14. SetFocus Method ....................................................................................77 15. TextHeight v TextWidth Methods .........................................................77 III. Hm..................................................................................................................78 1. Gii thiu ...................................................................................................78 2. Cc hm x l chui ..................................................................................78 3. Cc hm x l s : .....................................................................................80 CHNG 5. THIT K GIAO DIN .................................................................... 81 I. Gii thiu .........................................................................................................81 II. Dng list control .............................................................................................81 1. Listbox .......................................................................................................82 2. Drag-Drop..................................................................................................85 3. Dng thuc tnh Sorted ..............................................................................86 III. T to cc i tng (Object) .......................................................................89 CHNG 6. CC CH HI THOI .............................................................. 97 I. Message Boxes (hp thng ip) ...................................................................97 II. Input Boxes......................................................................................................99 III. Common Dialogs...........................................................................................101 IV. Open v Save File Dialogs............................................................................101 V. Cc loi Dialog c sn dng....................................................................105 1. Color Dialog ............................................................................................105 2. Font Dialog ..............................................................................................107 3. Print Dialog..............................................................................................109 4. Help Dialog..............................................................................................110 VI. Custom Dialogs .............................................................................................110 CHNG 7. THIT K HA....................................................................... 113 I. Mu (color) v phn gii (resolution)....................................................113 1. phn gii (resolution) .........................................................................113 2. Mu (color) ..............................................................................................114 II. Hm RGB ......................................................................................................116 III. Mt s k thut .............................................................................................118 1. Color Mapping.........................................................................................118 2. Dng Intrinsic Color Constants ...............................................................119 3. Tp tin ho ..........................................................................................120 CHNG 8. KT NI N C S D LIU................................................... 121 I. S dng Data Control ..................................................................................121 170

1. Ch nh v tr c s d liu lc chy chng trnh .................................124 2. Thm bt cc bn ghi ...............................................................................125 3. Dng DataBound Combo.........................................................................127 II. Lp trnh vi k thut DAO ........................................................................129 1. Tham chiu DAO .....................................................................................129 2. Dng keyword SET..................................................................................130 3. Cc nt di chuyn.....................................................................................131 4. Thm bt cc bn ghi ...............................................................................132 5. Tm mt bn ghi .......................................................................................134 6. Bookmark .................................................................................................137 7. LastModified ............................................................................................137 III. Lp trnh vi ADO........................................................................................138 IV. Data Form Wizard........................................................................................142 CHNG 9. THIT K H THNG THC N .............................................. 149 I. Main Menu (Thc n chnh) .....................................................................149 II. Pop-up Menu .................................................................................................153 III. Lu tr vic thit lp thc n trong Registry..........................................153 CHNG 10. G LI CHNG TRNH........................................................... 159 I. c t chng trnh (Program Specifications) ..........................................159 1. Cu trc cc b phn ................................................................................159 2. K thut lp trnh .....................................................................................160 3. Dng Subs v Functions ..........................................................................160 II. Mt s lu ...................................................................................................160 1. ng s li...............................................................................................160 2. Dng Comment (Ch thch).....................................................................161 3. t tn cc bin c ngha ......................................................................161 4. Dng Option Explicit ...............................................................................161 5. Desk Check ..............................................................................................161 6. Son mt Test Plan...................................................................................161 III. Cc k thut x l li....................................................................................162 1. X l li lc thc thi chng trnh...........................................................162 2. Dng Breakpoints.....................................................................................162 3. Dng Immediate Window ........................................................................164 4. Theo du vt chng trnh (Tracing) .......................................................164 5. Dng Watch Window...............................................................................165 6. Dng phng php loi suy (Elimination Method) .................................166 TI LIU THAM KHO ...................................................................................... 167 MC LC............................................................................................................ 168

171

You might also like