Professional Documents
Culture Documents
iii
iv
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
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.
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.
2.3.
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.
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
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#
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 :
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 :
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.
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.
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
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
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
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
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.
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
4.3.
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
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.
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
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.
17
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
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 :
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
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
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
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
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
Table : xem danh sch tn cc Table to trc . Query : xem danh sch cc Query c. 23
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
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
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
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 :
27
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.
5.3.
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.
28
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
29
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
ln mn hnh.
Cu 2 : to Query thng k s lng sinh vin theo tng lp, mi lp th cho bit s
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.
31
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
32
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
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
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
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
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
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 :
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
6.3.
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.
Nu mun xem hoc in Report ta chn trn thanh thc n : File Print ( in) hoc Print Preview ( xem)
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
Tng t ta thc hin cc Report khc nh bng im, danh sch thi li, thng k...
41
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
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 :
S dng Form Wizard : Bc 1: chn Form Wizard trn hp thoi v tn Table hoc Query cha d liu.
43
44
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
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 :
- 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.
-
Chn tn ca Form cn hiu chnh, chn Design Sa i ging nh trong phn t thit k.
7.4.
-
47
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
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 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
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
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
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
8.1.
MACRO
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
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.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
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
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
57
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
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
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
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
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
9.2.
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.
9.3.1 Ci t : a. Yu cu v thit b:
63
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
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
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
66
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
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
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
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
- 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
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
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
10.4.
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
10.5.
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
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
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.
-
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
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
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
weight size underline italic strikethrough EndProperty Height = Left = TabIndex = Top = Width = End
= = = = =
End Begin VB.CommandButton cmddel Caption = "Xa" BeginProperty Font name = "VNtimes new roman" charset = 1 weight = 400 size = 9.75 underline = 0 'False italic = 0 'False strikethrough = 0 'False EndProperty Height = 495 Left = 4920 TabIndex = 4 Top = 2520 Width = 1215 End Begin VB.CommandButton cmdpaste Caption = "Dn" BeginProperty Font name = "VNtimes new roman" charset = 1 weight = 400 size = 9.75 underline = 0 'False
79
= =
'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
= = = =
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
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
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
- 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
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
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
Cch vit :
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 :
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
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.
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
11.6.
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
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
END
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
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.
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
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
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.
12.2.3 Cu trc :
DO [WHILE | UNTIL <iu kin>] [Khi ch th] [Exit Do] [Khi ch th] LOOP [WHILE | UNTIL <iu kin>]
93
- 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.
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
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
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
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
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
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 :
99
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 :
13.5.
Show Method
[Object.]Show
C php :
100
13.6.
Item Method
[Object.]Item(Index)
C php :
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.
101
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.
102
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
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
104
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
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
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
107
108
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)
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
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
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:
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
# : 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:
112
- 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
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)
114
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
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
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
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
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
119
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
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
121
122
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
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
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
125
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
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
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
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
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
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
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
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
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
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
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
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.
136
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
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
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
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
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
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
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
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
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
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
147
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
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
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
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.
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
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
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
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
156
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
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
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
160
161
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
162
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
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.
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
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
165
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.
Microsoft Common Dialog Control 6.0 cho ta su dng Dialogs ty theo gi Method no:
166
167
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
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
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
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
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
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
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
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.
175
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.
176
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
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
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
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
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.
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
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
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
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
185
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
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:
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.
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
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.
189
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
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 .
191
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
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.
193
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
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.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
- 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
- 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.
197
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.
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
Access DBMS Menu Command Tools | Database Utilities | Compact and Repair Database... hay dng function DBEngine.CompactDatabase trong VB6.
21.10.
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
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.
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
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
202
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
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
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
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
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.
207
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
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
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
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.
210
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
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
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
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.
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 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
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
' 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
218
' 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
' 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
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
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
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
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
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
Private Sub CmdLastModified_Click() ' Reposition record to last position myRS.BookMark = myRS.LastModified ' Redisplay details or current record Displayrecord End Sub
225
226
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
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
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
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
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:
231
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
232
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
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
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
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
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
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
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
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
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
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
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
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