You are on page 1of 251

GIO TRNH MN HC

LP TRNH TRC QUAN


Ti liu tham kho

PHN I MICROSOFT ACCESS

iii

iv

Lp trnh trc quan

BI 1. M 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 ch c th hiu v thc hin 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 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 c im 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, PROLOG... 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. 1

Lp trnh trc quan

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. 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... Trong chng trnh ny gii thiu mt s chng trnh lp trnh thng dng nh Access, Basic v VB .Net lm quen vi phng php lp trnh trc quan trong vic trin khai mt s cc ng dng. c im ni bt ca phng php lp trnh trc quan l : Cho php xy dng chng trnh theo mt hng khc gi l event - driven programming (lp trnh theo tnh hung), 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 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 lp trnh trc quan ngi 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. Trong chng trnh ny ta s xt cch s dng h qun tr c s d liu Microsoft Access v ngn ng lp trnh Visual Basic.

Lp trnh trc quan

BI 2. ACCESS

2.1.

Gii thiu

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 qun l, bo tr v khai thc s liu c lu tr mt cch c t chc trn my tnh. 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. 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...

2.2.

Khi ng ACCESS

Sau khi ci t Microsoft Office (chn component Access), mi ln lm vic vi Access chng ta khi ng : - Bt my tnh - Chn Start --> Program --> Microsoft Access Hoc nhn p chut ti biu tng ca Access trn Desktop.

Lp trnh trc quan

Lc s xut hin lm vic ca ACCESS nh sau :

To c s d liu mi To c s d liu mi theo mu c sn. M c s d liu c

2.3.

Khi nim v 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 Table, 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 Table 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 Table 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.

Lp trnh trc quan

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 .

2.4.

Cc php ton

2.4.1 Cc php ton Logic 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. 2.4.2 Cc php ton s hc ^ : ly tha. * : nhn. / : chia \ : chia ly phn nguyn. Mod : chia ly phn d + : cng - : tr

Lp trnh trc quan

2.4.3 Cc php ton so snh : >, >=, <, <=, = v <> 2.4.4 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#

Lp trnh trc quan

BI 3. LM VIC VI C S D LIU

3.1.

TO C S D LIU

3.1.1 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 :

Lp trnh trc quan

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 Table, 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. 3.1.2 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 :

Lp trnh trc quan

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 :

3.2.

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. Ta s xt cch thao tc ln tng thnh phn mt ca c s d liu trong cc bi k tip.

Lp trnh trc quan

BI THC HNH
Trong tp ti liu ny cui mi bi s c bi thc hnh v bi tp, cc bi ny xy dng theo mt h thng chung v khi n cui chng trnh s c mt h thng chng trnh hon chnh qun l im cho sinh vin.. To mt c s d liu trng c tn l Qun l sinh vin. Bc 1 : Chn File - New Database Bc 2 : chn nt General, bm chut vo biu tng Blank Database, sau chn OK. Nu mun to CSDL theo mu th chn nt Database, sau chn biu tng tng ng.

Bc 3 : g vo tn c s d liu cn to l Qun l sinh vin trong mc File name. Qui nh th mc cn lu tr Database trong mc Save in. Sau chn nt Create Lc ny ta c ca s lm vic vi c s d liu Qun l sinh vin nh sau :

Lc ny ta c th lm vic vi cc thnh phn ca Database nh Table, Query, Form, Report, Macro v Modules.

10

Lp trnh trc quan

BI 4. 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.

4.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 :

4.1.1 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. 4.1.2 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. 11

Lp trnh trc quan

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 :

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.

12

Lp trnh trc quan

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. 4.1.3 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. 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 Di ti a 65535 k t Cha gi tr s 13 ngha Cha tp hp cc k t ty , di ti a 255 k t

Lp trnh trc quan

Date/Time Currency Auto Number Yes/No Hyperlink Lookup Wizard

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

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 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

4.2.

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 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 14

Lp trnh trc quan

4.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. 4.3.1 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... 4.3.2 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. 15

Lp trnh trc quan

4.3.3 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. 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.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. 4.4.1 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 4.4.2 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. 4.4.3 Sp xp Chn trng lm kha sp xp. 16

Lp trnh trc quan

Chn trn thanh thc n Record - Sort (hoc chn biu tng) Chn sp tng dn (Sort Ascending) hoc gim dn (Descending). 4.4.4 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.

17

Lp trnh trc quan

BI THC HNH
Cu 1 : To Table qun l h s sinh vin gm cc thng tin : s th sinh vin, h lt, tn, ngy sinh, gii tnh, qu qun, m lp, a ch v ghi ch. Bc 1: chn nt Table, sau New Bc 2: chn Design View, ri v xut hin mn hnh thit k Table v khai bo cc trng nh sau :

Lc ta c bng sau : Field Name Data Type Field Size Format Sothe Holot Ten Ngaysinh Gioitinh Ghichu Text Text Text Date/Time Yes/No Memo 18 6 27 6 Sort Date True/False

Lp trnh trc quan

Bc 3: ng ca s khai bo cu trc Table (bm chut vo du X gc trn bn phi) v chn Yes ghi li cu trc. Bc 4 : g vo tn ca Table l Ho So v chn OK trn ca s sau :

Bc 5 : qui nh c nh ngha kha chnh hay khng qua mn hnh sau :

Chn No (khng nh ngha kha). Lc ny ta c mt Table va c nh ngha xong. Cu 2 : Nhp s liu vo Table : a con tr v tn Table. Chn Open. Nhp s liu qua mn hnh nh sau.

Ch : trong qu trnh nhp s liu ta thng dng cc thao tc sau : iu chnh rng ct : a chut v cnh phi tiu ct ri Drag chut. 19

Lp trnh trc quan

i kiu ch : chn Format - Font , chn kiu ch thch hp. Cu 3 : sp xp theo th t ABC ca tn

Chn trng lm kha sp xp l Tn ( con tr trng ). Chn trn thanh thc n Record - Sort (hoc chn biu tng) Chn sp tng dn : Sort Ascending Cu 4 : ch xem cc sinh vin lp 94T

Chn trn thanh thc n Record - Filter (hoc chn biu tng) Chn Filter by Form Qui nh cch lc theo mu sau :

a con chut v trng Malop Click chut v chn tn lp l 94T 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. Cu 5 : xa mt bn ghi. Bm chut phn tiu dng ca bn ghi cn xa (c bn ghi i mu). Bm phm Delete My hi c mun xa hay khng (You are about to delete n records ?), chn Yes nu mun xa, No nu khng. Cu 6 : thay i cch th hin . 20

Lp trnh trc quan

Chn Format - Cells. Qui nh cch th hin.

Bi tp : tng t to cc Table lu tr danh mc lp, lu tr hc ph, hc bng v thc hin cc thao tc ln bn ghi.

21

Lp trnh trc quan

BI 5. LM VIC VI QUERY

5.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. 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.

22

Lp trnh trc quan

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.

5.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

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. 23

Lp trnh trc quan

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). 5.2.1

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. 24

Lp trnh trc quan

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).

- 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

25

Lp trnh trc quan

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. Caption : tiu s dng thay cho tn trng. 5.2.2 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 :

26

Lp trnh trc quan

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.

27

Lp trnh trc quan

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.

5.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.

5.4.

Thc hin QUERY

a con tr v tn ca Query v chn Open ( hoc Double Click chut ti ).

28

Lp trnh trc quan

BI THC HNH
Cu 1 : to Query xem danh sch ca mt lp bt k no nhp t bn phm. Bc 1: bm chut vo nt Query, chn New. Bc 2 : chn Simple Query Wizard, sau chn OK t bng sau :

Bc 4 : chn tn cc trng cn a vo danh sch l: sothe, holot, ten, ngaysinh, malop. Sau chn Next

Bc 5 : qui nh tn ca Query l DANH SACH LOP, chn Finish hon tt.

29

Lp trnh trc quan

Bc 6 : lc ny s xut hin danh sch gm cc bn ghi vi ni dung cc trng chn. Tuy nhin lc ny trong danh sch xut hin sinh vin ca tt c cc lp c trong Table. Bc 7 : hiu chnh li Query ch xem danh sch tng lp ty . a con tr v tn Query cn hiu chnh (DANH SACH LOP). Chn Design. a con tr v mc Criteria, ct Malop g vo iu kin l =[MA LOP]

ng ca s Design Query. Chn Yes ghi li Query mi. Lc ny mi khi s dng Query (a con tr v tn Query v chn Open) th my s hi m ca lp cn xem qua ca s:

30

Lp trnh trc quan

Ta nhp vo m lp cn xem, chon OK. Lc ny danh sch ca lp c ch nh s hin

ln mn hnh.
Cu 2 : to Query thng k s lng sinh vin theo tng lp, mi lp th cho bit s

lng nam, n. Bc 1 : bm chut vo nt Query, sau chn New

Bc 2 :Chn Crosstab Query Wizard Double Click chut ti nt OK Bc 3: chn tn ca Table l Ho So, sau chn Next chuyn sang bc k tip.

Bc 4: chn tn trng lm tiu dng l MALOP, chn Next

31

Lp trnh trc quan

Bc 5: chn tn trng lm tiu ct l GIOITINH, sau chn Next.Ta lu tn trng lm tiu dng v ct l tn ca trng s c thng k theo mt kiu tnh no . Trong trng hp ny ta m s lng sinh vin theo tng lp v trong mi lp m s lng n v nam l bao nhiu. Bc 6 :qui nh cng thc tnh. Trong trng hp ny ta chn hm COUNT theo s th. Sau chn Next

Bc 7 :qui nh tn ca Query cn lu tr trn a l THONG KE SO LUONG. Sau chn Finish.

32

Lp trnh trc quan

Bc 8: lc ny trn mn hnh xut hin ca s cho xem liu sau khi thng k nh sau:

ng ca s trn. Bc 9:nu mun thay i tiu ct th ta vo Design, thay ch Total Of sothe bng ch S lng Bi tp: t Table im ta thc hin cc Query : xem bng im tng lp, xem danh sch thi li, thng k s lng theo xp loi tng lp.

33

Lp trnh trc quan

BI 6. LM VIC VI REPORT

6.1.

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... 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.

6.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 :

34

Lp trnh trc quan

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. Chn Next chuyn sang bc tip theo.

35

Lp trnh trc quan

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.

36

Lp trnh trc quan

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.

37

Lp trnh trc quan

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. Chn Next qua bc tip :

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 : cho php ghi ni dung tiu u mi trang in. 38

Lp trnh trc quan

Detail : ghi ni dung ca cc dng trong Report. Page Footer : ni dung cui mi trang in. 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 : 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

Ngoi ra cn c nhiu cng c khc.

6.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.

6.4.

Thc hin Report

Nu mun xem hoc in Report ta chn trn thanh thc n : File Print ( in) hoc Print Preview ( xem)

Hoc bm vo cc biu tng tng ng trn thanh cng c 39

Lp trnh trc quan

BI THC HNH.
To Report in danh sch mt lp ty nhp t bn phm theo mu : DANH SCH LP S th H v tn Ngy sinh Ghi ch

Bc 1: bm chut vo nt Report, chn New Bc 2: chn kiu Report l AutoReport Tabular, tn d liu gc l Query DANH SACH LOP m ta to trc trong bi thc hnh v Query. Sau chn OK Bc 3: ch mt lt my t ng to ra Report theo kiu ngm nh ca ACCESS. Sau n s t ng thc hin Report cho ta xem Report va to

xong. Lc ny ta nhp vo tn lp xem. V d ta nhp tn lp l 94T lc ny trn mn hnh s xut hin bo co : Bc 4: ng ca s v lu Report vo a vi tn l DANH SACH LOP Bc 5: chn vo nt Design hiu chnh li bo co theo qui nh trn. Lc ny ta phi Design li mu cho ging nh yu cu.

40

Lp trnh trc quan

Tng t ta thc hin cc Report khc nh bng im, danh sch thi li, thng k...

41

Lp trnh trc quan

BI 7. LM VIC VI FORM

7.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

7.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. S dng AutoForm : Auto Form cho php t ng to Form vi tt c cc trng trong Table hoc Query. Bc 1: T ca s Database bm vo nt Form sau chn New Bc 2: Xut hin ca s : - Chn tn ca Table hoc Query cha s liu c s ca Form. 42

Lp trnh trc quan

Chn loi Form v phng php to Form. Trong trng hp ny ta chn AutoForm v km theo loi Form (Columnar : dng ct, Tabular : dng bng v Datasheet : dng bng tnh).

Bc 3: Form s c t ng to ra trn c s cc trng ca Table hoc Query. V d : chn Table l DIEM v loi Form l Columnar ta s nhn c kt qu l Form sau :

Bc 4: ng Form bng cch bm vo nt c du X v ghi tn ca Form lu tr ln a qua ca s sau :

S dng Form Wizard : Bc 1: chn Form Wizard trn hp thoi v tn Table hoc Query cha d liu.

43

Lp trnh trc quan

Bc 2: qui nh tn cc trng cn a vo Form ri chn Next qua ca s sau :

Bc 3: qui nh loi Form theo cc mu cho sn ri chn Next qua ca s :

Bc 4: qui nh cch thc trnh by Form ri chn Next qua ca s:

44

Lp trnh trc quan

Bc 5: nhp vo tn ca Form lu tr ln a ri chn Finish hon tt vic thit k Form qua mn hnh :

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. 45

Lp trnh trc quan

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. 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. 46

Lp trnh trc quan

- 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.

7.3.
-

Hiu chnh Form

Chn tn ca Form cn hiu chnh, chn Design Sa i ging nh trong phn t thit k.

7.4.
-

Thc hin Form

Chn tn ca Form. Chn Open

47

Lp trnh trc quan

BI THC HNH
To Form nhp h s. Bc 1: bm con chut vo Form, chon New

Bc 2: chn vo mc Form Wizard, tn Table m ta cn nhp hoc xem s liu trn l: Ho So. Sau chn OK

Bc 3: chn tn cc trng m ta cn nhp hoc xem. Trong trng hp ny ta bm chut vo >> chn tt c cc trng. Tip n chn Next Bc 4: chn cch nhp hoc xem trn Form. Ta chn Column, tip n chn Next 48

Lp trnh trc quan

Bc 5: chn mu sc v cch th hin d liu trn Form. Ta chn Flax sau bm vo Next chuyn sang bc k tip.

Bc 6: qui nh tn ca Form lu tr ln a. Chn Finish hon tt.

Bc 7: lc ny ACCESS t ng to ra Form ta nhp v xem s liu. Mn hnh xem v nhp nh sau : Bc 8: ng ca s nhp v chn Design thit k li Form cho n p v d s dng hn. 49

Lp trnh trc quan

i cc tiu thnh ting Vit c du. Chn Font ch VN Times new roman. Thm vo cc nt bm (Command Button) l : Mi, Thot v D.sch. Mi : mi khi bm vo nt ny ta s c mt mn hnh trng nhp vo bn ghi mi. Cch lm : Bm chut chn Control Wizard Bm chut chn Command Button Drag chut ch nh v tr cn t nt bm Chn Record Operations Chn AddNew Record, chn Next Qui nh dng ghi ch trn nt l Mi Chn Finish hon tt cng vic .

Thot : mi khi bm vo nt ny ta s kt thc lm vic vi Form. Cch lm : Bm chut chn Control Wizard Bm chut chn Command Button Drag chut ch nh v tr cn t nt bm 50

Lp trnh trc quan

Chn Form Operations Chn Close Form, chn Next Qui nh dng ghi ch trn nt l Thot Chn Finish hon tt cng vic . D.sch : mi khi bm vo nt ny ta s xem danh sch ca mt lp ty t Report to trc . Cch lm : Bm chut chn Control Wizard Bm chut chn Command Button Drag chut ch nh v tr cn t nt bm Chn Report Operations Chn Preview Report, chn Next Qui nh tn Report cn m l : DANH SACH LOP Qui nh dng ghi ch trn nt l D.Sch Chn Finish hon tt cng vic .

51

Lp trnh trc quan

Bc 9: ng ca s Design v chn Yes ghi li phn va thit k. Khi no cn nhp h s ta chn tn ca Form v Open, lc ta c mn hnh nhp :

Bi tp: tng t hy thm mt s chc nng khc vo Form trn. To cc Form nhp im, nhp danh mc lp...

52

Lp trnh trc quan

BI 8. MACRO V H THNG THC N

8.1.

MACRO

8.1.1 1. 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.

8.1.2
-

Cch to Macro

Bc 1: trong ca s Database chn nt Macro, tip n chn New Bc 2 :xut hin ca s khai bo Macro nh sau :

53

Lp trnh trc quan

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.

8.1.3 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...

8.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.

8.2.1

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...). 54

Lp trnh trc quan

Bc 1: to menu cp 1. Bm du chut vo nt Macro, chnNew. 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 : 55

Lp trnh trc quan

Macro Name : g vo tn cc mc trn Menu cp hai th nht. Nhng ch ny s c in ra trn thanh thc n. 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 :

56

Lp trnh trc quan

8.2.2 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.

57

Lp trnh trc quan

BI THC HNH
To h thng thc n ni cc Form, Report cc bi thc hnh trc vo mt ng dng chung. Thc n nh sau : Nhp s liu H s T chc lp ... ... Xem bo co Kt thc Danh sch lp Thng k s lng

Bc 1: to Macro cho thc n nm ngang.. Trong ca s Database chn nt Macro, tip n chn New Xut hin ca s khai bo Macro dnh cho thc n nm ngang. Ta g vo tn cc Macro con, dng thng bo trn thanh thc n.

Ta khai vo cc mc trn ca s nh sau : Action AddMenu AddMenu AddMenu Ket thuc Ketthuc Menu Name Nhap so lieu Xem bao cao Menu Macro Name Nhap Baocao

58

Lp trnh trc quan

ng ca s v ghi tn Macro l QUAN LY SINH VIEN Bc 2: to cc Macro ng.

To Macro nhap : Chn Macro, New chn View, Macro Name c mn hnh khai bo sau :

Ta khai cc mc nh sau : Macro Name Ho s Danh muc lop Action OpenForm OpenForm Form Name Nhap ho so Nhap lop Form Form View

ng ca s trn v ghi li tn ca Macro l Nhap (tn ny ging nh tn trong Macro qui nh trong bc trc). To Macro baocao : 59

Lp trnh trc quan

Chn Macro, New Chn View, Macro Name c mn hnh khai bo sau : Macro Name Danh sach lop Thong ke so luong ... Action OpenReport OpenQuery ... Form Name Danh sach lop Thong ke so luong .. View Print Preview Print Preview ..

ng ca s v ghi vi tn baocao To Macro Ketthuc. Tng t nh trn nwng mc Action ta chn Close. Bc 3: gn Macro vi mt Form. Chn Form, chn New. Double Click chut vo nn ca Form chn Properties. Khai vo mc ToolBar tn ca Macro ngang l : QUAN LY SINH VIEN

ng ca s to Form vat tn l MENU. Nh vy, t y v sau nu mun chn cng vic trn thanh thc n ta ch vic m Form c tn l MENU Bi tp : thm vo thc n cc chc nng khc.

60

PHN II VISUAL BASIC

Lp trnh trc quan

BI 9. M U

9.1.

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 lm 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 bng hnh nh (Graphic User Interface - GUI) trong Windows. l Visual Basic Version 1.0 vo nm 1991. Trc , chng ta khng c mt giao din bng hnh nh (GUI) vi mt IDE (Integrated Development Environment) gip cc chuyn gia lp trnh tp trung cng sc v th g vo cc kh khn lin quan n doanh nghip ca mnh. 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 v cho mnh giao din cn thit trong ng dng (application) mt cch d dng v nh vy, tp trung n lc gii p 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) ph gip 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 (Database) trc tip tc ng (interact) n ngi dng qua DAO (Data Access Object). ng dng ny thng gi l ng dng trc din (front-end application). 61

Lp trnh trc quan

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 ni vi c s d liu (Database) qua s kt hp ca ADO (Active Data Object). ADO cn gip cc chuyn gia pht trin mng ni vi c s d liu (Database) khi dng Active Server Pages (ASP). Lu y, 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 Logic nht 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 Logic 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. Visual Basic c xem l mt ngn ng lp trnh xy dng trn c s ca mt phng php lp trnh hin i c MicroSoft a vo th trng vo nm 1991 vi phin bn 1.0. Trong hai nm sau th ln lt cc phin bn 2.0 v 3.0 ra i. Hin nay phin bn 4.0 ang c s dng rng ri v c nhng thay i, b sung quan trng so vi cc phin bn trc.

62

Lp trnh trc quan

9.2.

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). 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. 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. 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".

9.3.

Lm vic vi Visual Basic

9.3.1 Ci t : a. Yu cu v thit b:

63

Lp trnh trc quan

CPU AT386 tr ln. a cng cn trng 10MB tr ln. RAM 2MB tr ln. Mn hnh mu EGA hoc VGA. Con chut.

b. Ci t: Khi ng WINDOWS. Chn a CD ROM v o . Run, sau g D:\SETUP hoc E:\SETUP (thng thng my s t khi

- Chn File ng phn Setup) 9.3.2 Khi ng

Nu trn my tnh ang s dng c ci t chng trnh Visual Basic th ta tin hnh khi ng nh sau : Khi ng WINDOWS Double Click ti biu tng ca Visual Basic.

9.3.3 Mn hnh lm vic Sau khi khi ng s xut hin mn hnh lm vic ca Visual Basic vi cc ca s chnh nh sau : Menu Bar Tools Bar Tools Box Form Project Properties

a. Menu Bar (thanh thc n): ghi cc chc nng lnh ca Visual Basic ngi s dng c th chn thc hin. Mun chn mt chc nng trn ta c th thc hin : Cch 1 : Click chut ti tn chc nng cn thc hin. Cch 2 : Alt + <Ch ci u> 64

Lp trnh trc quan

Cch 3 : F10, chn v g Enter ti chc nng .

b. Tools Bar (thanh cc cng c): cha cc biu tng v mi biu tng s tng ng vi mt lnh c thc hin. y l nhng lnh thng c s dng trong Visual Basic. Mun chn mt lnh no ta ch cn Double Click ti biu tng tng ng. c. Tools Box (hp cng c): cha cc biu tng v mi biu tng tng ng vi mt hp iu khin (Control Box). N cho php chn hp iu khin a vo biu mu trong qu trnh thit k. Mun a mt hp iu khin vo biu mu ta thc hin qua cc bc sau : Click chut ti biu tng tng ng. Drag chut ti khu vc cn t hp iu khin trn Form. Khai bo cc thuc tnh v th tc tng ng.

d. Form Window (ca s biu mu): l ca s dnh thit k chng trnh. Trn ny ta s t cc hp iu khin xem, nhp s liu hoc cc nt chn th tc cn thc hin. e. Project Window (ca s d n) : l ca s lit k tn cc tp tin, biu mu v cc n th chng trnh thuc ng dng hin hnh. Ta c th xem mt biu mu hoc b m lnh chng trnh nu Double Click ti tn tng ng. f. Properties (ca s thuc tnh): l ca s cho xem cc thuc tnh gn lin vi mt i tng. 9.3.4 Kt thc Cho php ngng lm vic vi Visual Basic v quay v li mi trng WINDOWS. Chn File. Chn Exit.

65

Lp trnh trc quan

BI 10. 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. 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.

66

Lp trnh trc quan

10.1.

Lm vic vi hp 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. 10.1.1 Cc loi hp iu khin : trn thanh Tools Bar c cc nt iu khin thng s dng nh :

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 cc nt iu khin nh sau : Tn gi Pointer Label Box Frame Check Box List Box Horizontal Scroll Timer Directory List Shape Control Image Control ngha Di chuyn im t 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 67

Lp trnh trc quan

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

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

10.1.2 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.

68

Lp trnh trc quan

10.1.3

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.

10.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 . 10.2.1 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 :

69

Lp trnh trc quan

10.2.2 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> 10.2.3 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.

70

Lp trnh trc quan

- 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 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 71

Lp trnh trc quan

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.

10.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. Mun thc hin biu mu ta chn Run Start

72

Lp trnh trc quan

BI THC HNH
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 : B xung 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 :

73

Lp trnh trc quan

10.4.

Thay i thuc tnh :

10.4.1 Hp Text : Click chut vo hp Text1, g phm F4. i cc thuc tnh : MultiLine : True. ScrollBar : Both. Name : txt 10.4.2 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). Name : cmdcut, cmdcopy, cmdpaste v cmddele 10.4.3 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. 10.4.4 i Font : 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. 74

Lp trnh trc quan

10.5.

Vit cc th tc tnh hung :

10.5.1 Th tc ca Form : y l th tc cha cc ch th khi to gi tr ban u. Bm Double Click chut vo nn ca Form. G vo ni dung chng trnh nh sau :

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

10.5.2 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

75

Lp trnh trc quan

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

10.5.3 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

10.6.
-

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 : 10.6.1 Lu tr : Chn File. Chn File Save As Chn kiu tp tin l TEXT, t tn l Vanban.TXT. 76

Lp trnh trc quan

10.6.2 Xem m lnh : 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 = "Form1" ClientHeight = 3390 ClientLeft = 1140 ClientTop = 1665 ClientWidth = 6495 Height = 3870 Left = 1080 LinkTopic = "Form1" ScaleHeight = 3390 ScaleWidth = 6495 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

77

Lp trnh trc quan

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

"Gch chn" = = = = = = = "VNtimes new roman" 1 400 9.75 0 'False 0 'False 0 'False 375 240 8 1560 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 Caption = "In m" BeginProperty Font name = "VNtimes new roman" charset = 1

78

Lp trnh trc quan

weight size underline italic strikethrough EndProperty Height = Left = TabIndex = Top = Width = End

= = = = =

400 9.75 0 'False 0 'False 0 'False 375 240 6 360 1215

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

79

Lp trnh trc quan

italic strikethrough EndProperty Height = Left = TabIndex = Top = Width =

= =

0 0 495 3480 3 2520 1215

'False 'False

End Begin VB.CommandButton cmdcopy Caption = "Sao chp" 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

80

Lp trnh trc quan

Left TabIndex Top Width

= = = =

360 1 2520 1095

End Begin VB.TextBox txt BeginProperty Font name charset weight size underline italic strikethrough EndProperty Height = Left = MultiLine = ScrollBars = TabIndex = Text = Top = Width = End

= = = = = = =

"VNtimes new roman" 1 400 9.75 0 'False 0 'False 0 'False 2055 360 -1 'True 3 'Both 0 "THU1.frx":0000 120 3735

End Attribute VB_Name = "Form1" 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

81

Lp trnh trc quan

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

82

Lp trnh trc quan

BI 11. BIN NH

11.1.

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 nhnhng 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 #. Tn bin khng c trng vi cc t dnh ring (Reserved word). Visual Basic khng phn bit k t ch in vi ch thng.

11.2.

Khai bo bin :

Ta c th nh ngha bin bng mt trong cc cch sau : 11.2.1 Khai bo bng : 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].

- Single (4 byte): s thc chnh xc n thuc [-3.4E+38, -3.4E+38]. Gi li 7 ch s sau du thp phn. 83

Lp trnh trc quan

- 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 11.2.2 Cch vit : 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.

V d : 84

Lp trnh trc quan

DIM hoten$ DIM sotien@ DIM luong% 11.2.3 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. 11.2.4 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. V d : DefInt S 85

Lp trnh trc quan

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 b ch th DIM hoc mang cc hu t qui nh kiu d liu.

11.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>

11.4.

Khai bo 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. 11.4.1 Khai bo mng : Khai bo bng DIM : 86

Lp trnh trc quan

Cch vit :

DIM <Tn mng>(phn t) AS <Kiu d liu> DIM <Tn mng><Hu t kiu>(phn t)

Hoc -

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)

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. 11.4.2 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. 87

Lp trnh trc quan

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

11.5.

Khai bo bng 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. 11.5.1 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. 11.5.2 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>

88

Lp trnh trc quan

11.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 Functions di y. Xin lu rng khi gi cc Functions ny, nu chng ta a mt data value bt hp l th c th b li. Function CBool () CByte () CDate () CDbl () CInt () CSng () CStr () Ch thch 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 Function ni trn chng ta cng c th dng Function Val convert mt String ra Number. Lu l khi Function Val process mt String nu n gp mt character no khng phi l digit hay decimal point th n khng process tip na. Do nu Input String l "$25.50" th Val returns con s 0 v $ khng phi l mt digit. Nu Input String l "62.4B" th Val returns 62.4. CDbl l Function 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. Ci bug hay gp ca CSng l nu Input String khng c g c (tc l InputString="") th Function CSng cho chng ta Type Mismatch Error. Do khc phc khuyt im ny chng ta c th vit cho mnh mt Function 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

89

Lp trnh trc quan

BI 12. 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.

12.1.

Cu trc chn :

12.1.1 Cu trc : 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" Trong trng hp ny ch c duy nht mt ch th. 12.1.2 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>

90

Lp trnh trc quan

ELSE <Ch th 1'> .................... <Ch th n'> IF

END

12.1.3 Cu trc : Select Case <Biu thc>


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

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 :"

91

Lp trnh trc quan

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

12.2.

Cu trc lp : cho php t ng lp i lp li nhm lnh nhiu ln.

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

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. 92

Lp trnh trc quan

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! 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.


FOR so! = 0 Print so! NEXT so! TO 10 STEP 0.25 'bin s l Single

12.2.2 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.

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


So! = 1 While so! <= 10 Print so! So! = so! + 1 Wend

12.2.3 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.

93

Lp trnh trc quan

- 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.

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


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

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

12.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.

94

Lp trnh trc quan

12.3.1 Nhn : 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... Cch vit tn_nhn: Cch gi : 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 <Nhm ch th>

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. 95

Lp trnh trc quan

12.3.2 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"

96

Lp trnh trc quan

BI 13. 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.

13.1.

Circle Method

C php : [Object].Circle [Step] (X,Y), Radius [, [Color], [Start], [End], [Aspec]] Object : tn ca biu mu hoc khung hnh m ta cn v hnh trn trn .

- Step : cho bit y l ta tng i so vi v tr hin hnh do hai thuc tnh CurrentX v CurrentY cung cp. 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 . 97

Lp trnh trc quan

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

13.2.

Line Method

C php : [Object].Line [Step] (X1, Y1) - [Step] (X2, Y2)[,Color][,BF] 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.

- 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.

98

Lp trnh trc quan

CX = ScaleWidth / 2 ' Get horizontal center. CY = ScaleHeight / 2 ' Get vertical center. 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

13.3.

Cls Method
[object.]Cls

C php :

Tc dng : xa mn hnh ca Form. V d :


Private Sub Xoa_Click() Dim Msg ' Declare variable. AutoRedraw = -1 ' Turn on AutoRedraw. ForeColor = QBColor(15) ' Set foreground to white.

99

Lp trnh trc quan

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

13.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..


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

13.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.

100

Lp trnh trc quan

Show End Sub

' Show form again.

13.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")

13.7.

Move Method
[Object.]Move Left [, Top][, Width][, Height]

C php : -

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.

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.

101

Lp trnh trc quan

Width = 4 * Inch ' Set width. Height = 2 * Inch ' Set height. 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

13.8.

Point Method
[Object.]Point (X, Y)

C php : -

X : Honh ca im cn v. Y : Tung ca im cn v.

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 & "."

102

Lp trnh trc quan

MsgBox Msg End Sub

' Display message.

13.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

13.10. PrintForm Method


C php : [Object.]PrintForm

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

103

Lp trnh trc quan

13.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

104

Lp trnh trc quan

13.12. Refresh Method


C php : [Object.]Refresh 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.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 :

105

Lp trnh trc quan

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 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. 106

Lp trnh trc quan

13.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

13.15. Show Method


C php : [Object.]Show [Style] Style qui nh trng thi v n c gi tr 0 hoc 1. Tc dng : cho php lm xut hin i tng c tn c ch nh. V d :

Private Sub Hienhinh_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

13.16. 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.

107

Lp trnh trc quan

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

108

Lp trnh trc quan

BI 14. HM
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.

14.1.

Cc hm x l chui :
LEN(String)

14.1.1 Tm chiu di chui :

Tr v kt qu l s k t c trong String. V d : LEN("ABCD") tr v kt qu l 4. 14.1.2 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. 14.1.3 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. 14.1.4 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 109

Lp trnh trc quan

14.1.5 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 14.1.6 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 14.1.7 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"

14.1.8 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 " 14.1.9 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"

110

Lp trnh trc quan

14.1.10

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" 14.1.11 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. 14.1.12 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 14.1.13 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" 14.1.14 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 :

111

Lp trnh trc quan

# : 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"

14.1.15

Tm chui con:

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

112

Lp trnh trc quan

- 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 : InStr("I Love You", "Love") tr v kt qu l 3

InStr("I Love You", "love", 0) tr v kt qu 0.

14.2.

Cc hm x l 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. 113

1. SIN(gc) 2. COS(gc) 3. TAN(gc) 4. ATAN(s) 5. EXP(s) 6. LOG(s) 7. CCUR(s) 8. CINT(s) 9. CLNG(s) 10. CSNG(s) 11. CDBL(s) 12. FIX(s) 13. INT(s)

Lp trnh trc quan

14. RND[(s)] 15. ABS(s) 16. SGN(s) 17. SQR(s)

To mt s ngu nhin. Tr tuyt i Du m/dng ca mt con s Ly cn bc hai.

114

Lp trnh trc quan

BI 15. DNG LIST CONTROLS


C hai loi List controls dng trong VB6. l Listbox v Combobox. C hai u hin th mt s dng ta c th la chn. Listbox chim mt khung ch nht, nu chiu ngang nh th c khi khng hin th y mt dng, nu chiu di khng hin th tt c mi dng th Listbox t ng cho ta mt vertical scroll bar cho bit cn c nhiu dng b che v ta c th xem cc dng y bng cch dng vertical scroll bar. Combobox thng ch hin th mt dng, nhng ta c th chn hin th bt c dng no khc. Combobox ging nh mt tp hp ca mt Textbox nm pha trn v mt Listbox nm pha di.

Listbox c rt nhiu cng dng v n rt uyn chuyn khi s dng. Trong bi ny chng ta s xem xt cc ng dng sau ca Listbox : Hin th nhiu s la chn ngi s dng c th chn bng cch click hay drag-drop Nhng cch dng Property Sorted Cch dng Multiselect Dng hin th Events Dng Search hay x l text Cch dng Itemdata song song vi cc Items ca danh sch Dng lm Queue

115

Lp trnh trc quan

15.1. Listbox
15.1.1 Hin th nhiu s la chn Ta hy 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 Property 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 ta mun hin th dng tn y trong lblName. Sau cng ta cho vo mt CommandButton tn CmdExit cho dng 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

116

Lp trnh trc quan

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

Trong v d ny, Listbox lstNames c 7 dng (Items). Con s Items ny l Property 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 generate Event lstNames_Click. Lc by gi ta c th bit c ngi s dng va mi Click dng no bng cch hi Property ListIndex ca lstNames, n s c value 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. Array 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.

15.1.2 Save content 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 Output text file v vit mi items ca lstNames vo :

117

Lp trnh trc quan

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

App l mt Object c bit i din cho chnh chng trnh ang chy. y ta dng Property Path bit lc chng trnh ang chy th thc thi module EXE ca n nm u. L do l ta thng cc files lin h cn thit cho chng trnh ln qun hoc ngay trong folder ca chng trnh hay trong mt subfolder, chng hn nh data, logs, .v.v.. App cn c mt s Properties khc cng rt hu dng nh PrevInstance, Title, Revision ..v.v. Nu mi khi ng mt chng trnh m thy App.PrevInstance = True th lc by gi cng c mt copy khc ca chng trnh ang chy. Nu cn ta End program 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 Text file ta cn phi Open n trong mode Output v khai bo t y tr i s dng mt con s (FileNumber) i din tp tin thay v dng chnh FileName. trnh dng mt FileNumber hin hu, tt nht ta hi xin h iu hnh cung cp cho mnh mt con s cha ai dng bng cch gi Function FreeFile. Con s FileNumber ny cn uc gi l FileHandle (Handle l tay cm). Sau khi ta Close FileNumber con s ny tr nn FREE v h iu hnh s c th dng n li.

118

Lp trnh trc quan

Do chng ta phi trnh gi FreeFile lin tip hai ln, v OS s cho chng ta cng mt con s. Tc l, sau khi gi FreeFile phi dng n ngay bng cch Open mt File ri mi gi FreeFile ln k c mt con s khc. cch dng ch Input, Output cho files l relative (tng i) vi v tr ca chng trnh (n nm trong memory ca computer). Do t trong memory vit ra a cng th gi l Output. Ngc li c t mt Text file nm trn hard disk vo memory cho chng trnh ta th gi l Input. 15.1.3 Load mt Text file vo Listbox Trong bi ny, thay v nh cc Items ca Listbox vo Property List ca lstNames ta c th populate (lm y) lstNames bng cch c cc Items t mt Text file. Ta th thm mt CommandButton tn CmdLoad. Ta s vit code khi ngi s dng click nt CmdLoad chng trnh s m mt Input text file 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

c t mt Text file ta cn phi Open n trong mode Input.

119

Lp trnh trc quan

Trc khi populate lstNames ta cn phi xa tt c mi items c sn bn trong. thc hin vic ta dng method Clear ca Listbox. Sau ta dng method AddItem cho thm tng dng vo trong Listbox. By default, nu ta khng ni nht vo ch dng no th AddItem nht Item mi vo di cht ca Listbox. Nu mun nht 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

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

Mi ln chng ta RemoveItem t Listbox the ListCount ca Listbox gim i mt n v 1. Do nu chng ta dng Test da vo ListCount ca mt ListBox nhy ra khi mt Loop th phi coi chng trnh lm cho value ListCount thay i trong Loop v AddItem hay RemoveItem. Ta c tng dng ca mt Text file bng cch dng Line Input #FileNumber. Khi c n cui File, system d cho ta value EOF(FileNumber) = True. Ta dng value y cho chng trnh nhy ra khi While.. Loop. Cu Do While NOT EOF(FileNumber) c ngha Trong khi cha n End-Of-File ca Text File i din bi FileNumber th c tng dng v b vo Listbox.

15.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 Label th hai l lblRoom v cho Property BorderStyle ca n bng Fixed Single. K n select c hai Labels (Click a Label then hold down key Ctrl while clicking the second Label) ri click copy v paste ln Form. VB6 s cho chng ta Array cahailblRoom labels.

120

Lp trnh trc quan

cho lstNames mt DragIcon, chng ta click lstNames, click Property DragIcon popup mt dialog cho chng ta chn mt dragdrop icon t folder C:\Program Files\Microsoft Visual Studio\Common\Graphics\Icons\Dragdrop, chng hn nh DRAG2PG.ICO:

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 assignproperty Text ca Source (tc l lstNames, mc control t n pht xut Drag action) vo Property Caption ca lblRoom. Lu v y ta dng cng mt tn cho c hai lblRoom nn ch cn vit code mt ch handle 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:

121

Lp trnh trc quan

15.3. Dng Property Sorted


Trong v d trn ta c th quyt nh v tr ca mt Item mi khi ta nht n vo Listbox. i khi ta mun cc Items ca Listbox c t ng sp theo th t Alphabet. Chng ta c th set Property Sorted = True thc hin chuyn ny. C mt gii hn l chng ta phi cho Property Sorted mt value (True hay False) trong lc design, ch trong khi chy chng trnh chng ta khng th lm cho Property Sorted ca Listbox thay i. Gi d ta mun sort 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 Property Visible= False ( khng ai thy n) v Property Sorted=True. Khi cn sort lstNames chng hn, ta copy content ca lstNames b vo lstTemp, on Clear lstNames ri copy content ( c sorted) ca lstTemp tr li lstNames. Lu l ta c th AddItem vo mt Listbox vi Property Sorted=True, nhng khng th xc nh nht Item vo trc dng no, v v tr ca cc Items do Listbox quyt nh khi n sort 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() 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

122

Lp trnh trc quan

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

Nhn tin, ta mun c option sort cc tn theo FirstName hay Surname. Vic ny hi rc ri hn mt cht, nhng nguyn tc vn l dng ci 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 Load file "MyList.txt" vo lstNames bng cch Click button CmdLoad ch khng Edit Property List ca lstNames enter Items lc design na. Ngoi ra ta dng du phy (,) tch FirstName khi SurName trong mi tn cha trong file MyList.txt. Content ca file 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 nht tn vo lstNames, FirstName v SurName mi th chim 10 characters. cc ch trong Items ca lstNames sp dng ngay ngn ta i Font ca lstNames ra Courier New. Courier New l mt loi Font m chiu ngang ca tt c cc ch l nh nhau, trong khi hu ht cc Fonts khc nh Arial, Times Roman ..v.v. l Proportional Spacing, c ngha l rng cc k t l khc nhau. Listing mi ca Sub CmdLoad_Click tr thnh nh sau: 123

Lp trnh trc quan

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 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 sort theo FirstName cng ging nh sort 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

124

Lp trnh trc quan

sort 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. Code sort 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) 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 sorted theo SurName hin ra nh sau:

125

Lp trnh trc quan

Nhn tin y ta sa Sub CmdSave_Click Save Items theo sorted order 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

126

Lp trnh trc quan

BI 16. T TO 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 : 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 method 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

127

Lp trnh trc quan

Trong trng hp ny tht ra frmMyForm tuy l mt Class nhng c dng y nh mt Object. Neu 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 ym 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 a cho Object ca Class dng. 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. 128

Lp trnh trc quan

Chng ta s thy m ra mt khung trng v Project Explorer vi Properties Window. Trong Properties Window, hy sa Name property 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 Private mX As Integer Private mY As Integer Private mWidth As Integer Private mHeight As Integer

129

Lp trnh trc quan

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)

130

Lp trnh trc quan

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 Box t clsBox. Mi Box 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 declare 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 method (ging nh Sub) gi l Property Let X (vValue). Ta thy y vValue c assigned cho mX (i.e. mX = vValue ), ci Private variable 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 Property Let X n lm g cng c. Mi ln chng ta dng Property Window edit Font size, forcolor hay backcolor th chng nhng cc properties 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 property. l v trong method Property c c code bo Label thc hiu redisplay. Ngc li, khi ta dng property X ca Object myBox, khng phi ta ch c tr s thi m cn thc thi c ci method Property Get X. Ni tm li, Property cho ta c hi thc thi mt method mi khi ngi s dng c hay vit tr s variable 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 Property Let X li nh sau:
Public Property Let X(ByVal vValue As Integer) If (vValue >= 0) Then mX = vValue End If End Property

Property c th l Read Only hay Write Only. Nu mun mt Property l Read Only th ta khng cung cp Property Let. Nu mun mt Property l Write Only th ta khng cung cp Property Get. Ngoi ra nu lm vic vi Object, thay v Data type thng thng, th ta phi dng Property Set, thay v Property Let.

131

Lp trnh trc quan

V d ta cho clsBox mt Property mi, gi l Font dng object ca class stdFont ca VB6. Trong clsBox ta declare mt Private variable mFont v vit mt Property Set Font nh sau:
Private mFont As StdFont Public Property Set Font(ByVal newFont As StdFont) Set mFont = newFont End Property

Ta s dng property 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 box nh DrawBox, nhng n dng BackColor ca mn nh (canvas), nn coi nh xa ci box c sn. Do , nu mun, chng ta c th sa Sub DrawBox li mt cht nhn mt Optional draw color 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 End If End Sub

Trong v d trn, Optional parameter fColor c tested bng function 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 refer n mt object thuc class clsBox, IDE Intellisense s hin th cc Properties v Subs/Functions ca clsBox nh trong hnh di y:

132

Lp trnh trc quan

Trong chng trnh ny, mi khi ta click nt Draw th mt Box c instantiate, cho ta X,Y v kch thc Width, Height, ri c v ra ngay trn form. Ch Me trong code ni n chnh ci form frmClass.

cho chng trnh th v hn, khi ngi s dng clicks nt Animate, ta s cho mt box mu chy t tri qua phi. Khi ngi s dng clicks nt Two Boxes ta s v hai boxes, 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 boxes t clsBox cng c, v d nhin mi box c mt b properties vi gi tr ring ca n. 133

Lp trnh trc quan

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 executes th Class s Raise mt event 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

134

Lp trnh trc quan

By gi, trong frmClass thay v ch declare Dim myBox as clsBox, ta s declare 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 code handle Event Draw ca myBox, tc l ta cung cp code 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.

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

Nh rng, ta declare mt Object vi WithEvents khi ta mun handle cc Events ca n. Trong v d trn frmClass l ch ca myBox v n handles 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 codes ny trong mt Class c giao cho mt Textbox khi form chnh gi Sub InitObject a 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

135

Lp trnh trc quan

BI 17. DEBUG
Bugs l nhng li ca chng trnh m ta pht hin khi chy n. Debug l cng vic loi tt c nhng lm trong chng trnh n chy m xui trong mi tnh hung. Thng thng mun sa mt ci bug no trc ht ta phi tm hiu l do khin n xut hin. Mt khi bit c duyn c 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 lm Specifications hay c cho tin tc sai lc, hoc l chng trnh b st chi tit cn phi c. 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 Software Tools (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.

17.1. 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, database ln bao nhiu, phi chy nhanh n mc no .v.v.. C nhiu chng trnh phi b thay i na chng v lp trnh vin hiu lm iu khch hng mun. Do trong s lin h vi khch hng ta cn phi hi i, hi li, phn hi vi khch hng nhiu ln iu ta hiu bng th t, ti liu, khch xc nhn l ta bit ng h trc khi xc tin vic thit k chng trnh. Nu sau ny khch i , l quyn ca h, nhng h phi tr tin thay i (variation).

136

Lp trnh trc quan

17.1.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 th. 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 h 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 test cho nhng trng hp c bit, in hnh l bad data - khi ngi s dng bm lung tung hay database cha nhiu rc. Nu chng trnh chy trong real-time (tc l data thu nhp qua Serial Com Port, Data Acquisition Card hay mng), chng ta cn phi lu nhng trng hp khc nhau ty theo vic g xy ra trc, vic g xy ra sau. Lc by gi Logic ca chng trnh s ty thuc vo trng thi (State) ca data. Tt nht l ngh n nhng Scenarios 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 Data Structures (tables, records ..v.v.) v con s Forms vi Classes. Nh rng mi Class gm c mt Data Structure v nhng Subs/Functions/Properties lm vic (operate) trn data y. Data structure phi cha y nhng chi tit (data fields, variables) ta cn. K l nhng cch chng trnh process data. 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. 17.1.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. 17.1.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 .v.v.., 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 m mt call n mt Sub. Th g cn phi tnh ra hay ly t ni khc th c th c thc hin bng mt Function. 137

Lp trnh trc quan

Nh rng im khc bit chnh gia mt Sub v mt Function l Function cho ta mt kt qu m khng lm thay i nhng parameters ta a cho n. Trong khi , du rng Sub khng cho ta g mt cch r rng nhng n c th thay i tr s (value) ca bt c parameters no ta chuyn cho n ByRef. Nhc li l khi ta chuyn mt parameter ByVal cho mt Sub th ging nh ta a mt copy (bn sao) ca variable cho Sub, Sub c th sa i n nhng n s b b qua, khng nh hng g n original (bn chnh) variable. Ngc li khi ta chuyn mt parameter ByRef cho mt Sub th ging nh ta a bn chnh ca variable cho Sub n c th sa i vy. Do trnh trng hp v tnh lm cho tr s mt variable b thay i v ta dng n trong mt Sub/Function chng ta nn dng ByVal khi chuyn n nh mt parameter vo mt Sub/Function. Tht ra, chng ta c th dng ByRef cho mt parameter chuyn vo mt Function. Trong trng hp d nhin variable 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.

17.2. Mt s lu
17.2.1 ng s Error Mi khi chng trnh c mt Error, hoc l Compilation Error (v ta vit code khng ng vn phm, ng vng), hoc l Error 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 Errors rt nhiu, nn chng ta phi tp bnh tnh i din vi chng.

138

Lp trnh trc quan

17.2.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. 17.2.3 t tn cc variables c ngha Trong thc t chng ta gp rt nhiu kh khn khi lm vic vi cc variables 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 variables 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 local variable (variable declared trong Sub/Function) v global variable (variable declared trong Form hay Basic Module). Local variable s che y global variable cng tn, nn nu chng ta mun ni n global variable trong hon cnh y chng ta s dng lm local variable. 17.2.4 Dng Option Explicit Chng ta nn trung thnh vi cch dng Option Explicit u mi Form, Class hay Module. Nu c variable no nh vn sai VB6 IDE s cho chng ta bit ngay. Nu chng ta khng dng Option Explicit, mt variable nh vn sai c xem nh mt variable mi vi gi tr 0 hay "" (empty string).

139

Lp trnh trc quan

Ni chung chng ta nn thn trng khi assign mt data type cho mt variable vi data type khc. Chng ta phi bit r chng ta ang lm g khi b phn ng ph (side effect). 17.2.5 Desk Check Kim li code trc khi compile. Khi ta compile code, nu khng c error ch c ngha l Syntax ca code ng, khng c ngha l logic ng. Do ta cn phi bit chc l code ta vit s lm ng iu ta mun bng cch c li code trc khi compile n ln u tin. Cng vic ny gi l Desk Check (Kim trn bn). Mt chng trnh c Desk Checked k s cn t debug v cha t bugs khng ng trc. L do l mi scenarios c tin liu chu o. 17.2.6 Son mt Test Plan Test Plan 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.

17.3. Cc k thut x l li
17.3.1 X l Error lc Run time Khi EXE ca mt chng trnh vit bng VB6 ang chy, nu gp Error, n s hin th mt Error Dialog cho bit l do gy li. Sau khi chng ta click OK, chng trnh s ngng. Nu chng ta chy chng trnh trong VB6 IDE, chng ta c dp bo chng trnh ngng trong source code ch c Error bng cch bm button Debug trong Error Dialog. Tip theo chng ta c th tm hiu tr s cc variables on nguyn do ca Error. 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 g 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 statement: ON Error Resume Next Th t ch tr i, nu chng trnh gp Error, n s b qua (ignore) 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 Error b ignored m khng ai ), th ta cng b lun, c th khng bit bt 140

Lp trnh trc quan

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. 17.3.2 Dng Breakpoints Cch hay nht theo di execution ca chng trnh l dng Breakpoint lm cho chng trnh ngng li mt ch ta mun trong code, ri sau ta cho chng trnh bc tng bc. Trong dp ny ta s xem xt tr s ca nhng variables coi chng c ng nh d nh khng. Chng ta on trc execution s i qua ch no trong code, 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 cursor nm trn dng th l hy b break point. Lc chng trnh ang dng li, chng ta c th xem tr s ca mt variable bng cch cursor ln trn variable y, tooltip s hin ra nh trong hnh di y:

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

141

Lp trnh trc quan

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 IF statement th khi Iterator value c tr s y th ta ngng breakpoint ti statement Beep (thay g statement 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: 142

Lp trnh trc quan

17.3.3 Dng Immediate Window Immediate Window cho php ta thc thi nhng VB statement trong khi chng trnh ang dng li. Ta c th dng mt Print statement hin th tr s ca mt variable hay kt qu ca mt Function, gi mt Sub hay thay i tr s mt variable 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 VB Statement chng ta nh trong Immediate Window s c executed ngay khi chng ta bm Enter. Chng ta c th dng li bt c VB statement no trong Immediate Window, ch cn bm Enter cui dng y. 17.3.4 Theo du chn 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 statement ging nh di y.

143

Lp trnh trc quan

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 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

144

Lp trnh trc quan

End Select Close FileNo End Sub

17.3.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 variable hay ca mt expression l bao nhiu, c th l chng ta khng bit ti sao mt variable 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 dialog 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.

17.3.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.

145

Lp trnh trc quan

Khi dng Elimination Method chng ta phi cn nhc Logic ca code 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 variables 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.

146

Lp trnh trc quan

BI 18. DNG MENU


Menu trong Windows l ni tt c cc commands ca mt chng trnh c sp xp th t theo tng loi gip ta dng d dng. C hai loi menu ta thng gp : drop-down (th xung) menu v pop-up (hin ln) menu. Ta dng drop-down menu lm Menu chnh cho chng trnh. Thng thng n nm pha trn chp mn hnh. Nm dc theo chiu ngang l Menu Bar, nu ta click ln mt command trong Menu Bar th chng trnh s th xung mt menu 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):

18.1. Main Menu


Ta dng Menu Editor to hoc sa mt Menu cho chng trnh. Menu thuc v mt Form. Do , trc ht ta select mt Form lm vic vi Designer ca n (ch khng phi code ca Form). K ta dng Menu Command Tools | Menu Editor hay click ln icon ca Menu Editor trn Toolbar lm cho Menu Editor hin ra.

147

Lp trnh trc quan

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 edit thm vo cc MenuItems Open, Save, Close v Exit.

148

Lp trnh trc quan

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 Edit s c thm bn du chm, tc l tht mt bc trong Menu (Nested).

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.

149

Lp trnh trc quan

Nu mun cho ngi s dng dng Alt key x dng Menu, chng ta nh thm du & trc character chng ta mun trong menu Caption. 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 Statement hin th mt message n gin "You clicked mnuOpen". Chng ta c th t cho mt MenuItem tn g cng c, nhng ngi ta thng dng prefix mnu d phn bit mt menuItem Event vi mt CommandButton Event. Do , ta c nhng tn mnuFile, mnuOpen, mnuSave, mnuClose, mnuExit. Ci gch ngang gia MenuItems Close v Exit c gi l Menu Separator. Chng ta c th nht mt Menu Separator 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.

150

Lp trnh trc quan

By default, 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 selected ln v xung trong danh sch cc MenuItems. Chng ta dng button Delete hy b MenuItem c selected, Insert nht mt MenuItem mi ngay trn MenuItem c selected v Next chn MenuItem ngay di MenuItem c selected.

18.2. 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 cho ng tnh hung) bng mt Mouse click. Thng thng l Right Click v ci Context Menu cn c gi l Pop-up Menu. Chnh ci 151

Lp trnh trc quan

Pop-Up menu tht ra l Drop-down menu ca mt Menu Bar Command. Bnh thng Menu Bar Command y c th visible hay invisible (tn hnh). 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.

152

Lp trnh trc quan

18.3. Cha menu Settings trong Registry


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

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 value ca Option WordWrap nh mt Key trong Registry. Registry l mt loi c s d liu c bit ca Windows Operating System dng cha nhng d kin lin h n Users, Hardware, Configurations, ActiveX Components ..v.v. dng trong computer. Trong Registry, data c sp t theo tng loi theo ng cp. Chng ta c th Edit trc tip tr s cc Keys trong Registry bng cch dng Registry Editor.

153

Lp trnh trc quan

Trong chng trnh ny ta cng nhn tin bt 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 Checked value ca mnuWordWrap v Left, Top ca Form. Code y ta s trong Sub Form_QueryUnload v n s c executed 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 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) :

154

Lp trnh trc quan

Khi cha value ca mt th g (ta gi l 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 converted bi Val ra 0) l default value cho Left v Top, cn "False" l default value ca mnuWordWrap.Checked. Ngoi ra ta cng mun chng trnh nh tn ca ba Files User 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 Files, ci mi nht nm trn ht. 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 Files. 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 Files nh mt String trong Section Settings ca Registry. Ta phn cch tn cc Files bng delimiter character |. V d: "LattestFileName.txt|OldFileName.txt|OldestFilename.txt" Mi ln ngi s dng Open mt File ta s thm tn File y vo trong Registry v bt c lc no ch gi li tn ca 3 Files mi dng nht.

155

Lp trnh trc quan

Di y l code dng thm tn File 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

Code 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

Lp trnh trc quan

Ta s dng mt Class tn clsRecentFiles c bit lo vic cha tn Files vo Registry v hin th tn cc Files y trong Menu. Bn trong clsRecentFiles ta cng dng clsString, l mt Class gip ta ngt khc String trong Registry ra tn ca cc Files da vo ch cc delimiter character |.
' 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 = "|"

157

Lp trnh trc quan

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 ' 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

158

Lp trnh trc quan

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) ' Assign to Caption myForm.mnuRFile(i - 1).Visible = True ' Make the MenuItem visible If i = MaxFiles Then Exit For ' This line maybe unnecessary Next ' Make the rest of the MenuItem array mnuRFile invisible if there are less than MaxFiles 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 Line Command RegEdit sau khi click Start | Run

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

159

Lp trnh trc quan

160

Lp trnh trc quan

BI 19. DNG DIALOGS


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 th p dng cho mt hon cnh ring bit. Trong chng ny ta s bn qua 4 loi Dialogs chnh v nghin cu v khi no v cch no ta dng chng: Message Boxes Input Boxes Common Dialogs Custom Dialogs

19.1. Message Boxes


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 nh 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:

161

Lp trnh trc quan

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. Nu click Cancel th c ngha ngi s dng i vic chm dt chng trnh v tr li tip tc dng MSWord. Ta dng routine MsgBox hin th Message Box nh coding trong hnh di y:

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

Constant ca cc icons ta c th dng l vbCritical, vbQuestion, vbExclamation v vbInformation.

162

Lp trnh trc quan

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 execution 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" 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 OK Cancel Abort Retry Ignore Yes No Const vbOK vbCancel vbAbort vbRetry vbIgnore vbYes vbNo

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

163

Lp trnh trc quan

Nu chng ta thy mnh thng dng MsgBox vi cng mt icon v nhng buttons, nhng c Text message khc nhau, chng ta c th vit mt Global Subroutine trong .BAS module 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 Text message m khng s dng lm ln icon. Sau ny mun i cch hin th Error message ch cn edit mt ch. Nu ngi s dng mun chng ta lu tr tt c mi errors xy ra lc runtime, chng ta ch cn thm vi dng code trong Sub Hin thError vit Error message vo mt text file.

19.2. Input Boxes


Vi Message Boxes, ngi s dng ch c th click ln mt button. 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 input data t ngi s dng v khng hin th mt icon. 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 parameters ca Function InputBox$. Parameter th nht l Text message, parameter th hai l Title ca Dialog, parameter th ba l Default Input Value. y l value c hin th sn trong Input Box khi n xut hin, nu l input user thng nh vo th ngi s dng ch cn click nt OK l . Hai parameters cui cng l Optional (ty chn, c cng c, khng c cng khng sao). N l X,Y coordinates ca Input Box trong n v twips. H thng ta ly gc trn bn tri lm chun vi X=0, Y=0.

164

Lp trnh trc quan

Input Box c hai dng Functions: InputBox$ - returns mt String ng hong InputBox - returns mt String nm trong Variant variable

Nu chng ta click nt Cancel th returned Value l empty string, chng ta c th test empty string nhn din trng hp ny. Di y l mt v d dng Function 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:

165

Lp trnh trc quan

Ta khng th lm g c trong lc ngi s dng input data, phi i sau khi ngi s dng click OK th mi bt u x l input textstring. Ngc li nu ta dng mt Textbox trong mt Form thng thng, ta c th code trong cc Event handlers ca Events KeyPress hay Change kim sot cc keystrokes ca ngi s dng. Input Boxes ch cho ta nh vo mt text string duy nht. Nhiu khi ta mun ngi s dng nh vo nhiu th nn cn phi c mt form ring. 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.

19.3. Common Dialogs


Chng ta c thy hu nh mi chng trnh trong Windows u c cng nhng dialogs Open v Save files ? V hu nh tt c chng trnh u c cng dialogs chn mu, font 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:

166

Lp trnh trc quan

Tn Open File Save File Color Font Print Help

Method ShowOpen ShowSave ShowColor ShowFont ShowPrinter ShowHelp

19.4. 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 .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"

167

Lp trnh trc quan

Exit Sub End If End Sub

Hy chy chng trnh y v click button Open, chng trnh s hin th error message di y:

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

Chng ta c th chn folder no ty bng cch di chuyn t folder ny qua folder khc hay thay i disk drive. 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 statement: 168

Lp trnh trc quan

.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 generate mt Error 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.

Trong v d trn ta nh ngha cc properties ca CommonDialog1 bng code. Chng ta cng c th dng Properties Windows nh ngha chng nh di y: 169

Lp trnh trc quan

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

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

Lp trnh trc quan

19.5. Cc loi Dialog c sn dng


19.5.1 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.

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. 171

Lp trnh trc quan

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 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

172

Lp trnh trc quan

19.5.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: Constant 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.

173

Lp trnh trc quan

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

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

19.5.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 click button Properties hay button Preferences. Ta cng c th quyt nh in t trang no n 174

Lp trnh trc quan

trang no ca document v in bao nhiu copies. 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 properties 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 default values ca nhng properties 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

175

Lp trnh trc quan

19.5.4

Help Dialog

Ta dng method ShowHelp hin th cc thng tin gip , nhng nh phi cho CommonDialog t nht tr s ca cc properties 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.

19.6. 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

176

Lp trnh trc quan

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 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.

177

Lp trnh trc quan

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 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

178

Lp trnh trc quan

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

179

Lp trnh trc quan

BI 20. DNG HA
Visual Basic 6 c cho ta mt s phng tin v ha (graphics) trang im cho cc ca s thm phong ph, thn thin, d lm vic v p mt hn. D rng cc phng tin v th ny khng mnh cho ta vit nhng chng trnh tr chi (games) nhng c th p ng cc nhu cu cn thit thng thng. Khi ni n ha, ta mun phn bit n vi Text thng thng. V d ta dng Notepad edit mt bi th trong mt ca s (V d : Hm qua em i tnh v ). 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 Text. By gi, trong khi bi th cn ang hin th, ta dng mt chng trnh Graphic nh PhotoImpact Capture ca ULead chp ci hnh ca s ca bi th (active window) thnh ging nh mt photo, th ta c mt Graphic. Sau , mun sa i bi th t graphic ny ta phi dng mt graphic editor nh MSPaint, PaintShopPro,.v.v.. Cc ch trong hnh cng c cng dng graphic nh ta thy mt photo, nn mun edit phi dng mt c vi mu sn.

20.1. Mu (color) v mn (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. 20.1.1 mn (resolution) Thng thng mn (resolution) ca mn nh 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 mn 1028x768 vi card SuperVGA v Monitor tt. Ta ni card SuperVGA c n 2MB RAM, ti sao phi cn n 2MB hin th graphic p? Nu mu ca mi pixel c biu din bi mt byte d kin th vi mt byte ta c th cha mt con s t 0 n 255. ngi ta ng vi nhau theo mt quy c rng s 0 tng trng cho mu en, s 255 tng trng cho mu trng chng hn. Nu mn ca mn nh l 1024x768 th ta s cn 1024x768=786432 bytes, tc l gn 0,8 MB. 180

Lp trnh trc quan

Mt byte c 8 bits. i khi ta nghe ni 16 bit color, ni thay v mt 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 bit color 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 (Vector Graphic Adapter) card khng lin h g vi RAM ca b nh computer. Nn nh rng cng mt graphic hin th trn hai mn nh c cng mn, v d nh 800x600, nhng kch thc khc nhau, v d nh 14 inches v 17 inches, th d nhin hnh trn mn nh 17 inches s ln hn, nhng n vn c cng mt s pixels, c iu pixel ca n ln hn pixel ca mn nh 14 inches. Ni mt cch khc, nu ta dng mn nh ln hn th graphic s ln hn nhng khng c ngha l n r hn. Mun thy r chi tit, ta phi lm cho graphic c mn cao hn. Ta thay i Hin th Properties ca mt mn nh bng cch right click ln desktop ri select Properties, k click Tab Settings ri chn Screen resolution v Color quality ging nh hnh di y:

181

Lp trnh trc quan

Khi ta tng mn ca mn nh, 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. Phm cht ca cc graphic vn khng thay i, mc du hnh nh hn. Nh l mun hnh r hn th khi cu to v cha graphic, ta phi dng mt mn cao. Ging nh khi chp hnh, mun hnh p ta cn ci my chp hnh dng phim ln ca th chuyn nghip v focus k lng, thay v dng my r tin t ng, ch a ln l bm chp c. 20.1.2 Mu (color) Khi ta dng ch c mt bit (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 bits) cho 8 pixels. Du vy, nu mn ca graphic cao , th hnh cng p. Th xem cc tuyt tc photos trng en ca Cao m, Cao Lnh th bit. Cc my Fax dng nguyn tc scan hnh giy c A4 ra thnh nhng pixels trng en ri gi qua ng dy in thoi qua u kia ti to li hnh t nhng d kin pixels. 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: Chng ta ch nh trc tip mt con s hay chn mt mu t ci Palette.

182

Lp trnh trc quan

Chng ta chn mt trong cc hng s nh ngha sn trong VB, gi l intrinsic color constants (intrinsic c ngha nm na l cy nh l vn hay in-built), chng hn nh vbRed , vbBlue. Danh sch ca intrinsic color constants ly t VB6 online help c lit k di y:

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

Di y l tr s cc mu ta c th dng vi Function 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 Function RGB trn ba mu Red, Green v Blue. Trong ci bng lit k cc intrinsic color constants pha trn, nu chng ta s thy vbWhite(0xFFFFFF) l tng s 183

Lp trnh trc quan

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. 0 l khng dng mu y, 255 l dng ti a mu y. H thng s ta dng hng ngy l Thp Phn. Tr s 0xFF ca vbRed l con s 255 vit di dng Thp lc phn (Hexadecimal hay Hex cho gn 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..v.v. Tc l thay v ch dng 10 symbols t 0 n 9 trong Thp phn, ta dng 16 symbols t 0 n F. Mun bit thm v h thng s Hex hy c bi C s Nh Phn. 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.

184

Lp trnh trc quan

20.2. Function RGB


p dng Function 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 ci VScrolls. Thm mt Label pha di, t tn n l lblRGBValue, nh clear caption ca n, ng c ch Label1 nh di y:

185

Lp trnh trc quan

By gi select c ba VScrolls v edit value ca property Max trong ca s Properties thnh 255, ni khi ko ci bar ca mt VScroll1 ln xung ta gii hn tr s ca n t Min l 0 n Max l 255.

Chuyn chnh ta phi lm l vit code 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:
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

186

Lp trnh trc quan

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:

20.3. 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 8bit (1 byte) v 16bit (2 bytes) color, nhng y ta ni chuyn 3 byte color. Nh th c th mn nh khng kh nng cung cp mi mu m Function RGB tnh ra. Vy VGA card s lm sao? 187

Lp trnh trc quan

V d mt card VGA ch h tr n 8 bits. N s cung cp 256 mu khc nhau. Nu Function 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 gn nhau trn mu v cho ta o tng mu ta mun. Cng tc ny c gi l Color Mapping v ci mu c lm ra c gi l custom color.

20.4. 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 ci 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 188

Lp trnh trc quan

dng s c bin i theo Color Scheme m ngi s dng chn khi b trng hp ci mu tr nn chng ging ai. Lc thit k, ta cng c th chn Intrinsic Color Constant t Tab System khi chn mu.

20.5. Graphic files


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

189

Lp trnh trc quan

BI 21. C S D LIU (DATABASE)

21.1. Table, Record v Field


Ni n c s d liu, ta lp tc ngh n SQLServer, Access hay Oracle .v.v., nhng ni cha rt nhiu d liu ta c th lu tr hay ly chng ra 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 vi rt nhiu d liu trong khi tp trung vo vic lp trnh phn giao din vi ngi dng (ngi s dng). Do ta cn c mt kin thc cn bn v kin trc ca c s d liu hiu l do to sao ta thit k hay truy cp n theo nhng cch nht nh. Ta s dng Access Database biblio.mdb, nm C:\Program Files\Microsoft Visual Studio\VB98\biblio.mdb minh ha cc nim cn bit v c s d liu. Trong database ny c 4 tables: Authors (tc gi), Publishers (nh xut bn), Titles ( mc) v Title Author.

Table Authors cha nhiu records. Mi bn ghi trong table Authors cha 3 fields: Au_ID, Author v Year Born (nm sanh). Ta c th trnh by Table Authors di dng mt spreadsheet nh sau:

190

Lp trnh trc quan

V cng mt field ca cc records hin th trong cng mt ct ca spreadsheet, nn ta cng ni n mt field nh mt column (ct). V v mi data record chim mt row (dng) ca spreadsheet, nn c khi ta cng ni n mt bn ghi nh mt row. Tht tnh m ni, ta khng cn phi c mt computer lu tr hay lm vic vi mt table nh Authors ny. Ta c th dng mt hp card, trn mi card ta ghi cc chi tit Au_ID, Author v Year Born ca mt Author. Nh th mi tm card tng ng vi mt bn ghi v nguyn ci hp l tng ng vi Table Authors. Ta s sp cc card trong hp theo th t ca s Au_ID c th truy cp bn ghi nhanh chng khi bit Au_ID. Ch kh mt ni, nu mun bit c bao nhiu tc gi, trong s 300 card trong hp, gi hn 50 tui th phi mt vi pht mi c th tr li c. Database trong computer nhanh hn mt h thng bng tay (Manual) l ch .

21.2. Primary Key v Index


trnh s trng hp, thng thng c mt field ca bn ghi, v d nh Au_ID trong Table Authors, c dnh ra cha mt tr s c o (unique). Tc l trong Table Authors ch c mt bn ghi vi field Au_ID c tr s y m thi. Ta gi n l Primary Key.

191

Lp trnh trc quan

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 sort sn cc records theo th t alphabet. Ta cng c th hp nhiu fields li sort cc records. Tht ra, chnh cc records khng cn phi c di i nm ng v tr th t. Ta ch cn nh v tr ca n u trong table l ri. Ci field hay tp hp ca nhiu fields (v d surname v firstname ) dng vo vic sorting ny c gi l Index (ngn tay ch). Mt Table c th c mt hay nhiu Index. Mi Index s l mt table nh ca nhng pointers, cha v tr ca cc records trong Table Authors. N ging nh mc lc index cui mt cun sch cha trang s ch ta n ng phn ta mun tm trong quyn sch. Khi thit k mt Table ta ch nh Datatype ca mi field c th kim tra data cho vo c hp l hay khng. Cc Datatypes thng dng l Number, String ( cha Text), Boolean (Yes/No), Currency ( cha tr s tin) v Date ( cha date/time). Datatype Number li gm c nhiu loi datatypes v con s nh Integer, Long (integer chim 32 bits), Single, Double, .v.v. Di y l Datatypes ca cc fields trong bn ghi Author:

192

Lp trnh trc quan

C loi Datatype c bit tn l AutoNumber. Tht ra n l Long nhng tr s c pht sinh t ng mi khi ta thm mt bn ghi mi vo Table. Ta khng lm g hn l phi chp nhn con s y.

21.3. Relationship v Foreign Key


By gi, nu chng ta ang chy Microsoft Access quan st database biblio.mdb, chng ta c th dng Menu Command Tools | Relationships nh sau xem s lin h (relationships) gia cc tables.

193

Lp trnh trc quan

Access s hin th giao thoi Relationships, trong mi table c cha tn cc fields. Mi table li c mt hay hai si dy ni qua cc tables klhc. Mi si dy l mt mi lin h (relationship), n ni mt field trong mt table vi mt field c cng tn trong table kia. V d nh gia hai tables Publishers v Titles c mi lin h da trn field PubID (Publisher IDentification - s l lch ca nh xut bn). Hn na, nu chng ta s thy u dy pha table Publishers c con s 1, cn u dy bn pha table 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 table Authors v Title Author, ta thy mt tc gi (bn u c con s 1) c th sng tc nhiu tc phm c i din bi cc bn ghi Title Author. Trong khi gia hai tables Titles v Title Author, ta c mt mi lin h one-to-one, tc l tng ng vi mi bn ghi Title ch c mt bn ghi Title Author. Cu hi t ra l cc mi lin h one-to-many c ci g quan trng. Tng tng khi ta lm vic vi table Titles (tm gi l Tc phm), nhiu khi ta mun bit chi tit ca nh xut bn ca tc phm y. Tht ra ta c th cha chi tit ca nh xut bn ca mi tc phm ngay trong table Titles. Tuy nhin, lm nh th c im bt li l records ca cc tc phm 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 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 table ring, tc l table Publishers. 194

Lp trnh trc quan

Nu gi s ta bt u thit k database vi Table Titles, ri quyt nh tch cc chi tit v nh xut bn vo mt table mi, tn Publishers, th k thut y c gi l normalization. Ni mt cch khc, normalization l thit k cc tables trong database lm sao mi loi mnh d kin (khng phi l Key) ch xut hin mt ch. Trong mi lin h one-to-many gia tables Publishers v Titles, field PubID l Primary Key trong table Publishers. Trong table Titles, field PubID c gi l Foreign Key, c ngha rng y l Primary Key ca mt table l (foreign). Hay ni mt cch khc, trong khi lm vic vi table Titles, lc no cn chi tit mt nh xut bn, ta s ly cha kha l (Foreign Key) dng lm Primary Key ca Table Publishers truy cp bn ghi ta mun. l chnh Table Titles c Primary Key ISBN ca n.

21.4. Relational Database


Mt database c nhiu tables v h tr cc lin h, nht l one-to-many, c gi l Relational Database. Khi thit k mt database, ta s tm cch sp t cc d liu t th gii tht bn ngoi vo trong cc tables. 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.

21.5. Cc li ch
Trong s cc li ch ca mt thit k Relational Database c: - Sa i d kin, cho vo records mi hay delete (gch b) records c sn rt hiu qu (nhanh). - Truy cp d kin, lm bo co (Reports) cng rt hiu qu. V d kin c sp t th t v c quy c nn ta c th tin cy tnh tnh ca database. V hu ht d kin nm trong database, thay v trong chng trnh ng dng, nn database t c documentation (ti liu ct ngha). D sa i chnh cu trc ca cc tables.

195

Lp trnh trc quan

21.6. Integrity Rules (cc quy lut lim chnh)


Integrity Rules c dng ni v nhng qui lut cn phi tun theo trong khi lm vic vi database m bo l database cn tt. C hai loi quy lut: lut tng qut (General Integrity Rules) v lut ring cho database (Database-Specific Integrity Rules). Cc lut ring ny thng ty thuc vo cc quy lut v mu dch (Business Rules). 21.6.1 General Integrity Rules C hai quy lut lim chnh lin h hon ton vo database: Entity (bn th) Integrity Rule v Referential (ch n) Integrity Rule. Entity Integrity Rule ni rng Primary Key khng th thiu c, tc l khng th c tr s NULL. Quy lut ny xc nhn l v mi Primary Key a n mt row c o trong table, nn d nhin n phi c mt tr s ng hong. Lu l Primary Key c th l mt Composite Key, tc l tp hp ca mt s keys (columns/fields), nn nht nh khng c key no trong s cc columns l NULL c. Referential Integrity Rule ni rng database khng th cha mt Foreign Key m khng c Primary Key tng ng ca n trong mt table khc. iu y hm rng: - Ta khng th thm mt Row vo trong mt Table vi tr s Foreign Key trong Row y khng tm thy trong danh sch Primary Key ca table bn pha one (1) m n lin h. - Nu c thay i tr s ca Primary Key ca mt Row hay xa mt Row trong table bn pha one (1) th ta khng th cc records trong table bn pha many () cha nhng rows 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 Row hay xa mt Row trong table 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 records ca table bn pha many () c thay i theo. Nu Row cha Primary Key b deleted th cc records tng ng trong table bn pha many () b deleted theo. 196

Lp trnh trc quan

- Nullify (cho thnh NULL): Nu Row cha Primary Key b deleted th tr s Foreign Key tng ng trong cc records ca table bn pha many () c i thnh NULL, hm ng c i tm thm chi tit u c. 21.6.2 Database-Specific Integrity Rules Nhng quy lut lim chnh 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 database v nht l ty thuc vo cc quy lut v mu dch (Business Rules) ta dng cho database, v d nh mi bn ghi v tin lng ca cng nhn phi c mt field S Thu (Tax Number) do s Thu V pht hnh cho cng dn. Lu l cc quy lut ny cng quan trng khng km cc quy lut tng qut v lim chnh. Nu ta khng p dng cc DatabaseSpecific Integrity Rules nghim chnh th database c th b h v khng cn dng c.

21.7. Microsoft Access Database Management System (MSAccess DBMS)


Microsoft Access Database Management System gm c Database Engine v nhng cng c i chung cung cp cho ngi s dng mt mi trng lm vic thn thin vi database, nh Database Design (thit k cc tables v mi lin h), Data entry v bo co (reports). Km theo vi Visual Basic 6.0 khi ta mua l mt copy ca Database Engine ca MSAccess. Tn n l Jet Database Engine, ci li ca MSAccess DBMS. Cc chng trnh VB6 c th truy cp database qua Jet Database Engine. Nu trn computer ca chng ta c ci sn MSAccess, th chng ta c th dng thit k cc tables ca database hay cho data vo cc tables.

21.8. Properties Required v Allow Zero Length


Khi thit k mt table field, lu property Required v nht l property Allow Zero Length ca Text. Nu property Required ca mt field l Yes th ta khng th update (vit) mt bn ghi vi field y c tr s NULL. Nu mt Text field c property Allow Zero Length l No th th ta khng th update mt bn ghi khi field y cha mt empty string.

197

Lp trnh trc quan

Khi ta to mt bn ghi ln u, nu khng cho tr s ca mt field, th field y c tr s l NULL. Thng thng, Visual Basic 6.0 khng thch NULL value nn ta phi th mt field vi Function IsNULL() m bo n khng c tr s NULL trc khi lm vic vi n. Nu IsNULL tr v tr s False th ta c th lm vic vi field y. Nh l khi tr s NULL c dng trong mt expression, ngay c khi chng trnh khng cho Error, kt qu cng l NULL.

21.9. Lm vic vi cc versions khc nhau


Nu my chng ta ang chy MSAccess2002 th chng ta c th lm vic vi Access database file version 97, 2000 v 2002. Nu cn phi convert t version ny qua version khc, chng ta c th dng Access DBMS Menu Command Tools | Database Utilities | Convert Database | To Access 2002 File Format.... Nu mun gi nguyn version, chng ta c th convert database qua File Format 2002 sa i, ri sau convert tr li File Format c.

Access database file ln ln rt nhanh, v cc records b deleted vn cn nm nguyn, nn mi tun chng ta nn nh nn n li b ht cc records b deleted bng cch dng 198

Lp trnh trc quan

Access DBMS Menu Command Tools | Database Utilities | Compact and Repair Database... hay dng function DBEngine.CompactDatabase trong VB6.

21.10.

Dng Query vit SQL

Mt cch truy cp database l dng ngn ng Structured Query Language (SQL) theo chun do ISO/IEC pht hnh nm 1992, gi tt l SQL92. Tt c mi database thng dng u h tr SQL, mc du nhiu khi chng cn cho thm nhiu chc nng rt hay nhng khng nm trong chun. Cc lnh SQL thng dng l SELECT, UPDATE, INSERT v DELETE. Ta c th dng phng tin thit k Query ca MSAccess vit SQL. Sau khi thit k Query bng cch drag drop cc fields, chng ta c th dng Menu Command View | View SQL nh sau:

Tip theo y l SQL statement ca Query bn trn m chng ta c th copy paste vo trong code VB6:

199

Lp trnh trc quan

21.11. Dng Link Table lm vic trc tip vi database loi khc
Ta c th dng mt database loi khc, nh DBase, trc tip trong VB6 nh dng mt Access database bnh thng. Mun thit lp mc ni y, chng ta dng Menu Command File | Get External Data | Link Tables... ri chn loi DBase v chnh file ca table m chng ta mun dng nht n vo Access database ang m:

21.12.

Database Server v mt s khi nim

D Jet Database Engine l mt relational database rt tt v hiu nng, n thuc loi File Based database, tc l n th ng, khng chy mt mnh nhng phi ty thuc vo chng trnh dng n. File Based database khng thch hp vi nhng ng dng c nhiu ngi dng cng mt lc.

200

Lp trnh trc quan

Trong khi , mt Database Server nh SQLServer chy ring phc v bt c chng trnh khch (client) no cn. Database Server thich hp cho cc ng dng c nhiu ngi s dng v ch c mt mnh n chu trch nhim truy cp d liu cho mi clients. N c th cha nhiu routines a phng, gi l Stored Procedures, thc hin cc cng tc client yu cu rt hiu nng. Database Server thng c cch i ph hu hiu khi c s c v phn cng nh a h hay cp in. Ngoi ra, Database Server c sn cc phng tin v an ninh v backup. N cng c thm cc chc nng dng cho mng. Ngy nay ta thu thp d liu di nhiu hnh thc nh Email, Word documents, Speadsheet. Khng nht thit d liu lun lun c cha di dng table ca nhng records v khng nht thit d liu lun lun c lu tr trong mt database ng hong. D vy, chng vn c xem nh database di mt mt chng trnh ng dng. Do , ta dng t Data Store (kho d liu) thay th cho database ni n ni cha d liu. V i vi chng trnh s dng d liu, ta ni n Data Source (ngun d liu) thay v database. Khi lp trnh bng VB6 truy cp database, ta nhn database mt cch tru tng, tc l du n l Access, DBase, SQLServer hay Oracle ta cng xem nh nhau. Nu c thay i loi database bn di, cch lp trnh ca ta cng khng thay i bao nhiu. Trong tng lai, mt XML file cng c th c xem nh mt database nho nh. N c th ng mt mnh hay l mt table trch ra t mt database chnh huy. XML l mt chun m ta c th dng import/export d liu vi tt c mi loi database h tr XML. Ta c th trao i d liu trn mng Intenet di dng XML. Ngoi ra, thay v lm vic trc tip vi mt database ln, ta c th trch ra vi tables t database y thnh mt XML file. K ta ch lp trnh vi XML file cho n khi kt thc s trn (merge/reconcile) tp tin XML vi database ln. Nu phn ln cc chng trnh p dng c thit k lm vic cch ny, th trong tng lai ta khng cn mt Database Server tht mnh.

201

Lp trnh trc quan

BI 22. S DNG CONTROL DATA

22.1. Control Data


T VB5, Visual Basic cho lp trnh vin mt control truy cp c s d liu, tn n ch n s l Data. Nh ta bit, c mt c s d liu Microsoft gi km theo VB6 - l Jet Database Engine. Jet Database Engine l cng c x l d liu ca MS Access Database Management System. Cho n VB5, 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 nng v tin, nhng b gii hn trong phm vi MS Access. Du 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 ni vi loi databases m ch dng mt method duy nht. iu ny ct bt gnh nng cho lp trnh vin, ch cn hc mt k thut lp trnh duy nht m c th lm vic vi bt c loi database no. Nht l khi sau ny nu cn phi thay i loi database, nh nng cp t Access ln SQLServer chng hn, th s sa i v coding rt t. Khi dng ODBC chung vi DAO, ta c th cho Access Database ni vi cc databases 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 databases. 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 database mi, rt quan trng, l ADO (ActiveX Data Objects). Trong mt bi ti ta s kho st v ADO vi nhng u im ca n. Tuy nhin, v DAO rt n gin v hiu nng nn ta vn c th tip tc dng n rt hu hiu trong hu ht cc p dng. Do bi ny v bi k s tp trung vo nhng k thut lp trnh ph bin vi DAO.

202

Lp trnh trc quan

Cch dng gin tin ca control Data 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 project trong Project Explorer bn phi ri edit property Name 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 set property Align ca n trong Properties Window thnh 2 - Align Bottom. Click bn phi dng property 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 computer ca chng ta c th n nm trn disk C hay D.

Trong chng trnh ny ta mun lm vic vi table Titles ca database BIBLIO.MDB, xem v edit cc records. property DefaultType ca Data1 c tr s 2- UseJet, tc l dng k thut DAO, thay v dng k thut ODBC.

203

Lp trnh trc quan

Khi chng ta click ln property Recordsource ca Data1, ri click ln ci tam gic nh bn phi, mt ComboBox s m ra cho ta thy danh sch cc tables trong database. Chng ta hy chn Titles. property 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 (b 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 Table. Trong trng hp y c th ta ly v tt c records trong table hay ch nhng records 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). Mt bn ghi trong Recordset cng c th l tp hp cc ct (columns) t hai hay nhiu tables qua cc mi lin h one-to-one v one-to-many. V d nh khi ly cc records t table Titles, ta mun c thm chi tit tn cng ty (Company Name) v in thoi (Telephone) ca nh xut bn (table Publishers) bng cch dng Foreign Key PubID trong table Titles lm Primary Key trong table Publishers ly cc chi tit y. Nu chng ta cha nm vng nim Foreign Key th hy c li bi Database. Trong trng hp y ta c th xem nh c mt virtual table l tp hp ca hai tables 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.

204

Lp trnh trc quan

Chn textbox txtTitle, ri set property Datasource ca n trong Properties Window thnh Data1. Khi click ln property Datafield ca txtTitle v m ComboBox ra chng ta s thy lit k tn cc Fields trong table Titles. l v Data1 c coi nh trung gian ly table Titles t database. 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 table Titles nh di y:

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 205

Lp trnh trc quan

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 method MoveLast th property 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 method MovePrevious th property BOF (Begin-Of-File) ca Recordset tr thnh True. Nu mt Recordset khng c cha mt bn ghi no c th c hai properties EOF v BOF u l True. c tnh hin th d liu trong cc textboxex 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 edit Year Published i t 1985 thnh 1983 ri click Navigator button Next hin th bn ghi th nh, k click Navigator button Previous hin th li bn ghi u tin th chng ta s thy l field Year Published ca bn ghi u tin tht s c thay i (updated) thnh 1983. iu ny c ngha rng khi Data1 navigates t bn ghi ny n bn ghi khc th nu bn ghi ny c s thay i v ngi s dng edited, 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 edit mt bn ghi th chng ta c th set property Locked ca cc textboxes y thnh True ngi s dng khng th edit cc textboxes nh trong hnh di y:

206

Lp trnh trc quan

22.2. Ch nh v tr Database 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 computer ca khch, cha chc file database y nm trong mt folder c cng tn. V d trn computer mnh th database nm trong folder E:\Program Files\Microsoft Visual Studio\VB98, nhng trn computer ca khch th database nm trong folder C:\VB6\DataControl chng hn. Do , khi chng trnh khi ng ta nn xc nh li v tr ca database. Gi d ta mun database trong cng mt folder vi chng trnh ang chy, ta c th dng property Path ca Application Object App nh sau:
Dim AppFolder As String 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 file database ng ch, khng cn bit ngi ta ci chng trnh chng ta u trong hard disk ca computer khch.

22.3. Thm bt cc Records


Chng trnh trn dng cng tm c, nhng n khng cho ta phng tin thm (add), bt (delete) cc records. 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 property 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 database ta dng method Refresh nh Data1.Recordset.Refresh.

207

Lp trnh trc quan

Lc chung trnh mi khi ng, ngi s dng ang xem (browsing) cc records 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:

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: 208

Lp trnh trc quan

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, property 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

Trong lc code, ta Update (cp nht) mt bn ghi trong Recordset bng method Update. Nhng ta ch c th gi method Update ca mt Recordset khi Recordset ang trong Edit hay AddNew mode. Ta t mt Recordset vo Edit mode bng cch gi method Edit ca 209

Lp trnh trc quan

Recordset, v d nh Data1.Recordset.Edit. Tng t nh vy, ta t mt Recordset vo AddNew mode bng cch gi method 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 method 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 method CancelUpdate, v d nh Data1.Recordset.CancelUpdate.

22.4. 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.

210

Lp trnh trc quan

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

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: Property RowSource Listfield Value Data2 Ch thch y l datasource ca chnh DBCombo1. N cung cp table Publishers.

Company Khi RowSource pha trn c chn ri, Combo ca property Name Listfield ny s hin th cc fields ca table Publishers. Company Name l field ca RowSource m ta mun hin th trn DBCombo1. Data1 PubID y l datasource ca bn ghi m ta mun. edit, tc l bn ghi ca table Titles Field (ca record Title) s c thay i. Field trong RowSource (table Publishers) tng ng vi item user chn trong DBCombo1 (Company Name). 211

DataSource Datafield

BoundColumn PubID

Lp trnh trc quan

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

Property 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 property BoundText ca DBCombo1 trong Sub cmdNew_Click nh sau:
Private Sub cmdNew_Click() ' Place Recordset into Recordset AddNew mode Data1.Recordset.AddNew ' Default Publisher is "GLOBAL ENGINEERING", i.e. PubID=324 DBCombo1.BoundText = 324 ' Place controls in Edit Mode SetControls (True) End Sub

212

Lp trnh trc quan

BI 23. LP TRNH VI K THUT DAO

23.1. Reference DAO


Trong bi ny ta s hc nhng cch lp trnh cn bn vi MS Access database qua k thut DAO m khng cn dng n Control Data nh trong bi 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 ci checkbox bn tri nh trong hnh di y.

Sau trong code ca Form chnh ta s declare variable myDatabase cho mt instance ca DAO database v variable 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.

213

Lp trnh trc quan

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 database mt Recordset cha tt c records trong table Titles theo th t v mu t (alphabetical order) ca field Title v hin th bn ghi u tin.

23.2. Dng keyword SET


Chuyn trc ht 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 code 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 variable thuc data type 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 runtime dynamically allocates (dnh ra cho khi cn) mt phn trong b nh (memory) cha Object Database khi ta nhn c n t execution ca Method OpenDatabase. Du 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 variable myDB. V value 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. 214

Lp trnh trc quan

Lp trnh dng Pointer ni chung rt linh ng mang li hiu qu cao trong cc ngn ng nh C, Pascal, C++ ,v.v.. Tuy nhin, lp trnh vin phi nh tr li Operating System phn memory mnh dng khi khng cn cn n na Operating System li allocate cho Object khc. Nu cng vic qun l dng li memory khng n tha th c nhng mnh memory nm ri rc m Operating Sytem khng bit. Dn dn Operating System s khng cn memory d na. Ta gi hin tng y l memory leakage (r). 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 Method OpenRecordset ca database myDB.
'Open recordset Set myRS=myDB.OpenRecordset("Select*from Titles ORDER BY Title")

Ci parameter loi String ta dng cho method OpenRecordset l mt Lnh (Statement) SQL. N ch nh cho database ly tt c mi fields (columns) (Select *) ca mi bn ghi t Table Titles (from Titles) lm mt Recordset v sort cc records trong Recordset y theo alphabetical order ca field Title (ORDER BY Title). Nh l Recordset ny cng ging nh property Recordset ca mt Control Data m ta dng trong bi 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 property RecordCount ca Recordset nh trong code di y:
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 & "\" ' 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

215

Lp trnh trc quan

Hin threcord End If End Sub

' hin th details of current record

Sau khi dng method MoveFirst ca Recordset nh v con tr hin ti bn ghi u tin, ta hin th tr s cc fields ca bn ghi bng cch assign 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 field Year Publshed gm c hai ch nn ta phi t tn ca field y gia hai du ngoc vung ([]). trnh b phin phc nh trong trng hp ny, khi chng ta t tn database field trong lc thit k mt table hy dn dnh cc ch li vi nhau, ng ri ra. V d nh dng YearPublished thay v Year Published.

23.3. Cc nt di chuyn
Mun c cc nt Navigators tng ng vi ca mt Control Data, chng ta hy t ln Form 4 buttons mang tn CmdFirst, CmdPrevious, CmNext v CmdLast vi captions: <<, <, >, >>. Code 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 next record ' Display record details if has not gone past the last record If Not myRS.EOF Then

216

Lp trnh trc quan

Displayrecord Else myRS.MoveLast End If End Sub

' hin th details of current record ' Move back to last record

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 bi trc y v cc records c sorted:

217

Lp trnh trc quan

23.4. Thm bt cc Records


Ging nh chng trnh trong bi ri, ta s thm 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. 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 Edit mt bn ghi hin hu th AddNewRecord = False. 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 assign Empty string vo text property 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

218

Lp trnh trc quan

' 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 clicks Cancel trong khi ang edit cc textboxes, ta khng cn gi method 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 clicks Update, chng ta c dp kim tra data xem c field 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 assign tng Field vo textbox, th by gi khi Update ta phi lm ngc li, tc l assign property Text ca tng textbox vo Record Field tng ng. Sau cng ta gi method 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 GoodData = True End Function Private Sub CmdUpdate_Click()

219

Lp trnh trc quan

' 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

220

Lp trnh trc quan

23.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 locate (tm ra) 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 caption Close v Go. Sau khi select mt 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 set property Visible ca n thnh False. Ta s cho ImgSearch hin th hnh mt ng dm nn chng ta hy click vo bn phi property Picture trong Properties Window chn Icon BINOCULR.ICO t folder E:\Program Files\Microsoft Visual Studio\Common\Graphics\Icons\Misc:

Ci Primary Key ca table Titles l ISBN. Khi ngi s dng select mt sch ta mun bit ISBN ca sch y locate (nh ch) 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 221

Lp trnh trc quan

List2. Ta ch s dng List2 sau hu trng, nn hy set property 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 ' 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:

222

Lp trnh trc quan

Trong SELECT statement bn trn ta dng operator 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 h 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 clicks nt Go, ta s dng method 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

223

Lp trnh trc quan

Lu l trong string Criteria, v ISBN thuc loi text, ch khng phi l mt con s, nn ta phi kp n gia hai du ngoc n.

23.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 clicks nt Go, ta mun nh v tr ca bn ghi lc y sau ny quay tr li khi ngi s dng clicks nt Go Back. Chng ta hy thm vo Form mt button tn CmdGoBack vi Caption Go Back. Ta s thm mt variable tn LastBookmark loi data type Variant:
Dim LastBookMark As Variant

Lc u button CmdGoBack invisible, v ch tr nn visible sau khi ngi s dng clicks 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

23.7. LastModified
LastModified l vi tr ca bn ghi va mi c sa i hay thm vo trong Recordset. th iu ny chng ta hy thm mt button invisible tn CmdLastModified vi caption l Last Modified. Button ny ch hin ra sau khi ngi s dng clicks Update. Bt c lc no chng ta Click nt CmdLastModified, bn ghi mi va c sa i hay thm vo s hin th: 224

Lp trnh trc quan

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:

225

Lp trnh trc quan

BI 24. LP TRNH VI ADO

24.1. Control Data ADO


Visual Basic 6 cho ta s la chn v k thut khi lp trnh vi database, hoc l dng DAO nh trong hai bi 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 kin (data sources), khng nht thit phi l Access database hay ODBC. Ngun d kin c th l danh sch cc a ch Email, hay mt file text string, trong mi dng l mt bn ghi gm nhng fields ngn cch bi cc du phy (comma separated values). Nu trong DAO ta dng thng tn ca MSAccess Database th trong ADO cho ta ni vi (connect) mt database 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 Database, UserName/Password logon mt database .v.v.. Sau ta c th ly v (extract) nhng recordsets, v cp nht ha cc records bng cch dng nhng lnh SQL trn cc tables hay dng nhng stored procedures bn trong database. Bnh thng, khi ta mi khi ng mt project 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:

226

Lp trnh trc quan

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 edit property 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....

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

227

Lp trnh trc quan

ch Select or enter a database name ta chn E:\Program Files\Microsoft Visual Studio\VB98\BIBLIO.MDB, trong computer 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.

Lp connection xong ri, ta ch nh mun ly g v lm Recordset bng cch click property Recordsource ca Adodc1. Trong giao din Property Pages ca n chn 2228

Lp trnh trc quan

adCmdTable lm Command Type, k m Combo box cho Table or Stored Procedure Name chn table 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 records. 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. Chng ta hy chn tr s 2-adOpenDynamic cho property Cursor Type ca Adodc1:

229

Lp trnh trc quan

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 Fields trong table Titles. l v Adodc1 c coi nh trung gian ly table Titles t database. 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.

230

Lp trnh trc quan

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:

24.2. 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 records. By gi chng ta hy khi ng mt standard project VB6 mi, tn ADOClass v copy MS Access file BIBLIO.MDB, tc l database, vo trong cng folder 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:

231

Lp trnh trc quan

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...

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

Trong trang k chn Access lm Database Type.

232

Lp trnh trc quan

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

233

Lp trnh trc quan

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 bi trc.

Trong trang bn ghi Source ta chn table Titles. Listbox ca Available Fields s hin th cc trng ca table Titles. Sau khi chn mt field bng cch click ln tn field y trong Listbox, nu chng ta click hnh tam gic ch qua phi th tn field y s c di qua nm di cng trong Listbox Selected Fields bn phi. Nu chng ta click hnh hai tam gic ch qua bn phi th tt c mi fields cn li bn tri s c di qua bn phi. Chng ta cng c th sp t v tr ca cc selected fields bng cch click ln tn field y ri click hnh mi tn ch ln hay xung di chuyn field y ln hay xung trong danh sch cc fields. Ngoi ra, chng ta hy chn Title lm Column to Sort By trong ci Combobox ca n cc records trong Recordset c sp xp theo th t ABC (alphabetical order) ca field Tiu (Title).

234

Lp trnh trc quan

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

Khi Data Form Wizard chm dt, n s generate form frmADODataForm. Chng ta hy remove Form1 v dng Menu Command Project | ADODataControl Properties... i 235

Lp trnh trc quan

Startup Object thnh frmADODataForm. Th l tm xong chng trnh Edit cc records ca table 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 field ca table 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

236

Lp trnh trc quan

V v tr ca database, nu chng ta khng mun mt folder no th dng App.Path xc nh mi lin h gia v tr ca database v folder 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() ' 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: 237

Lp trnh trc quan

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 clicks 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. Method Requery ca clsTitles li gi method 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 DataMemberChanged "Primary" End Sub

238

Lp trnh trc quan

MC LC
BI 1. M U ........................................................................................................1 BI 2. ACCESS ........................................................................................................3 2.1. Gii thiu ...........................................................................................................3 2.2. Khi ng ACCESS..........................................................................................3 2.3. Khi nim v c s d liu trong Access ........................................................4 2.4. Cc php ton....................................................................................................5 2.4.1 Cc php ton Logic ...............................................................................5 2.4.2 Cc php ton s hc ..............................................................................5 2.4.3 Cc php ton so snh : >, >=, <, <=, = v <> .......................................6 2.4.4 Du ro :..................................................................................................6 BI 3. LM VIC VI C S D LIU..................................................................7 3.1. TO C S D LIU.....................................................................................7 3.1.1 To c s d liu bng WIZARD...........................................................7 3.1.2 To c s d liu trng ...........................................................................8 3.2. Hiu chnh c s d liu ...................................................................................9 BI 4. LM VIC VI TABLE ...............................................................................11 4.1. To cu trc ca Table...................................................................................11 4.1.1 To Table bng Wizard.........................................................................11 4.1.2 To Table bng DATASHEET VIEW..................................................11 4.1.3 To Table bng DESIGN VIEW .........................................................13 4.2. Nhp s liu vo Table....................................................................................14 4.3. Hiu chnh Table.............................................................................................15 4.3.1 Thay i cu trc bn ghi......................................................................15 4.3.2 Thay i ni dung bn ghi ....................................................................15 4.3.3 Thay i cch trnh by.........................................................................16 4.4. Khai thc s liu trn Table...........................................................................16 4.4.1 Tm v thay th .....................................................................................16 4.4.2 Thay i v tr trng ............................................................................16 4.4.3 Sp xp ..................................................................................................16 4.4.4 Lc bn ghi............................................................................................17 BI 5. LM VIC VI QUERY...............................................................................22 5.1. Khi nim.........................................................................................................22 5.2. Cch to QUERY............................................................................................23 5.2.1 Select Query.........................................................................................24 5.2.2 Cross Tab Query .................................................................................26 5.3. Hiu chnh QUERY .......................................................................................28 5.4. Thc hin QUERY..........................................................................................28 BI THC HNH ...................................................................................................29 BI 6. LM VIC VI REPORT ............................................................................34 6.1. Khi nim.........................................................................................................34 6.2. Cch to Report ..............................................................................................34 6.3. Hiu chnh Report...........................................................................................39 239

Lp trnh trc quan

6.4. Thc hin Report...........................................................................................39 BI THC HNH. ..................................................................................................40 BI 7. LM VIC VI FORM.................................................................................42 7.1. Khi nim :......................................................................................................42 7.2. Thit k Form : ...............................................................................................42 7.3. Hiu chnh Form.............................................................................................47 7.4. Thc hin Form ..............................................................................................47 BI THC HNH ...................................................................................................48 BI 8. MACRO V H THNG THC N.........................................................53 8.1. MACRO...........................................................................................................53 8.1.1 1. Khi nim : ......................................................................................53 8.1.2 Cch to Macro...................................................................................53 8.1.3 Thc hin Macro.................................................................................54 8.2. H thng thc n ..........................................................................................54 8.2.1 Cch to thc n: .............................................................................54 8.2.2 S dng thc n................................................................................57 BI THC HNH ...................................................................................................58 BI 9. M U ......................................................................................................61 9.1. Gii thiu.........................................................................................................61 9.2. Cc khi nim thng dng ..........................................................................63 9.3. Lm vic vi Visual Basic ..............................................................................63 9.3.1 Ci t :.................................................................................................63 9.3.2 Khi ng .............................................................................................64 9.3.3 Mn hnh lm vic ................................................................................64 9.3.4 Kt thc.................................................................................................65 BI 10. LP TRNH TRONG VISUAL BASIC .......................................................66 10.1. Lm vic vi hp iu khin..........................................................................67 10.1.1 Cc loi hp iu khin : trn thanh Tools Bar c cc nt iu khin thng s dng nh :........................................................................................67 10.1.2 Thm hp iu khin ln biu mu ....................................................68 10.1.3 Hiu chnh hp iu khin :................................................................69 10.2. THUC TNH ................................................................................................69 10.2.1 Khi thit k : .......................................................................................69 10.2.2 Khi thc hin chng trnh.................................................................70 10.2.3 Cc loi thuc tnh :............................................................................70 10.3. Th tc tnh hung:........................................................................................72 BI THC HNH ...................................................................................................73 10.4. Thay i thuc tnh : ......................................................................................74 10.4.1 Hp Text : ...........................................................................................74 10.4.2 Cc hp Command Button : ...............................................................74 10.4.3 Cc hp Check Box : ..........................................................................74 10.4.4 i Font : ............................................................................................74 10.5. Vit cc th tc tnh hung : .........................................................................75 10.5.1 Th tc ca Form : y l th tc cha cc ch th khi to gi tr ban u. 75 240

Lp trnh trc quan

10.5.2 Th tc ca cc hp Command :.........................................................75 10.5.3 Th tc ca cc hp Check Box : .......................................................76 10.6. Ghi v thc hin trng trnh :.....................................................................76 10.6.1 Lu tr : ..............................................................................................76 10.6.2 Xem m lnh : .....................................................................................77 BI 11. BIN NH .................................................................................................83 11.1. Khi nim : ......................................................................................................83 11.2. Khai bo bin : ................................................................................................83 11.2.1 Khai bo bng .....................................................................................83 11.2.2 Cch vit..............................................................................................84 11.2.3 Khai bo bin ton cc........................................................................85 11.2.4 Khai bo nhiu bin ............................................................................85 11.3. Khai bo hng : ...............................................................................................86 11.4. Khai bo mng :..............................................................................................86 11.4.1 Khai bo mng : ..................................................................................86 11.4.2 S dng mng : ...................................................................................87 11.5. Khai bo bng ghi :.........................................................................................88 11.5.1 Khai bo : ............................................................................................88 11.5.2 S dng bin bn ghi : ........................................................................88 11.6. Bin i (convert) t loi d liu ny qua loi d liu khc......................89 BI 12. CC CU TRC IU KHIN..................................................................90 12.1. Cu trc chn :................................................................................................90 12.1.1 Cu trc : IF .......................................................................................90 12.1.2 Cu trc : IF ... ELSE .....................................................................90 12.1.3 Cu trc : Select Case <Biu thc>.................................................91 12.2. Cu trc lp.....................................................................................................92 12.2.1 Cu trc : .............................................................................................92 12.2.2 Cu trc : .............................................................................................93 12.2.3 Cu trc : .............................................................................................93 12.3. Nhn :...............................................................................................................94 12.3.1 Nhn : ..................................................................................................95 12.3.2 S th t dng lnh :...........................................................................96 BI 13. METHOD....................................................................................................97 13.1. Circle Method..................................................................................................97 13.2. Line Method ....................................................................................................98 13.3. Cls Method.......................................................................................................99 13.4. Hide Method..................................................................................................100 13.5. Show Method.................................................................................................100 13.6. Item Method ..................................................................................................101 13.7. Move Method................................................................................................101 13.8. Point Method .................................................................................................102 13.9. Print Method .................................................................................................103 13.10. PrintForm Method .................................................................................103 13.11. PSet Method............................................................................................104 13.12. Refresh Method .......................................................................................105 241

Lp trnh trc quan

13.13. Scale Method ...........................................................................................105 13.14. SetFocus Method ....................................................................................107 13.15. Show Method ..........................................................................................107 13.16. TextHeight v TextWidth Methods.......................................................107 BI 14. HM.........................................................................................................109 14.1. Cc hm x l chui :...................................................................................109 14.1.1 Tm chiu di chui : LEN(String) ................................................109 14.1.2 Chuyn sang ch thng : ................................................................109 14.1.3 Chuyn sang ch in : ........................................................................109 14.1.4 Ly cc k t bn tri : .....................................................................109 14.1.5 Ly cc k t bn phi:.....................................................................110 14.1.6 Ly nhm k t bt k:.....................................................................110 14.1.7 B cc k t trng:............................................................................110 14.1.8 B cc k t trng bn tri: ..............................................................110 14.1.9 B cc k t trng bn phi:.............................................................110 14.1.10 i m s sang k t: .....................................................................111 14.1.11 i k t sang m s: .....................................................................111 14.1.12 i chui sang s: ..........................................................................111 14.1.13 i s sang chui: ..........................................................................111 14.1.14 nh dng chui:.............................................................................111 14.1.15 Tm chui con:................................................................................112 14.2. Cc hm x l s : ........................................................................................113 BI 15. DNG LIST CONTROLS ........................................................................115 15.1. Listbox ...........................................................................................................116 15.1.1 Hin th nhiu s la chn................................................................116 15.1.2 Save content ca Listbox ..................................................................117 15.1.3 Load mt Text file vo Listbox ........................................................119 15.2. Drag-Drop .....................................................................................................120 15.3. Dng Property Sorted ..................................................................................122 BI 16. T TO OBJECT....................................................................................127 BI 17. DEBUG ....................................................................................................136 17.1. c t chng trnh (Program Specifications)..........................................136 17.1.1 Cu trc cc b phn.........................................................................137 17.1.2 K thut lp trnh ..............................................................................137 17.1.3 Dng Subs v Functions ...................................................................137 17.2. Mt s lu ...................................................................................................138 17.2.1 ng s Error ...................................................................................138 17.2.2 Dng Comment (Ch thch) .............................................................139 17.2.3 t tn cc variables c ngha .......................................................139 17.2.4 Dng Option Explicit........................................................................139 17.2.5 Desk Check .......................................................................................140 17.2.6 Son mt Test Plan ...........................................................................140 17.3. Cc k thut x l li ...................................................................................140 17.3.1 X l Error lc Run time ..................................................................140 17.3.2 Dng Breakpoints .............................................................................141 242

Lp trnh trc quan

17.3.3 Dng Immediate Window.................................................................143 17.3.4 Theo du chn chng trnh (Tracing) .............................................143 17.3.5 Dng Watch Window........................................................................145 17.3.6 Dng phng php loi suy (Elimination Method) ..........................145 BI 18. DNG MENU ...........................................................................................147 18.1. Main Menu...............................................................................................147 18.2. Pop-up Menu ...........................................................................................151 18.3. Cha menu Settings trong Registry ......................................................153 BI 19. DNG DIALOGS .....................................................................................161 19.1. Message Boxes .........................................................................................161 19.2. Input Boxes....................................................................................................164 19.3. Common Dialogs .....................................................................................166 19.4. Open v Save File Dialogs ......................................................................167 19.5. Cc loi Dialog c sn dng ....................................................................171 19.5.1 Color Dialog......................................................................................171 19.5.2 Font Dialog ......................................................................................173 19.5.3 Print Dialog......................................................................................174 19.5.4 Help Dialog......................................................................................176 19.6. Custom Dialogs........................................................................................176 BI 20. DNG HA .......................................................................................180 20.1. Mu (color) v mn (resolution) .............................................................180 20.1.1 mn (resolution)..........................................................................180 20.1.2 Mu (color) ......................................................................................182 20.2. Function RGB..........................................................................................185 20.3. Color Mapping.........................................................................................187 20.4. Dng Intrinsic Color Constants.............................................................188 20.5. Graphic files.............................................................................................189 BI 21. C S D LIU (DATABASE)..............................................................190 21.1. Table, Record v Field ............................................................................190 21.2. Primary Key v Index.............................................................................191 21.3. Relationship v Foreign Key ..................................................................193 21.4. Relational Database.................................................................................195 21.5. Cc li ch.................................................................................................195 21.6. Integrity Rules (cc quy lut lim chnh)..............................................196 21.6.1 General Integrity Rules ....................................................................196 21.6.2 Database-Specific Integrity Rules ...................................................197 21.7. Microsoft Access Database Management System ................................197 21.8. Properties Required v Allow Zero Length..........................................197 21.9. Lm vic vi cc versions khc nhau ....................................................198 21.10. Dng Query vit SQL......................................................................199 21.11. Dng Link Table lm vic trc tip vi database loi khc...........200 21.12. Database Server v mt s khi nim.................................................200 BI 22. S DNG CONTROL DATA ..................................................................202 243

Lp trnh trc quan

22.1. Control Data ............................................................................................202 22.2. Ch nh v tr Database lc chy chng trnh...................................207 22.3. Thm bt cc Records..................................................................................207 22.4. Dng DataBound Combo .......................................................................210 BI 23. LP TRNH VI K THUT DAO ..........................................................213 23.1. Reference DAO........................................................................................213 23.2. Dng keyword SET.................................................................................214 23.3. Cc nt di chuyn....................................................................................216 23.4. Thm bt cc Records ............................................................................218 23.5. Tm mt bn ghi ......................................................................................221 23.6. Bookmark ................................................................................................224 23.7. LastModified ...........................................................................................224 BI 24. LP TRNH VI ADO .............................................................................226 24.1. Control Data ADO........................................................................................226 24.2. Data Form Wizard..................................................................................231

244

You might also like