You are on page 1of 0

"Don't study, don't know - Studying you will know!

"

NGUYEN TRUNG HOA
GIO TRNH MN HC






LP TRNH TRC QUAN
Ti liu tham kho


iii




PHN I
MICROSOFT ACCESS

iv
Lp trnh trc quan

1
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.
Lp trnh trc quan

2
Trong xu hng pht trin mnh m hin nay ca Tin hc, s ngi s dng my tnh tng
ln rt nhanh v my tnh c s dng trong hu ht cc lnh vc ca i sng nn i hi
cc ngn ng lp trnh cng phi n gin, d s dng v mang tnh i chng cao. Chnh v
vy phng php lp trnh trc quan ra i. c im ca cc ngn ng lp trnh trc quan l
d s dng, trin khai cc ng dng mt cch nhanh chng.
Hin nay cc ngn ng lp trnh, h qun tr c s d liu theo hng trc quan thng
dng nh : Visual Basic, Visual Foxpro, Visual C, Delphi...
Trong chng trnh ny gii thiu mt s chng trnh lp trnh thng dng nh Access,
Basic v VB .Net lm quen vi phng php lp trnh trc quan trong vic trin khai mt
s cc ng dng.
c im ni bt ca phng php lp trnh trc quan l :
- Cho php xy dng chng trnh theo mt hng khc gi l event - driven programming
(lp trnh theo tnh hung), ngha l mt chng trnh ng dng c vit theo kiu ny
p ng da theo tnh hung xy ra lc thc hin chng trnh. Tnh hung ny bao gm
ngi s dng n mt phm tng ng, chn la mt nt lnh hoc gi mt lnh t mt
ng dng khc chy song song cng lc.
- Ngi lp trnh trc tip to ra cc khung giao din (interface), ng dng thng qua cc
thao tc trn mn hnh da vo cc i tng (ojbect) nh hp hi thoi hoc nt iu
khin (control button), nhng i tng ny mang cc thuc tnh (properties) ring bit
nh : mu sc, Font ch.. m ta ch cn chn la trn mt danh sch cho sn.
- Khi dng cc ngn ng lp trnh trc quan ta rt t khi phi t vit cc lnh, t chc
chng trnh... mt cch rc ri m ch cn khai bo vic g cn lm khi mt tnh hung
xut hin.
- My tnh s da vo phn thit k v khai bo ca lp trnh vin t ng to lp chng
trnh.
Nh vy vi lp trnh trc quan ngi lp trnh vin ging nh mt nh thit k, t chc
to ra cc biu mu, ngh cc cng vic cn thc hin v my tnh s da vo xy
dng chng trnh. Trong chng trnh ny ta s xt cch s dng h qun tr c s d liu
Microsoft Access v ngn ng lp trnh Visual Basic.
Lp trnh trc quan

3
BI 2. ACCESS
2.1. Gii thiu
Microsoft Access l mt phn mm qun l c s d liu rt mnh v c s dng rng
ri hin nay. N cho php ngi s dng qun l, bo tr v khai thc s liu c lu tr mt
cch c t chc trn my tnh.
Access nm trong b Microsoft Office ca cng ty Microsoft. Trong chng trnh ny
chng ti gii thiu trn phin bn Access 98, y l phin bn mi c nhiu ci tin so vi
cc phin bn trc y.
s dng c Access 98, my tnh phi tha mn cc yu cu c bn sau :
- CPU Pentium tr ln.
- B nh RAM 32 MB tr ln.
- H iu hnh Windows 95 tr i.
Trong phin bn ny chng ta c hng mt s cng c b sung so vi cc phin bn c
trc y nh : truy cp d liu Access t cc trang Web, qun l cc tp tin c cha cc lin
kt n nhng tp tin khc, h tr a ng, qun l d dng cc i tng ha, s dng cc
Macro h tr cho t ng ha vic qun l d liu...
2.2. Khi ng ACCESS
Sau khi ci t Microsoft Office (chn component Access), mi ln lm vic vi Access
chng ta khi ng :
- Bt my tnh
- Chn Start --> Program --> Microsoft Access
Hoc nhn p chut ti biu tng ca Access trn Desktop.
Lp trnh trc quan

4
Lc s xut hin lm vic ca ACCESS nh sau :
-
2.3. Khi nim v c s d liu trong Access
C s d liu l mt tp hp cc d liu lin quan n mt ch hay mt mc ch qun
l no . Cc thnh phn ca c s d liu Access bao gm :
- TABLE (bng) : l thnh phn c bn ca c s d liu, n cho php lu tr d liu phc
v cng tc qun l. Trong mt Table, s liu c t chc thnh cc trng (Field) v cc
bn ghi (Record).
- QUERY (vn tin) : l cng c truy vn thng tin v thc hin cc thao tc trn d liu.
Query cho php lin kt cc d liu t nhiu Table khc nhau, chn la cc thng tin cn
quan tm, n l nn tng xy dng cc bo co theo yu cu thc t.
- FORM (mu) : cho php xy dng cc mu nhp s liu ging nh trong thc t. Ta c th
cng lc nhp s liu vo nhiu Table khc nhau thng qua SubForm.
- REPORT (bo co) : l cc bo co s liu thng bo kt qu cho ngi s dng. Trong
Report ta c th kt hp vi Query to cc bo co theo nhng yu cu khc nhau trong
thc t. Trn Report bao gm s liu, hnh nh, th... m t cho s liu.

To c s d liu mi
To c s d liu mi theo
mu c sn.
M c s d liu c
Lp trnh trc quan

5
- MACRO (lnh ngm) : l mt tp hp cc lnh nhm t ng thc hin cc thao tc
thng gp. Khi gi Macro, Access s t ng thc hin mt dy cc lnh tng ng, n
c xem l mt c lp trnh n gin, cho php ngi s dng chn la cng vic ty
theo tnh hung hin ti.
- MODULE (n th) : mt dng t ng ha chuyn su hn Macro, l nhng hm
ring ca ngi s dng c vit bng ngn ng VBA. Ta ch nn s dng Module trong
trng hp cc Macro khng p ng c yu cu .
2.4. Cc php ton
2.4.1 Cc php ton Logic
- Not : cho kt qu ngc li
- And : cho kt qu ng ch khi c hai u ng.
- Or : cho kt qu sai ch khi c hai u sai.
- Xor : cho kt qu ng khi hai iu kin c gi tr tri nhau.
- Epv : cho kt qu ng ch khi hai iu kin c cng gi tr.
2.4.2 Cc php ton s hc
- ^ : ly tha.
- * : nhn.
- / : chia
- \ : chia ly phn nguyn.
- Mod : chia ly phn d
- + : cng
- - : tr
Lp trnh trc quan

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

7
BI 3. LM VIC VI C S D LIU
3.1. TO C S D LIU
3.1.1 To c s d liu bng WIZARD
Cho php to c s d liu theo s hng dn ca ACCESS thng qua cc mu c sn.
Thng thng cc c s d liu ny khng ph hp vi cch t chc c s d liu thng
dng nn nu to c s d liu theo kiu ny i hi phi sa i nhiu. Khng nn to c s
d liu theo kiu ny.
- Bc 1 : ngay sau khi khi ng ACEESS ta chn vo nt Database Wizard v OK.
- Bc 2 : lc trn mn hnh xut hin ca s sau :
Lc ny ta chn mt mu c s d liu trn bng cch Double Click chut ti biu tng
tng ng ri chn OK.
- Bc 3 : lc trn mn hnh xut hin ca s sau :


Lp trnh trc quan

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

Lp trnh trc quan

9
Thng thng ta phi s dng mc ny to mt c s d liu cho mnh. ACCESS s to
ra mt c s d liu trng v ta t nh ngha cho mnh cc Table, Query, Report, Form,
Macro v Module ring.
- Bc 1 : khi khi ng chn Blank Database hoc chn File - New Database
- Bc 2 : khai bo tn ca a, th mc, tp tin cn to. Chn Create
Lc ta nhn c c s d liu mi, xut hin mn hnh :
3.2. Hiu chnh c s d liu
Sau khi to c s d liu ta c th lm vic vi c s d liu trn thng qua Table,
Report, Form, Record, Query v Module qua ca s trn.
Ta s xt cch thao tc ln tng thnh phn mt ca c s d liu trong cc bi k tip.
Lp trnh trc quan

10
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.
Lp trnh trc quan

11
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.
Lp trnh trc quan

12
- 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.
Lp trnh trc quan

13
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 ngha
Text Cha tp hp cc k t ty , di ti a 255 k t
Memo Di ti a 65535 k t
Number Cha gi tr s
Lp trnh trc quan

14
Date/Time Gi tr ngy hoc gi
Currency Tin t, c n v tnh
Auto Number Gi tr s nhng khng thay i c dng th hin
Yes/No Gi tr True hoc False
Hyperlink Ni dung l vn bn hay kt hp gia vn bn v s c s dng nh
mt a ch hyperlink (siu lin kt)
Lookup Wizard 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 ngha
Field Size rng ti a cha sn
Format Cch hin th gi tr
Input Mask Qui nh mu nhp liu
Caption Mt ch thch khc cho Field, dng vi Form, Report
Default Value Gi tr cho trc
Validation Rule Qui nh cch kim tra s liu nhp
Validation Text Thng bo khi nhp s liu sai
Required Chn Yes nu bt buc phi nhp ni dung
Allow Zero Length Chn Yes nu chp nhn gi tr rng
Indexed C ch mc hay khng, nu c th c trng hay khng (No, Yes
Duplicate OK, Yes No Duplicate)
4.2. Nhp s liu vo Table
Sau khi to xong Table ta c th nhp s liu vo bt k lc no bng cch :
- Double Click vo tn Table cn nhp.
- vt sng tn Table cn nhp ri chn Open
Ch : trong qu trnh nhp ta c th iu chnh rng cc ct cho thch hp bng cch
a du chut v cnh bn phi ca tiu ct cho xut hin du ri Drag chut iu
chnh. Khi ng ta lu Layout bng cch tr li Yes
Lp trnh trc quan

15
4.3. Hiu chnh Table
Ta c th hiu chnh Table : thay i cu trc bn ghi, sa i ni dung bn ghi hoc
cch trnh by.
4.3.1 Thay i cu trc bn ghi
- Chn tn ca Table cn hiu chnh.
- Chn Design
- Hiu chnh li qua bng :
Ta c th thay i cc thng tin lin quan n cc trng trong Table t tn trng, kiu,
cc thuc tnh, thm bt cc trng...
4.3.2 Thay i ni dung bn ghi
- Chn tn ca Table cn hiu chnh.
- Chn Open hoc Double Click ti .
- Hiu chnh s liu ging nh trong Excel.
Lp trnh trc quan

16
4.3.3 Thay i cch trnh by
- Chn tn ca Table cn hiu chnh.
- Chn Open hoc Double Click ti .
- Chn Format nh dng, sau :
Font : thay i kiu ch.
Cells : thay i cch th hin nh : Gridlines Shown (che hay hin ng li),
Cell Effect (trnh by s liu phng, nh ln hoc lm xung), Gridline Color
(mu sc ca nt gch), Background Color (mu nn ca ).
Column Width : qui nh rng ct.
Hide Column : che bt ct. Nu mun hin li chn Unhide Column.
4.4. Khai thc s liu trn Table
Cho php khai thc s liu mt cch tc thi khi ang lm vic trc tip trn Table. Nu
mun t ng ha cng tc khai thc thng tin v c cc bo co p mt th ta phi dng
Report, Query, Macro hoc lp trnh bng Visual Basic.
4.4.1 Tm v thay th
Cho php tm v thay th ni dung trn mt trng no trong Table.
- a con tr v trng cn tm v thay th.
- Chn Edit - Replace
4.4.2 Thay i v tr trng
- Chn ct cn thay i v tr (a du chut ln tiu trng).
- Drag chut a trng v v tr mi.
4.4.3 Sp xp
- Chn trng lm kha sp xp.
Lp trnh trc quan

17
- Chn trn thanh thc n Record - Sort (hoc chn biu tng)
- Chn sp tng dn (Sort Ascending) hoc gim dn (Descending).
4.4.4 Lc bn ghi
- Chn trn thanh thc n Record - Filter (hoc chn biu tng)
- Chn Filter by Form
Qui nh cch lc :
- Mun lc theo trng no ta ch vic bm cht vo trng v chn gi tr lm iu kin
lc.
- Bm phm phi ca chut chn Apply Filter. Lc ny ch cn cc bn ghi tha mn iu
kin.
- Nu mun hy lc th bm phm phi ca chut chn Remove Filter. Lc ny hin tt c
cc bn ghi nh ban u.
Ch : trong qu trnh lc ta c th dng cc iu kin vi cc php ton so snh v quan
h.

Lp trnh trc quan

18
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 Text 6
Holot Text 27
Ten Text 6
Ngaysinh Date/Time Sort Date
Gioitinh Yes/No True/False
Ghichu Memo
Lp trnh trc quan

19
- Bc 3: ng ca s khai bo cu trc Table (bm chut vo du X gc trn bn phi) v
chn Yes ghi li cu trc.
- Bc 4 : g vo tn ca Table l Ho So v chn OK trn ca s sau :
- Bc 5 : qui nh c nh ngha kha chnh hay khng qua mn hnh sau :
Chn No (khng nh ngha kha).
Lc ny ta c mt Table va c nh ngha xong.
Cu 2 : Nhp s liu vo Table :
- a con tr v tn Table.
- Chn Open.
- Nhp s liu qua mn hnh nh sau.
Ch : trong qu trnh nhp s liu ta thng dng cc thao tc sau :
- iu chnh rng ct : a chut v cnh phi tiu ct ri Drag chut.
Lp trnh trc quan

20
- 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 .
Lp trnh trc quan

21
- Chn Format - Cells.
- Qui nh cch th hin.
Bi tp : tng t to cc Table lu tr danh mc lp, lu tr hc ph, hc bng v thc
hin cc thao tc ln bn ghi.
Lp trnh trc quan

22
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.
Lp trnh trc quan

23
- Find Unmatched Query : tm nhng bn ghi m gi tr ca n khng trng vi gi tr ca
bt c mt bn ghi no trn mt Table khc.
- Union Query : ni cc bn ghi ca hai hay nhiu Table thnh mt danh sch chung.
- Pass-Through Query : Query chuyn giao, dng gi lnh trc tip n h ngn ng SQL
(Structured Query Language) ca ACCESS.
- Data Definition Query : s dng cc lnh ca ngn ng SQL to hoc sa i cu trc
ca mt Table trong Database.
5.2. Cch to QUERY
Mun to Query ta thc hin qua cc bc sau :
- Bc 1: trong hp Database ta chn nt Query , chn New
- Bc 2: chn kiu to Query qua ca s sau
- Bc 3: chn Table phc v cho vic xy dng Query qua ca s sau :
Table : xem danh sch tn cc Table to trc .
Query : xem danh sch cc Query c.
Lp trnh trc quan

24
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.
Lp trnh trc quan

25
- 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
Lp trnh trc quan

26
- 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 :
Lp trnh trc quan

27
Trong Available Field ta chn tn trng lm tiu dng. S trng ti a c
chn l 3.
Select Filed : cha tn cc trng c chn.
- Chn Next xut hin mn hnh k tip :
- Chn tn trng s dng lm tiu ct.
Lp trnh trc quan

28
- Chn Next sang bc k tip.
- Chn gi tr s cn tnh ti mi giao im dng v ct.
- Chn Next chuyn sang bc k tip.
- G vo tn ca Query cn to.
- Chn Finish hon tt to Query.
- Ch : tng t to cc Query cn li.
5.3. Hiu chnh QUERY
Nu mun hiu chnh li Query th ta a con tr v tn ca Query v chn Design thc
hin thit k li.
Nu mun xem lnh to Query th trong qu trnh Design ta bm nt phi ca chut ri
chn SQL View.
5.4. Thc hin QUERY
a con tr v tn ca Query v chn Open ( hoc Double Click chut ti ).
Lp trnh trc quan

29
BI THC HNH
Cu 1 : to Query xem danh sch ca mt lp bt k no nhp t bn phm.
Bc 1: bm chut vo nt Query, chn New.
Bc 2 : chn Simple Query Wizard, sau chn OK t bng sau :
Bc 4 : chn tn cc trng cn a vo danh sch l: sothe, holot, ten, ngaysinh, malop.
Sau chn Next
Bc 5 : qui nh tn ca Query l DANH SACH LOP, chn Finish hon tt.
Lp trnh trc quan

30
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:
Lp trnh trc quan

31
Ta nhp vo m lp cn xem, chon OK. Lc ny danh sch ca lp c ch nh s hin
ln mn hnh.
Cu 2 : to Query thng k s lng sinh vin theo tng lp, mi lp th cho bit s
lng nam, n.
Bc 1 : bm chut vo nt Query, sau chn New
Bc 2 :Chn Crosstab Query Wizard
Double Click chut ti nt OK
Bc 3: chn tn ca Table l Ho So, sau chn Next chuyn sang bc k tip.
Bc 4: chn tn trng lm tiu dng l MALOP, chn Next
Lp trnh trc quan

32
Bc 5: chn tn trng lm tiu ct l GIOITINH, sau chn Next.Ta lu tn
trng lm tiu dng v ct l tn ca trng s c thng k theo mt kiu tnh no .
Trong trng hp ny ta m s lng sinh vin theo tng lp v trong mi lp m s lng
n v nam l bao nhiu.
Bc 6 :qui nh cng thc tnh. Trong trng hp ny ta chn hm COUNT theo s th.
Sau chn Next
Bc 7 :qui nh tn ca Query cn lu tr trn a l THONG KE SO LUONG. Sau
chn Finish.
Lp trnh trc quan

33
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.
Lp trnh trc quan

34
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 :
Lp trnh trc quan

35
- 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.
Lp trnh trc quan

36
- 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.
Lp trnh trc quan

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


Lp trnh trc quan

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

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

Ngoi ra cn c nhiu cng c khc.
6.3. Hiu chnh Report
Sau khi thit k v lu tr Report, nu mun hiu chnh li Report th:
- Trong hp Database a con tr n tn Report cn hiu chnh.
- Chn Design.
- Hiu chnh ging nh trong Design View.
6.4. Thc hin Report
Nu mun xem hoc in Report ta chn trn thanh thc n :
- File Print ( in) hoc Print Preview ( xem)
Hoc bm vo cc biu tng tng ng trn thanh cng c
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
Lp trnh trc quan

40
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.
Lp trnh trc quan

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

Lp trnh trc quan

42
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.
Lp trnh trc quan

43
- Chn loi Form v phng php to Form. Trong trng hp ny ta chn AutoForm v
km theo loi Form (Columnar : dng ct, Tabular : dng bng v Datasheet : dng bng
tnh).
Bc 3: Form s c t ng to ra trn c s cc trng ca Table hoc Query. V d :
chn Table l DIEM v loi Form l Columnar ta s nhn c kt qu l Form sau :
Bc 4: ng Form bng cch bm vo nt c du X v ghi tn ca Form lu tr ln a
qua ca s sau :
S dng Form Wizard :
Bc 1: chn Form Wizard trn hp thoi v tn Table hoc Query cha d liu.
Lp trnh trc quan

44
Bc 2: qui nh tn cc trng cn a vo Form ri chn Next qua ca s sau :
Bc 3: qui nh loi Form theo cc mu cho sn ri chn Next qua ca s :
Bc 4: qui nh cch thc trnh by Form ri chn Next qua ca s:
Lp trnh trc quan

45
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.
Lp trnh trc quan

46
- TextBox: ni dung biu thc hoc trng.
- Option Group: nhm chn vic.
- Toggle Button: to nt bt tt.
- Option Button: to nt chn mt trong nhiu gi tr.
- CheckBox: hp nh du chn nhiu gi tr cng lc.
- ComboBox: hp chn cp.
- ListBox: hp xem, chn trong mt danh sch.
- Command Button: to nt lnh.
- Image: tranh nh.
- Unbound Object Frame: to mt khung hnh c nh.
- Bound Object Frame: to khung hnh khng c nh.
- Page Break: to du phn trang.
- Tab Control: to Tab iu khin chn trang.
- SubForm: to Form con.
- Line: v ng thng.
- Rectangle: v hnh ch nht.
- More Control: chn s dng cc nt iu khin t nhiu chng trnh khc.
Mun a mt cng c vo trong Form ta c th t thit k nt hoc s dung Control
Wizard ca ACCESS :
a. Nu dng Control Wizard :
- Bm nt Control Wizard (cho n c mu sng).
- Bm vo cng c cn chn a vo Form.
Lp trnh trc quan

47
- Drag chut vo trong Form ti khu vc cn t cng c .
- Khai bo cc thng tin cn thit theo ch dn ca ACCESS.
b. T thit k :
- Bm chut vo cng c cn chn a vo Form.
- Drag chut vo trong Form ti khu vc cn t cng c .
- Khai bo cc thng tin cn thit. Nu mun sa i cc thuc tnh th bm p chut ti
cng c va to khai bo li.
7.3. Hiu chnh Form
- Chn tn ca Form cn hiu chnh, chn Design
- Sa i ging nh trong phn t thit k.
7.4. Thc hin Form
- Chn tn ca Form.
- Chn Open
Lp trnh trc quan

48
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
Lp trnh trc quan

49

Bc 5: chn mu sc v cch th hin d liu trn Form. Ta chn Flax sau bm vo Next
chuyn sang bc k tip.
Bc 6: qui nh tn ca Form lu tr ln a. Chn Finish hon tt.
Bc 7: lc ny ACCESS t ng to ra Form ta nhp v xem s liu. Mn hnh xem v
nhp nh sau :
Bc 8: ng ca s nhp v chn Design thit k li Form cho n p v d s dng
hn.
Lp trnh trc quan

50

- 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
Lp trnh trc quan

51
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 .
Lp trnh trc quan

52
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...
Lp trnh trc quan

53
BI 8. MACRO V H THNG THC N
8.1. MACRO
8.1.1 1. Khi nim :
Macro l mt hay mt tp hp cc hnh ng (Action) lin tip c nh ngha v lu tr
vi mt tn xc nh. Macro cho php t ng ha cc cng vic cn thc hin.
C ba loi Macro chnh l :
- Macro kt hp nhiu hnh ng : l Macro c kt hp bi nhiu hnh ng lin tip
nhau. Khi tn Macro c gi cc hnh ng ny s ln lt c t ng thc hin.
- Macro Group : l mt tp hp cc Macro c cc tnh nng ging nhau. N cho php qun
l c s d liu d dng hn. thi hnh mt Macro trong Macro Group ta ch tn ca n
nh sau : Tn Macro Group.Tn Macro thc hin.
- Macro theo iu kin : l Macro m cc hnh ng ch c thi hnh khi tha mn iu
kin no . iu kin l mt biu thc c ch nh trong Condition.
8.1.2 Cch to Macro
- Bc 1: trong ca s Database chn nt Macro, tip n chn New
- Bc 2 :xut hin ca s khai bo Macro nh sau :
Lp trnh trc quan

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

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

56

- 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 :
Lp trnh trc quan

57
8.2.2 S dng thc n
Khi no mun dng thc n chn vin ta ch vic m Form c gn vi thanh thc n
c to.
Lp trnh trc quan

58
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 Xem bo co Kt thc
H s Danh sch lp
T chc 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 Menu Name Menu Macro Name
AddMenu Nhap so lieu Nhap
AddMenu Xem bao cao Baocao
AddMenu
Ket thuc Ketthuc
Lp trnh trc quan

59

- ng ca s v ghi tn Macro l QUAN LY SINH VIEN
Bc 2: to cc Macro ng.
- To Macro nhap :
Chn Macro, New
chn View, Macro Name c mn hnh khai bo sau :
Ta khai cc mc nh sau :
Macro Name Action Form Name View
Ho s OpenForm Nhap ho so Form
Danh muc lop OpenForm Nhap lop Form
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 :
Lp trnh trc quan

60
Chn Macro, New
Chn View, Macro Name c mn hnh khai bo sau :
Macro Name Action Form Name View
Danh sach lop OpenReport Danh sach lop Print Preview
Thong ke so luong OpenQuery Thong ke so luong 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.








PHN II
VISUAL BASIC


Lp trnh trc quan

61
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).
Lp trnh trc quan

62
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.
Lp trnh trc quan

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

64
- 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 .
- Chn File Run, sau g D:\SETUP hoc E:\SETUP (thng thng my s t khi
ng phn Setup)
9.3.2 Khi ng
Nu trn my tnh ang s dng c ci t chng trnh Visual Basic th ta tin hnh khi
ng nh sau :
- Khi ng WINDOWS
- Double Click ti biu tng ca Visual Basic.
9.3.3 Mn hnh lm vic
Sau khi khi ng s xut hin mn hnh lm vic ca Visual Basic vi cc ca s chnh
nh sau :
Menu Bar Tools Bar Tools Box Form Project Properties
a. Menu Bar (thanh thc n): ghi cc chc nng lnh ca Visual Basic ngi s dng
c th chn thc hin. Mun chn mt chc nng trn ta c th thc hin :
- Cch 1 : Click chut ti tn chc nng cn thc hin.
- Cch 2 : Alt + <Ch ci u>
Lp trnh trc quan

65
- Cch 3 : F10, chn v g Enter ti chc nng .
b. Tools Bar (thanh cc cng c): cha cc biu tng v mi biu tng s tng ng
vi mt lnh c thc hin. y l nhng lnh thng c s dng trong Visual Basic.
Mun chn mt lnh no ta ch cn Double Click ti biu tng tng ng.
c. Tools Box (hp cng c): cha cc biu tng v mi biu tng tng ng vi mt
hp iu khin (Control Box). N cho php chn hp iu khin a vo biu mu trong
qu trnh thit k. Mun a mt hp iu khin vo biu mu ta thc hin qua cc bc sau :
- Click chut ti biu tng tng ng.
- Drag chut ti khu vc cn t hp iu khin trn Form.
- Khai bo cc thuc tnh v th tc tng ng.
d. Form Window (ca s biu mu): l ca s dnh thit k chng trnh. Trn ny ta
s t cc hp iu khin xem, nhp s liu hoc cc nt chn th tc cn thc hin.
e. Project Window (ca s d n) : l ca s lit k tn cc tp tin, biu mu v cc n
th chng trnh thuc ng dng hin hnh. Ta c th xem mt biu mu hoc b m lnh
chng trnh nu Double Click ti tn tng ng.
f. Properties (ca s thuc tnh): l ca s cho xem cc thuc tnh gn lin vi mt i
tng.
9.3.4 Kt thc
Cho php ngng lm vic vi Visual Basic v quay v li mi trng WINDOWS.
- Chn File.
- Chn Exit.
Lp trnh trc quan

66
BI 10. LP TRNH TRONG VISUAL BASIC
Khi lp trnh trong Visual Basic, mi ng dng u thng bt u bng biu mu (Form),
y l ni hin th tt c cc thng tin lin quan n ng dng.
Khi thit k chng trnh ta thng qua cc bc :
- Gn cc hp iu khin vo biu mu.
- Thay i thuc tnh ca hp iu khin.
- Vit th tc tnh hung cho hp iu khin .
- Trong phn ny ta s gii thiu tng qut v cc bc trn.
Lp trnh trc quan

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








ngha cc nt iu khin nh sau :
Tn gi ngha
Pointer Di chuyn im t
Label Box Ghi ni dung dng vn bn. Ni dung c nh.
Frame To khung hnh ch nht cha nhiu hp iu khin
Check Box Dng chn gi tr True hoc False, nhiu hn mt mc
List Box Lit k cc gi tr chn la
Horizontal Scroll Thanh cun ngang thay i phn mn hnh cn xem
Timer Dng by tnh hung theo thi gian. Kim tra qu hn
Directory List Lit k tn cc th mc
Shape Control Cung cp cng c v hnh.
Image Control Hin th hnh nh trong tp tin Bitmap
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
Lp trnh trc quan

68
Picture Box Hin th hnh nh ha bt k. Dung lng ln hn
Image
Text Box Gi ni dung vn bn. C th sa i.
Command Button Nt lnh chn thc hin mt lnh no
Radio Button i. Cho php chn mt trong nhiu gi tr.
Combo Box hn hp, phi hp hp vn bn v lit k
Vertical Scroll Thanh cun ng
Drive List Lit k tn cc a trn my
File List Lit k tn tp tin
Line Cho php v ng thng
Database Box 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.
Lp trnh trc quan

69
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 :
Lp trnh trc quan

70
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.
Lp trnh trc quan

71
- 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
Lp trnh trc quan

72
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
Lp trnh trc quan

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

Lp trnh trc quan

74
10.4. Thay i thuc tnh :
10.4.1 Hp Text :
- Click chut vo hp Text1, g phm F4.
- i cc thuc tnh :
MultiLine : True.
ScrollBar : Both.
Name : txt
10.4.2 Cc hp Command Button :
- Ln lt Click chut vo cc hp Command1, Command2, Command3 v Command4
v nhn phm F4.
- Sau , mi ln ta thay i :
Caption : Ct, Sao chp, Dn v Xa (i tn tng ng).
Name : cmdcut, cmdcopy, cmdpaste v cmddele
10.4.3 Cc hp Check Box :
- Ln lt Click chut vo cc hp Check 1, Check 2, Check 3 v nhn phm F4.
- Sau , mi ln ta thay i :
Caption : In m, In nging v Gch chn (i tn tng ng).
Name : chkbold, chkitalic, chkunder.
10.4.4 i Font :
- Gi phm Control ng thi chick chut ti tt c cc i tng to nhm i tng.
- G phm F4 gi ca s Properties.
- i Font sang tn l Vntimes New Roman, Size 10.
Lp trnh trc quan

75
10.5. Vit cc th tc tnh hung :
10.5.1 Th tc ca Form : y l th tc cha cc ch th khi to gi tr ban u.
- Bm Double Click chut vo nn ca Form.
- G vo ni dung chng trnh nh sau :
Private Sub Form_Load()
txt = "" 'Khi to bin trng
txt.FontBold = False 'Khng m
txt.FontItalic = False
txt.FontUnderline = False
chkbold.Value = 0 'Cha chn in m
chkitalic.Value = 0
chkunder.Value = 0
End Sub
- Sau vo hp Ojbect chn tip General g vo ch th khai bo bin nh ClipText :
Private Sub Text1_Change()
Dim ClipText As String 'Khi to bin chui tn l ClipText
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
Lp trnh trc quan

76
End Sub
Private Sub cmddel_Click()
txt.Text = ""
txt.SetFocus
End Sub
10.5.3 Th tc ca cc hp Check Box :
- Ln lt Double Click chut ti cc hp In m, In nging, Gch chn v g vo cc th
tc sau :
Private Sub chkbold_Click()
txt.FontBold = Not (txt.FontBold) 'Ngc li vi gi tr c
txt.SetFocus
End Sub
Private Sub chkitalic_Click()
txt.FontItalic = Not (txt.FontItalic)
txt.SetFocus
End Sub
Private Sub chkunder_Click()
txt.FontUnderline = Not (txt.FontUnderline)
txt.SetFocus
End Sub
10.6. Ghi v thc hin trng trnh :
- Chn File - Save lu tr biu mu vo a vi tn l VANBAN
- Chn Run - Start bt u thc hin chng trnh.
Ch : nu mun lu tr v xem ni dung chng trnh di dng vn bn th ta thc hin
nh sau :
10.6.1 Lu tr :
- Chn File.
- Chn File Save As
- Chn kiu tp tin l TEXT, t tn l Vanban.TXT.
Lp trnh trc quan

77
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
Lp trnh trc quan

78
Caption = "Gch chn"
BeginProperty Font
name = "VNtimes new roman"
charset = 1
weight = 400
size = 9.75
underline = 0 'False
italic = 0 'False
strikethrough = 0 'False
EndProperty
Height = 375
Left = 240
TabIndex = 8
Top = 1560
Width = 1215
End
Begin VB.CheckBox chkitalic
Caption = "In nging"
BeginProperty Font
name = "VNtimes new roman"
charset = 1
weight = 400
size = 9.75
underline = 0 'False
italic = 0 'False
strikethrough = 0 'False
EndProperty
Height = 375
Left = 240
TabIndex = 7
Top = 960
Width = 1215
End
Begin VB.CheckBox chkbold
Caption = "In m"
BeginProperty Font
name = "VNtimes new roman"
charset = 1
Lp trnh trc quan

79
weight = 400
size = 9.75
underline = 0 'False
italic = 0 'False
strikethrough = 0 'False
EndProperty
Height = 375
Left = 240
TabIndex = 6
Top = 360
Width = 1215
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
Lp trnh trc quan

80
italic = 0 'False
strikethrough = 0 'False
EndProperty
Height = 495
Left = 3480
TabIndex = 3
Top = 2520
Width = 1215
End
Begin VB.CommandButton cmdcopy
Caption = "Sao chp"
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
Lp trnh trc quan

81
Left = 360
TabIndex = 1
Top = 2520
Width = 1095
End
Begin VB.TextBox txt
BeginProperty Font
name = "VNtimes new roman"
charset = 1
weight = 400
size = 9.75
underline = 0 'False
italic = 0 'False
strikethrough = 0 'False
EndProperty
Height = 2055
Left = 360
MultiLine = -1 'True
ScrollBars = 3 'Both
TabIndex = 0
Text = "THU1.frx":0000
Top = 120
Width = 3735
End
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

Lp trnh trc quan

82
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
Lp trnh trc quan

83
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.
Lp trnh trc quan

84
- 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 :
Lp trnh trc quan

85
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
Lp trnh trc quan

86
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 :
Lp trnh trc quan

87
- Cch vit : DIM <Tn mng>(phn t) AS <Kiu d liu>
Hoc DIM <Tn mng><Hu t kiu>(phn t)
- Tn mng do ngi s dng t qui nh. Ging nh cch khai bo tn bin.
- Phn t : khai bo s lng cc phn t trong mng. C nhiu cch :
S lng ti a. Trong trng hp ny phn t bt u l khng.
V d : DIM a(10) AS Integer hoc DIM a%(10)
Lc ny s c cc phn t l a(0), a(1), .... a(10) v mi phn t cha mt s nguyn.
Phn t bt u n phn t cui. Qui nh r cc cc phn t u n cui.
V d : DIM A(5 TO 10) AS Single hoc DIM A!(5 TO 10)
Lc ny c cc phn t l a(5), a(6), ..., a(10) v mi phn t l s thc chnh xc n..
Mng nhiu chiu. Gia cc chiu ngn cch bi du , (phy).
V d : DIM a(10,20) AS Integer hoc DIM a%(10,20)
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.
Lp trnh trc quan

88
DIM thang(1 TO 12) AS Integer
FOR I = 1 TO 12
Thang(I) = I
NEXT I
FOR I = 1 TO 12
Print "Thang :" + Str(thang(I))
NEXT I
11.5. Khai bo bng ghi :
Bn ghi l kiu d liu c bit bao gm nhiu gi tr thuc nhiu kiu d liu khc nhau.
Bin bn ghi c s dng nhiu gii quyt cc bi ton trong qun l s liu.
11.5.1 Khai bo :
Khai bo bn ghi bt buc phi c t phn on Declaration ca n th chng trnh
m khng th t cp biu mu hoc th tc. Bin bn ghi ng nhin phi l bin ton
cc.
Cch khai bo :
TYPE <Tn bn ghi>
<Tn trng 1> AS <Tn kiu d liu 1>
<Tn trng 2> AS <Tn kiu d liu 2>
..........................
<Tn trng n> AS <Tn kiu d liu n>
END TYPE
DIM <Tn bin> AS <Tn bn ghi>
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>
Lp trnh trc quan

89
11.6. Bin i (convert) t loi d liu ny qua loi d liu khc
Nhiu lc ta cn phi convert data type ca mt variable t loi ny qua loi khc, VB6 cho
ta mt s cc Functions di y. Xin lu rng khi gi cc Functions ny, nu chng ta a
mt data value bt hp l th c th b li.
Function Ch thch
CBool () i parameter ra True hay False. Nu Integer khc 0 th c i thnh True
CByte () i parameter ra mt con s t 0 n 255 nu c th c, nu khng th l 0.
CDate () i parameter ra Date
CDbl () i parameter ra Double precision floating point number
CInt () i parameter ra Integer
CSng () i parameter ra Single precision floating point number
CStr () 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
Lp trnh trc quan

90
BI 12. CC CU TRC IU KHIN
Tng t nh cc ngn ng lp trnh khc trong Visual Basic ta c th s dng cc cu trc
iu khin trong chng trnh c th chn la cng vic thc hin hoc t ng lp li
nhm ch th nhiu ln.
12.1. Cu trc chn :
12.1.1 Cu trc : IF <iu kin> THEN <Ch th>
Khi gp cu trc ny nu iu kin c gi tr True th thc hin ch th nu iu kin c gi
tr False th b qua ch th .
V d :
IF dtb > 5 THEN Print "Bn im"
Trong trng hp ny ch c duy nht mt ch th.
12.1.2 Cu trc : IF <iu kin> THEN <Ch th 1> ELSE <Ch th 2>
Khi gp cu trc ny nu iu kin c gi tr True th thc hin ch th 1 nu iu kin c
gi tr False th thc hin ch th 2.
V d :
IF dtb > 5 THEN Print "Bn im" ELSE Print "Bn thiu im"
Ch :
- Nu mun sau THEN hoc ELSE c nhiu ch th cn thc hin th phi vit xung
dng v cui cu trc ny phi c END IF.
Cch vit :
IF <iu kin> THEN
<Ch th 1>
....................
<Ch th n>
Lp trnh trc quan

91
ELSE
<Ch th 1'>
....................
<Ch th n'>
END IF
12.1.3 Cu trc : Select Case <Biu thc>
Case <Lit k biu thc 1>
<Khi ch th 1>
Case <Lit k biu thc 2>
<Khi ch th 2>
.........
[Case Else
<Khi ch th n>]
End Select
Trong :
- Biu thc : l mt thc chui hoc s. Nu gi tr ca biu thc y trng vi gi tr
ca cc biu thc c lit k no bn di th khi ch th tng ng c thc hin.
- Lit k biu thc I : l biu thc s c em so snh vi biu thc u. Trong phn ny
biu thc lit k c th c vit di cc dng sau :
Biu thc : s hoc ch.
Biu thc 1 TO Biu thc 2 : ch ra on gi tr nm gia biu thc 1 v 2.
IS <php so snh> <biu thc> : ch ra php so snh v gi tr so snh.
- Khi ch th I : l cc ch th cn thc hin trong trng hp gi tr ca biu thc th I
trng vi gi tr ca biu thc u. y c th gm nhiu ch th c vit trn nhiu
dng.
V d : vit chng trnh nhp vo tui mt ngi v cho bit ngi thuc la tui no.

Sub Form_Click()
Dim Cauhoi, Tuoi 'Khai bo bin Cauhoi v Tuoi
Cauhoi = "Bn bao nhiu tui :"
Lp trnh trc quan

92
Tuoi = InputBox(Cauhoi) ' Nhp tui vo bin tuoi
Select Case Tuoi
Case 1 TO 12
MsgBox "Bn tui Nhi ng" 'In ra dng thng bo
Case 13 TO 18
MsgBox "Bn tui Thiu nin"
Case 18 TO 25
MsgBox "Bn tui Thanh nin"
Case 25 TO 60
MsgBox "Bn l Ngi ln"
Case IS > 60
MsgBox "Bn tui V hu"
Case Else
MsgBox "Bn khng phi con ngi"
End Select
End Sub
12.2. Cu trc lp : cho php t ng lp i lp li nhm lnh nhiu ln.
12.2.1 Cu trc :
FOR <Bin m> = <Gi tr u> TO <Gi tr cui> [STEP n]
[Khi ch th 1]
[Exit For]
[Khi ch th 2]
NEXT <bin m>
- 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.
Lp trnh trc quan

93
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 TO 10 'bin s l Single
Print so!
NEXT so!
V d : vit on lnh in ra cc s vi bc nhy 0.25 v t 0 n 10.
FOR so! = 0 TO 10 STEP 0.25 'bin s l Single
Print so!
NEXT so!
12.2.2 Cu trc :
WHILE <iu kin>
[Khi ch th]
Wend
- iu kin : qui nh iu kin thc hin vng lp. Nu iu kin c gi tr True th
thc hin khi ch th, gp Wend s quay tr li kim tra iu kin. Qu trnh trn kt thc
khi iu kin c gi tr False.
- Khi ch th : cc ch th cn thc hin trong vng lp.
V d : vit on lnh in ra cc s nguyn t 1 n 10.
So! = 1
While so! <= 10
Print so!
So! = so! + 1
Wend
12.2.3 Cu trc :
DO [WHILE | UNTIL <iu kin>]
[Khi ch th]
[Exit Do]
[Khi ch th]
LOOP [WHILE | UNTIL <iu kin>]
- iu kin : qui nh iu kin thc hin vng lp.
Lp trnh trc quan

94
- Nu dng WHILE th iu kin c gi tr True th thc hin khi ch th, nu False kt
thc vng lp.
- Nu dng UNTIL th iu kin c gi tr False th thc hin khi ch th, nu True kt
thc vng lp.
Ta c th t iu kin u hoc cui vng lp u c.
- Khi ch th : cc ch th cn thc hin trong vng lp.
- Exit Do : cho php dng vng lp m khng cn qua kim tra iu kin.
V d : vit on lnh in ra cc s nguyn t 1 n 10.
So! = 1
Do While so! <= 10
Print so!
So! = so! + 1
Loop
Hoc :
So! = 1
Do
Print so!
So! = so! + 1
Loop While so! <= 10
Hoc :
So! = 1
Do
Print so!
So! = so! + 1
Loop Until so! > 10
12.3. Nhn :
Trong Visual Basic ta c th chuyn n thc hin mt on chng trnh hoc mt dng
lnh mi bng cch dng nhn hoc s th t dng lnh.
Lp trnh trc quan

95
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: <Nhm ch th>
- 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
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.
Lp trnh trc quan

96
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 MsgBox "Dng lnh mang s 100"
101 MsgBox "Dng lnh mang s 101"
57 MsgBox "Dng lnh mang s 57"
GOTO 101
Lp trnh trc quan

97
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 .
Lp trnh trc quan

98
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.
Lp trnh trc quan

99
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
C php : [object.]Cls
Tc dng : xa mn hnh ca Form.
V d :
Private Sub Xoa_Click()
Dim Msg ' Declare variable.
AutoRedraw = -1 ' Turn on AutoRedraw.
ForeColor = QBColor(15) ' Set foreground to white.
Lp trnh trc quan

100
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
C php : [Object.]Hide
Tc dng : che ca s Form.
V d : che v lm xut hin li ca s Form ang lm vic..
Private Sub Chehien_Click()
Dim Msg ' Declare variable.
Hide ' Hide form.
Msg = "Choose OK to make the form reappear."
MsgBox Msg ' Display message.
Show ' Show form again.
End Sub
13.5. Show Method
C php : [Object.]Show
Tc dng : lm xut hin ca s Form.
Private Sub Chehien_Click()
Dim Msg ' Declare variable.
Hide ' Hide form.
Msg = "Choose OK to make the form reappear."
MsgBox Msg ' Display message.
Lp trnh trc quan

101
Show ' Show form again.
End Sub
13.6. Item Method
C php : [Object.]Item(Index)
Tc dng : sp xp li cc thnh vin trong Collection theo th t ca kha ch nh trong
Index.
V d :
Dim SmithBillBD As Object
Dim SmithAdamBD As Object
Set SmithBillBD = Birthdays.Item("SmithBill")
Set SmithAdamBD = Birthdays("SmithAdam")
13.7. Move Method
C php : [Object.]Move Left [, Top][, Width][, Height]
- Object: tn Object cn chuyn dch.
- Left : qui nh gi tr cn dch chuyn sang bn tri.
- Top : qui nh dch chuyn ln pha trn.
- Width : qui nh rng mi ca i tng.
- Height : qui nh cao mi ca i tng.
Tc dng : cho php di chuyn v iu chnh kch thc ca i tng.
V d :
Private Sub dichuyen_Click()
Dim Inch, Msg ' Declare variables.
Msg = "Choose OK to resize and move this form by "
Msg = Msg & "changing the value of properties."
MsgBox Msg ' Display message.
Inch = 1440 ' Set inch in twips.
Lp trnh trc quan

102
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
C php : [Object.]Point (X, Y)
- X : Honh ca im cn v.
- Y : Tung ca im cn v.
Tc dng : tr v mt im c toa xc nh.
V d : t mu bng cc du chm.
Private Sub vediem_Click()
Dim LeftColor, MidColor, Msg, RightColor 'Declare variables.
AutoRedraw = -1 ' Turn on AutoRedraw.
Height = 3 * 1440 ' Set height to 3 inches.
Width = 5 * 1440 ' Set width to 5 inches.
BackColor = QBColor(1) ' Set background to blue.
ForeColor = QBColor(4) ' Set foreground to red.
Line (0, 0)-(Width / 3, Height), , BF ' Red box.
ForeColor = QBColor(15) ' Set foreground to white.
Line (Width / 3, 0)-((Width / 3) * 2, Height), , BF
LeftColor = Point(0, 0) ' Find color of left box,
MidColor = Point(Width / 2, Height / 2) ' middle box, and
RightColor = Point(Width, Height) ' right box.
Msg = "The color number for the red box on the left side of "
Msg = Msg & "the form is " & LeftColor & ". The "
Msg = Msg & "color of the white box in the center is "
Msg = Msg & MidColor & ". The color of the blue "
Msg = Msg & "box on the right is " & RightColor & "."
Lp trnh trc quan

103
MsgBox Msg ' Display message.
End Sub
13.9. Print Method
C php : [Object.]Print OutputList
Tc dng : cho php in gi tr cc biu thc trong OutputList ra i tng. OutputList l
mt danh sch cc biu thc cn in. Object l tn i tng m ta cn in ln .
Nu mun in my in th tn Object l Printer. V d :
Private Sub Command1_Click()
Dim MyVar
MyVar = "Chc cc bn lp trnh tht tt vi Visual Basic."
Print MyVar
End Sub
13.10. PrintForm Method
C php : [Object.]PrintForm
Tc dng : cho php in tt c cc hnh nh ca biu mu ra giy. Nu khng ch r tn Form
th Form ang lm vic s c in. Object y l tn Form cn in.
V d
Private Sub Command1_Click()
Dim Msg ' Declare variable.
On Error GoTo ErrorHandler ' Set up error handler.
PrintForm ' Print form.
Exit Sub
ErrorHandler:
Msg = "The form can't be printed."
MsgBox Msg ' Display message.
Resume Next
End Sub
Lp trnh trc quan

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

105
13.12. Refresh Method
C php : [Object.]Refresh
Tc dng : cho php "lm ti'" li i tng, ngha l n cho php v li hnh nh ca
Object.
V d :
Private Sub Form_Click ()
Dim FNMA, I, Msg ' Declare variables.
File1.Pattern = "TestFile.*" ' Set file pattern.
For I = 1 To 8 ' Do eight times.
FNMA = "TESTFILE." & I
Open FNMA For Output As FreeFile ' Create empty file.
File1.Refresh ' Refresh file list box.
Close ' Close file.
Next I
Msg = "Choose OK to remove the created test files."
MsgBox Msg ' Display message.
Kill "TESTFILE.*" ' Remove test files.
File1.Refresh ' Update file list box.
End Sub
13.13. Scale Method
C php : [Object.]Scale [(X1, Y1) - (X2, Y2)]
- Object : tn ca i tng cn nh li h thng ta .
- (X1, Y1) : ta gc trn bn tri.
- (X2, Y2) : ta gc phi bn di.
Tc dng : qui nh li h thng ta theo yu cu ngi s dng. Nu khng c (X1, Y1)
v (X2, Y2) th tr h thng ta v gi tr ngm nh.
V d :

Lp trnh trc quan

106
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.
Lp trnh trc quan

107
13.14. SetFocus Method
C php : [Object.]SetFocus
Tc dng : cho php tham chiu n Object c tn c ch nh thc hin cc thay i
trn nu c.
V d : Vehinh.SetFocus
13.15. Show Method
C php : [Object.]Show [Style]
Style qui nh trng thi v n c gi tr 0 hoc 1.
Tc dng : cho php lm xut hin i tng c tn c ch nh.
V d :

Private Sub Hienhinh_Click()
Dim Msg ' Declare variable.
Hide ' Hide form.
Msg = "Choose OK to make the form reappear."
MsgBox Msg ' Display message.
Show ' Show form again.
End Sub
13.16. TextHeight v TextWidth Methods
C php : [Object.]TextHeight (String)
[Object.]TextWidth (String)
- Object : tn ca i tng c n nh kch c Font ch m ta da vo tnh
chiu cao v chiu rng ca on vn bn cn th hin.
- String : ni dung chui k t m Method s tnh ton chiu cao v chiu rng.
Lp trnh trc quan

108
Tc dng : tnh ton v tr v kt qu l chiu cao v chiu rng ca String.
V d :
Private Sub Inchu_Click()
Dim HalfWidth, HalfHeight, Msg ' Declare variable.
AutoRedraw = -1 ' Turn on AutoRedraw.
BackColor = QBColor(4) ' Set background color.
ForeColor = QBColor(15) ' Set foreground color.
Msg = "Visual Basic" ' Create message.
FontSize = 48 ' Set font size.
HalfWidth = TextWidth(Msg) / 2 ' Calculate one-half width.
HalfHeight = TextHeight(Msg) / 2 ' Calculate one-half height.
CurrentX = ScaleWidth / 2 - HalfWidth ' Set X.
CurrentY = ScaleHeight / 2 - HalfHeight ' Set Y.
Print Msg ' Print message.
End Sub

Lp trnh trc quan

109
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 :
14.1.1 Tm chiu di chui : LEN(String)
Tr v kt qu l s k t c trong String.
V d : LEN("ABCD") tr v kt qu l 4.
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
Lp trnh trc quan

110
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"
Lp trnh trc quan

111
14.1.10 i m s sang k t:
Chr(m s) hoc Chr$(m s)
Tr v kt qu l mt k t tng ng vi m s trong bng m ANSI. M s l mt s
nguyn t 0 n 255.
V d : Chr(65) tr v kt qu l "A"
14.1.11 i k t sang m s:
Asc(K t)
Tr v kt qu l mt s kiu Integer tng ng vi k t trong bng m ANSI.
V d : Asc("A") tr v kt qu l 65.
14.1.12 i chui sang s:
Val(biu thc chui)
Tr v kt qu l mt s sau khi i chui dng s (kiu String) sang gi tr s.
V d : Val("123") + Val("213") tr v kt qu l 336
14.1.13 i s sang chui:
Str[$](biu thc s)
- Tr v kt qu l mt chui k t sau khi i s sang.
V d : Str(123) + Str(213) tr v kt qu l "123213"
14.1.14 nh dng chui:
Format[$](biu thc [, dng])
Tr v kt qu l mt chui k t c nh dng theo mt khun mu cho trc. Biu thc
y c th l s hoc chui.
- Cc k t nh dng s :
Lp trnh trc quan

112
# : 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, "#.###") kt qu 1234.5
Format(so, "###,#.##") kt qu 1,234.5
Format(so, "0.000") kt qu 1234.5000
Format(so, "0%") kt qu 1234500%
Format(so, "$0.00") 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",">") tr v "VISUAL BASIC"
Format("VISUAL BASIC",">") tr v "visual basic"
14.1.15 Tm chui con:
InStr[$]([s,] chui 1, chui 2[, so snh])
Trong :
- S : nu c th n qui nh v tr bt u tm kim. Khng c th tm t u.
Lp trnh trc quan

113
- So snh : l qui nh phng thc tm. Nu so snh l gi tr 1 th khng phn bit ch
in vi ch thng, nu gi tr 0 th c phn bit ch in vi ch thng.
- Chui 1 : chui m. y l chui c th cha chui cn tm.
- Chui 2 : chui con. y l chui cn tm xem c c cha trong chui 1 hay khng.
Hm ny tr v kt qu l gi tr s. Nu bng 0 ngha l khng tm thy, nu mt s ln th
khng th l v tr xut hin chui 2 trong chui 1.
V d : InStr("I Love You", "Love") tr v kt qu l 3
InStr("I Love You", "love", 0) tr v kt qu 0.
14.2. Cc hm x l s :
1. SIN(gc) Tnh sin ca gc.
2. COS(gc) Tnh Cosin ca mt gc
3. TAN(gc) Tnh Tang ca mt gc
4. ATAN(s) Tnh Arctang ca mt gc
5. EXP(s) Expenential
6. LOG(s) Logarithm
7. CCUR(s) Chuyn i mt s v kiu Currency
8. CINT(s) Chuyn i mt s v kiu Integer
9. CLNG(s) Chuyn i mt s v kiu Long
10. CSNG(s) Chuyn i mt s v kiu Single
11. CDBL(s) Chuyn i mt s v kiu Double
12. FIX(s) B phn thp phn i thnh s nguyn
13. INT(s) Qui trn v s nguyn.
Lp trnh trc quan

114
14. RND[(s)] To mt s ngu nhin.
15. ABS(s) Tr tuyt i
16. SGN(s) Du m/dng ca mt con s
17. SQR(s) Ly cn bc hai.


Lp trnh trc quan

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


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

116
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 Ctrl-
Enter, 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
Lp trnh trc quan

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

Lp trnh trc quan

118
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.
Lp trnh trc quan

119
Do chng ta phi trnh gi FreeFile lin tip hai ln, v OS s cho chng ta cng mt
con s. Tc l, sau khi gi FreeFile phi dng n ngay bng cch Open mt File ri mi gi
FreeFile ln k c mt con s khc.
cch dng ch Input, Output cho files l relative (tng i) vi v tr ca chng
trnh (n nm trong memory ca computer). Do t trong memory vit ra a cng th gi l
Output. Ngc li c t mt Text file nm trn hard disk vo memory cho chng trnh ta th
gi l Input.
15.1.3 Load mt Text file vo Listbox
Trong bi ny, thay v nh cc Items ca Listbox vo Property List ca lstNames ta c th
populate (lm y) lstNames bng cch c cc Items t mt Text file. Ta th thm mt
CommandButton tn CmdLoad. Ta s vit code khi ngi s dng click nt CmdLoad
chng trnh s m mt Input text file v c tng dng b vo lstNames:
Private Sub CmdLoad_Click()
Dim i, FileName, FileNumber, anItem
' Obtain Folder where this program's EXE file resides
FileName = App.Path
' Make sure FileName ends with a backslash
If Right(FileName, 1) <> "\" Then FileName = FileName & "\"
FileName = FileName & "MyList.txt"
' Obtain an available filenumber from the operating system
FileNumber = FreeFile
' Open the FileName as an input file
Open FileName For Input As FileNumber
lstNames.Clear ' Clear the Listbox first
' Now read each line until reaching End-Of-File
Do While NOT EOF(FileNumber)
Line Input #FileNumber, anItem ' Read a line from the file
lstNames.AddItem anItem ' Add this item to the lstNames
Loop
Close FileNumber ' Close the input file
End Sub
c t mt Text file ta cn phi Open n trong mode Input.
Lp trnh trc quan

120
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.
Lp trnh trc quan

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



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

122

15.3. Dng Property Sorted
Trong v d trn ta c th quyt nh v tr ca mt Item mi khi ta nht n vo Listbox.
i khi ta mun cc Items ca Listbox c t ng sp theo th t Alphabet. Chng ta c
th set Property Sorted = True thc hin chuyn ny. C mt gii hn l chng ta phi
cho Property Sorted mt value (True hay False) trong lc design, ch trong khi chy chng
trnh chng ta khng th lm cho Property Sorted ca Listbox thay i.
Gi d ta mun sort cc Items ca mt Listbox khi cn. Vy th ta lm sao? Gii php rt
n gin. Chng ta to mt Listbox tn lstTemp chng hn. Cho n Property Visible= False
( khng ai thy n) v Property Sorted=True. Khi cn sort lstNames chng hn, ta copy
content ca lstNames b vo lstTemp, on Clear lstNames ri copy content ( c sorted)
ca lstTemp tr li lstNames.
Lu l ta c th AddItem vo mt Listbox vi Property Sorted=True, nhng khng th
xc nh nht Item vo trc dng no, v v tr ca cc Items do Listbox quyt nh khi n
sort cc Items.
Ta hy cho thm vo Form mt CommandButton mi tn CmdSort v vit code cho Event
Click ca n nh sau:
Private Sub CmdSort_Click()
Dim i
lstTemp.Clear ' Clear temporary Listbox
' Iterate though every item of lstNames
For i = 0 To lstNames.ListCount - 1
' Add the lstNames item to lstTemp
Lp trnh trc quan

123
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:
Lp trnh trc quan

124
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
Lp trnh trc quan

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

126

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
Lp trnh trc quan

127
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
Lp trnh trc quan

128
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.
Lp trnh trc quan

129

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

Lp trnh trc quan

130
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)
Lp trnh trc quan

131
Canvas.Line (mX, mY)-(mX + mWidth, mY + mHeight),
Canvas.BackColor, B
End Sub
Class clsBox c 4 Properties: X, Y, Width v Height. Ta s dng mt v d c th l mt
Box t clsBox. Mi Box c ta (X,Y) v kch thc chiu rng v chiu cao (width,
height) ca n. Tht ra ta c th dng Public statement khai bo cc bin X, Y, Width v
Height. Nhng y ta c declare chng l Private, di dng mX, mY, mWidth v
mHeight. Khi ta mun thay i cc tr s ca chng, ta s dng cng mt cch vit code nh
bnh thng (v d: myBox.X = 80 ). Nhng khi chng trnh x l assignment statement y,
n s thc thi mt loi method (ging nh Sub) gi l Property Let X (vValue). Ta thy
y vValue c assigned cho mX (i.e. mX = vValue ), ci Private variable ca X. Nh th
cng vic ny cng chng khc g sa i mt Public variable X. Tuy nhin, y ta c th
vit thm code trong Property Let X n lm g cng c.
Mi ln chng ta dng Property Window edit Font size, forcolor hay backcolor th chng
nhng cc properties y ca Label thay i, m kt qu ca s thay i c c hiu lc ngay
lp tc, ngha l Label c hin th tr li vi tr s mi ca property. l v trong method
Property c c code bo Label thc hiu redisplay.
Ngc li, khi ta dng property X ca Object myBox, khng phi ta ch c tr s thi m
cn thc thi c ci method Property Get X. Ni tm li, Property cho ta c hi thc thi
mt method mi khi ngi s dng c hay vit tr s variable y.
V d nh nu ta mun kim sot ch chp nhn tr s ta X mi khi n khng phi l
s m. Ta s sa Property Let X li nh sau:
Public Property Let X(ByVal vValue As Integer)
If (vValue >= 0) Then
mX = vValue
End If
End Property
Property c th l Read Only hay Write Only. Nu mun mt Property l Read Only th ta
khng cung cp Property Let. Nu mun mt Property l Write Only th ta khng cung cp
Property Get. Ngoi ra nu lm vic vi Object, thay v Data type thng thng, th ta phi
dng Property Set, thay v Property Let.
Lp trnh trc quan

132
V d ta cho clsBox mt Property mi, gi l Font dng object ca class stdFont ca VB6.
Trong clsBox ta declare mt Private variable mFont v vit mt Property Set Font nh sau:
Private mFont As StdFont
Public Property Set Font(ByVal newFont As StdFont)
Set mFont = newFont
End Property
Ta s dng property Font ca myBox (thuc Class clsBox) nh sau:
' Declare an object of Class StdFont of VB6
Dim myFont As StdFont
Set myFont = New StdFont
myFont.Name = "Arial"
myFont.Bold = True
Dim myBox As clsBox
Set myBox = New clsBox
Set myBox.Font = myFont ' Call the Property Set method
Class clsBox c hai Public Subs, DrawBox v ClearBox. ClearBox cng v mt box nh
DrawBox, nhng n dng BackColor ca mn nh (canvas), nn coi nh xa ci box c sn.
Do , nu mun, chng ta c th sa Sub DrawBox li mt cht nhn mt Optional draw
color nh sau:
Public Sub DrawBox(Canvas As Object, Optional fColor As Long)
If IsMissing(fColor) Then
Canvas.Line (mX, mY)-(mX + mWidth, mY + mHeight), , B
Else
Canvas.Line (mX, mY)-(mX + mWidth, mY + mHeight), fColor, B
End If
End Sub
Trong v d trn, Optional parameter fColor c tested bng function IsMissing. Nu
fColor l BackColor ca canvas th ta s c hiu qu ca ClearBox.
Trong form chnh ca chng trnh dng test clsBox, mi khi ta refer n mt object
thuc class clsBox, IDE Intellisense s hin th cc Properties v Subs/Functions ca clsBox
nh trong hnh di y:
Lp trnh trc quan

133

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.
Lp trnh trc quan

134

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

Lp trnh trc quan

135
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
Lp trnh trc quan

136
BI 17. DEBUG
Bugs l nhng li ca chng trnh m ta pht hin khi chy n. Debug l cng vic loi tt
c nhng lm trong chng trnh n chy m xui trong mi tnh hung.
Thng thng mun sa mt ci bug no trc ht ta phi tm hiu l do khin n xut
hin. Mt khi bit c duyn c ri ta s ngh ra cch gii quyt. Ni chung, c hai loi
bugs : hoc l chng trnh khng lm ng chuyn cn phi lm v lp trnh vin hiu lm
Specifications hay c cho tin tc sai lc, hoc l chng trnh b st chi tit cn phi c.
Trng hp ny ta gii quyt bng cch gim thiu s hiu lm qua s nng cp kh nng
truyn thng.
Chng trnh khng thc hin ng nh lp trnh vin mun, tc l lp trnh vin mun
mt ng m bo chng trnh lm mt ng v v tnh khng vit chng trnh ng cch.
Trng hp ny ta gii quyt bng cch dng nhng Software Tools (k c ngn ng lp
trnh) thch hp, v c nhng qu trnh lm vic c h thng.
C nhiu yu t nh hng n cht lng ca mt chng trnh nh chc nng ca
chng trnh, cu trc ca cc b phn, k thut lp trnh v phng php debug. Debug
khng hn nm giai on cui ca d n m ty thuc rt nhiu vo cc yu t k trn trong
mi giai on trin khai.
17.1. c t chng trnh (Program Specifications)
Du chng trnh ln hay nh, trc ht ta phi xc nh r rng v t m n cn phi lm
g, bao nhiu ngi dng, mng nh th no, database ln bao nhiu, phi chy nhanh n
mc no .v.v..
C nhiu chng trnh phi b thay i na chng v lp trnh vin hiu lm iu khch
hng mun. Do trong s lin h vi khch hng ta cn phi hi i, hi li, phn hi vi
khch hng nhiu ln iu ta hiu bng th t, ti liu, khch xc nhn l ta bit ng h
trc khi xc tin vic thit k chng trnh. Nu sau ny khch i , l quyn ca h,
nhng h phi tr tin thay i (variation).
Lp trnh trc quan

137
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.
Lp trnh trc quan

138
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.
Lp trnh trc quan

139
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).
Lp trnh trc quan

140
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
Lp trnh trc quan

141
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
Lp trnh trc quan

142
vo bn trong mt Sub/Function m mun vic thc thi mt Sub/Function nh mt bc n
gin. Trong trng hp , chng ta dng Menu command Debug | Step Over hay Shift-F8.

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

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

VB6 IDE s hin th Debug Toolbar nh sau:
Lp trnh trc quan

143

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.
Lp trnh trc quan

144
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
Lp trnh trc quan

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

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

146

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.
Lp trnh trc quan

147
BI 18. DNG MENU
Menu trong Windows l ni tt c cc commands ca mt chng trnh c sp xp th
t theo tng loi gip ta dng d dng.
C hai loi menu ta thng gp : drop-down (th xung) menu v pop-up (hin ln)
menu. Ta dng drop-down menu lm Menu chnh cho chng trnh. Thng thng n nm
pha trn chp mn hnh. Nm dc theo chiu ngang l Menu Bar, nu ta click ln mt
command trong Menu Bar th chng trnh s th xung mt menu vi nhng MenuItems
nm dc theo chiu thng ng. Nu ta click ln MenuItem no c du hnh tam gic nh bn
phi th chng trnh s popup mt Menu nh trong hnh di y (khi ta click Format |
Make Same Size):


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

148

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.
Lp trnh trc quan

149

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.
Lp trnh trc quan

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

Lp trnh trc quan

151
By default, menuItem c Enabled v Visible. Lc thit k chng ta c th cho MenuItem
gi tr khi u ca Enabled v Visible bng cch dng Checkboxes Enabled v Visible.
Trong khi chy chng trnh (at runtime), chng ta cng c th thay i cc values Enabled
v Visible nh sau:
mnuSave.Enabled = False
mnuOpen.Visible = False
Khi mt MenuItem c Enabled=False th n b m v ngi s dng khng dng c.
Chng ta dng cc du mi tn ch ln v xung di chuyn MenuItem c selected
ln v xung trong danh sch cc MenuItems. Chng ta dng button Delete hy b
MenuItem c selected, Insert nht mt MenuItem mi ngay trn MenuItem c
selected v Next chn MenuItem ngay di MenuItem c selected.


18.2. Pop-up Menu
i vi ngi s dng, ang khi lm vic vi mt Object trong Windows tin nht l ta c
th lm hin th Context Menu (Menu p dng cho ng tnh hung) bng mt Mouse click.
Thng thng l Right Click v ci Context Menu cn c gi l Pop-up Menu. Chnh ci
Lp trnh trc quan

152
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.
Lp trnh trc quan

153
18.3. Cha menu Settings trong Registry
Gi s chng trnh chng ta cho ngi s dng mt Option WordWrap nh di y:

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

Lp trnh trc quan

154
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) :

Lp trnh trc quan

155
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.
Lp trnh trc quan

156

Di y l code dng thm tn File mi dng nht vo Registry:
Private Sub mnuOpen_Click()
' Initialise Folder in Common Dialog
CommonDialog1.InitDir = App.Path
' Launch the dialog
CommonDialog1.ShowOpen
' Save the Filename in the Registry, using Object
myRecentFiles
myRecentFiles.AddFile CommonDialog1.FileName
End Sub
Code dng trong Sub Form_Load c tn RecentFiles v hin th trong Menu:
'
Set myRecentFiles = New clsRecentFiles
' Pass the form handle to it
' This effectively loads the most recently used FileNames to
menu
myRecentFiles.Init Me
Lp trnh trc quan

157

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 = "|"
Lp trnh trc quan

158
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
Lp trnh trc quan

159
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
Lp trnh trc quan

160


Lp trnh trc quan

161
BI 19. DNG DIALOGS
Dialogs (hi thoi) c dng hin th tin tc v nhn thng tin t chut hay bn phm
t ngi s dng ty theo tnh hung. Chng c dng tp trung s ch ca ngi s
dng vo cng vic hin ti ca chng trnh nn rt hu dng trong cc chng trnh ca
Windows
C nhiu dng Dialogs, mi th p dng cho mt hon cnh ring bit. Trong chng ny
ta s bn qua 4 loi Dialogs chnh v nghin cu v khi no v cch no ta dng chng:
- Message Boxes
- Input Boxes
- Common Dialogs
- Custom Dialogs
19.1. Message Boxes
Message Boxes c dng nhc nh ngi s dng mt chuyn g, v i hi mt phn
ng no t ngi s dng. V d nh khi ta chm dt chng trnh MSWord m cha lu
tr h s th MSWord s nhc ta lu tr n bng Dialog di y:

Lp trnh trc quan

162
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 Cc buttons
vbOKOnly OK
vbOKCancel OK Cancel
vbYesNo Yes No
vbRetryCancel Retry Cancel
vbYesNoCancel Yes No Cancel
vbAbortRetryIgnore Abort Retry Ignore
Constant ca cc icons ta c th dng l vbCritical, vbQuestion, vbExclamation v
vbInformation.
Lp trnh trc quan

163
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 Tn Const
1 OK vbOK
2 Cancel vbCancel
3 Abort vbAbort
4 Retry vbRetry
5 Ignore vbIgnore
6 Yes vbYes
7 No 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"
Lp trnh trc quan

164
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 run-
time, chng ta ch cn thm vi dng code trong Sub Hin thError vit Error message vo
mt text file.
19.2. Input Boxes
Vi Message Boxes, ngi s dng ch c th click ln mt button. i khi ta mun ngi
s dng nh vo thm mt t d kin, trong trng hp y ta c th dng Input Boxes.
Input Boxes ging ging Message Box, nhng n chuyn nhn input data t ngi s dng
v khng hin th mt icon. V d:
Private Sub CmdGreeting_Click()
Dim strReply As String
strReply = InputBox$("Please enter your name", "What 's your
name?", "John", 2000, 1000)
MsgBox "Hi " & strReply & ", it 's great to meet you!",
vbOKOnly, "Hello"
End Sub
cc parameters ca Function InputBox$. Parameter th nht l Text message,
parameter th hai l Title ca Dialog, parameter th ba l Default Input Value. y l value
c hin th sn trong Input Box khi n xut hin, nu l input user thng nh vo th
ngi s dng ch cn click nt OK l . Hai parameters cui cng l Optional (ty chn, c
cng c, khng c cng khng sao). N l X,Y coordinates ca Input Box trong n v
twips. H thng ta ly gc trn bn tri lm chun vi X=0, Y=0.
Lp trnh trc quan

165

Input Box c hai dng Functions:
- InputBox$ - returns mt String ng hong
- InputBox - returns mt String nm trong Variant variable
Nu chng ta click nt Cancel th returned Value l empty string, chng ta c th test empty
string nhn din trng hp ny.
Di y l mt v d dng Function InputBox:
Private Sub CmdFortuneTeller_Click()
Dim varValue As Variant
Dim intAge As Integer
varValue = InputBox("Please enter your age", "How old are
you?", "18")
If IsNumeric(varValue) Then
intAge = Val(varValue)
If intAge < 20 Then
MsgBox "You are a young and ambitious person", vbOKOnly,
"Observation"
Else
MsgBox "You are a matured and wise person", vbOKOnly,
"Observation"
End If
Else
MsgBox "Oh oh! - please type your age!", vbCritical +
vbOKOnly, "Input Error"
End If
End Sub
Mc du Input Boxes rt d dng, trn thc t rt t khi ta dng n v nhng l do sau y:
Lp trnh trc quan

166
- Ta khng th lm g c trong lc ngi s dng input data, phi i sau khi ngi s
dng click OK th mi bt u x l input textstring. Ngc li nu ta dng mt Textbox
trong mt Form thng thng, ta c th code trong cc Event handlers ca Events
KeyPress hay Change kim sot cc keystrokes ca ngi s dng.
- Input Boxes ch cho ta nh vo mt text string duy nht. Nhiu khi ta mun ngi s
dng nh vo nhiu th nn cn phi c mt form ring.
- Sau cng, Input Boxes xem khng p mt. Chng trnh dng Input Boxes c v nh
khng chuyn nghip, do ta cn phi dng Custom Dialogs.
19.3. Common Dialogs
Chng ta c thy hu nh mi chng trnh trong Windows u c cng nhng
dialogs Open v Save files ? V hu nh tt c chng trnh u c cng dialogs chn
mu, font ch hay in ? l v cc Dialogs thng dng y thuc v Common Dialog
Library ca MSWindows v cho php cc chng trnh gi.
Mun dng cc Dialogs y trong VB6 ta phi reference Comdlg32.ocx bng IDE Menu
command Project | Components... ri chn v Apply Microsoft Common Dialog Control
6.0.

Microsoft Common Dialog Control 6.0 cho ta su dng Dialogs ty theo gi Method no:
Lp trnh trc quan

167
Tn Method
Open File ShowOpen
Save File ShowSave
Color ShowColor
Font ShowFont
Print ShowPrinter
Help ShowHelp
19.4. Open v Save File Dialogs
Chng ta hy m mt Project mi vi mt button tn CmdOpen trong Form1 v nh vo
code sau y cho Sub CmdOpen_Click:
Private Sub CmdOpen_Click()
On Error GoTo DialogError
With CommonDialog1
.CancelError = True ' Generate Error number cdlCancel if
user click Cancel
.InitDir = "E:\VB6" ' Initial (i.e. default ) Folder
.Filter = "Executables (*.exe) | *.exe| Batch Files
(*.bat)| *.bat"
.FilterIndex = 1 ' Select ""Executables (*.exe) | *.exe"
as default
.DialogTitle = "Select a program to run"
.ShowOpen ' Lauch the Open Dialog
MsgBox "You selected " & .FileName, vbOKOnly +
vbInformation, "Open Dialog"
End With
Exit Sub
DialogError:
If Err.Number = cdlCancel Then
MsgBox "You clicked Cancel!", vbOKOnly + vbInformation,
"Open Dialog"
Exit Sub
Else
MsgBox "Error in Dialog's use: " & Err.Description,
vbOKOnly + vbCritical, "Error"
Lp trnh trc quan

168
Exit Sub
End If
End Sub
Hy chy chng trnh y v click button Open, chng trnh s hin th error message
di y:

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

Chng ta c th chn folder no ty bng cch di chuyn t folder ny qua folder khc
hay thay i disk drive. Nu chng ta click vo bn phi ca combobox File of type, n s
dropdown cho thy chng ta c th chn mt trong hai loi Files nh lit k trong
statement:
Lp trnh trc quan

169
.Filter = "Executables (*.exe) | *.exe| Batch Files (*.bat)|
*.bat"
Sau khi chn mt Filename c sn hay nh mt tn vo File name textbox, chng ta click
Open. Sau , CommonDialog1.Filename s cha tn file chng ta chn hay nh vo.

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

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

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

170

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:
Lp trnh trc quan

171

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

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

172

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
Lp trnh trc quan

173
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 Tr s Hiu qu
cdlCFScreenFonts 1 Ch hin th cc Fonts printer h tr
cdlCFPrinterFonts 2 Ch hin th cc Fonts ca mn nh, cha chc
tt c u c printer h tr
cdlCFBoth 3 Hiin th cc Fonts mn nh v printer
cdlCFScalableOnly &H20000 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.

Lp trnh trc quan

174
Di y l code cho ngi s dng chn Font v mu ca Label1.
Private Sub CmdSelectFont_Click()
On Error GoTo NoFontChosen
CommonDialog1.CancelError = True
' Causes the dialog box to list only the screen fonts
supported by the system.
CommonDialog1.Flags = cdlCFScreenFonts + 256 ' Add 256 to
include Color option
CommonDialog1.ShowFont ' Launch the Font Dialog
With Label1.Font
.Bold = CommonDialog1.FontBold
.Italic = CommonDialog1.FontItalic
.Name = CommonDialog1.FontName
.Size = CommonDialog1.FontSize
.Strikethrough = CommonDialog1.FontStrikethru
.Underline = CommonDialog1.FontUnderline
End With
Label1.ForeColor = CommonDialog1.Color
Label1.Caption = "Hello world!!!, this is a Font Dialog Demo"
Exit Sub
NoFontChosen:
MsgBox "No font was chosen!", vbInformation, "Cancelled"
Exit Sub
End Sub
Ch : Nu chng ta qun cho Flags mt trong nhng hng s ni trn chng trnh s cho
mt Error message nh sau:

19.5.3 Print Dialog
Print Font cho ta mt giao din cng ging nh trong Microsoft Office chn nhng ty
chn v vic in. Vi Print Dialog ta c th chn printer no vi nhng c tnh no bng cch
click button Properties hay button Preferences. Ta cng c th quyt nh in t trang no n
Lp trnh trc quan

175
trang no ca document v in bao nhiu copies. Ch c iu phi lu l nu ngi s dng
dng Print Dialog chn mt Printer khc m trong Print Dialog ta chn Property
PrinterDefault = True th Printer y s tr thnh Default Printer v n cng s c hiu lc
vnh vin trong c Windows cho n khi ngi s dng thay i li.
Khc vi Color v Font Dialogs, Print Dialog khng i hi ta phi cho mt tr s ca
Property Flags. Ta ch cn dng Method ShowPrinter hin th Print Dialog. Ba properties
thng c dng nht sau khi ngi s dng chn cc ty chn ca Print Dialog l Copies,
FromPage v ToPage. cho ngi s dng cc default values ca nhng properties ny,
chng ta c th sn cc tr s trc khi hin th Print Dialog.

Di y l code mu dng print Dialog:
Private Sub CmdSelectPrinter_Click()
With CommonDialog1
.FromPage = 1
.ToPage = 1
.Copies = 1
.ShowPrinter
End With
End Sub
Lp trnh trc quan

176
19.5.4 Help Dialog
Ta dng method ShowHelp hin th cc thng tin gip , nhng nh phi cho
CommonDialog t nht tr s ca cc properties HelpFile v HelpCommand.
Private Sub CmdHelp_Click()
CommonDialog1.HelpFile = "YourProgram.hlp"
CommonDialog1.HelpCommand = cdlHelpContents
CommonDialog1.ShowHelp
End Sub
bit thm chi tit v cch dng ShowHelp, highlight ch HelpContext trong source
code VB6 ri n phm F1 v chn MsComDlg.
19.6. Custom Dialogs
Nhiu khi Message Box, Input Box hay cc dng Common Dialogs vn khng thch hp
cho hon cnh lp trnh. Trong trng hp y chng ta c th dng mt Form bnh thng
lm thnh mt Dialog theo yu cu. N hi mt cng hn mt cht, nhng th nht n c
nhng mu sc ging nh cc Forms khc trong chng trnh, v th hai ta mun lm g ty .
Ch c ci bt li l chng trnh s dng nhiu ti nguyn hn v cn thm mt t b nh.
Sau y ta th trin khai mt Login Form tng qut, c th dng trong nhiu trng hp.
Khi khi ng, chng trnh ny s hin th mt Login form yu cu ngi s dng nh vo
tn v mt khu. Sau , nu tn v mt khu hp l th ci Form chnh ca chng trnh mi
hin ra. Cch ta thc hin l cho chng trnh khi ng vi mt Sub Main trong .BAS
Module. Sub Main s gi Sub GetUserInfo (cng nm trong cng Module) hin th form
frmLogin trong Modal mode n lm vic cng mt cch nh Message Box, Input Box hay
Common Dialogs.
Khi form frmLogin c du kn bng statement Me.Hide th execution trong Sub
GetUserInfo s tip tc chi tit in vo cc textboxes txtUserName v txtPassword c
tr v local variables strUserName v strPassword. M ngun ca Sub Main v Sub
GetUserInfo c lit ra di y:
Sub Main()
Dim strUserName As String
Dim strPassword As String
' Call local Sub getUserInfo to obtain UserName and Password
Lp trnh trc quan

177
GetUserInfo strUserName, strPassword
If strUserName = "" Then
MsgBox "Login failed or aborted", vbInformation, "login
Aborted"
Else
MsgBox "User " & strUserName & " logged in with password "
& strPassword, vbInformation, "Login accepted"
' Check UserName and Password here
' If valid password then show the Main form of the program
which is implemented separately...
' frmMain.Show
End If
End Sub

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

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

178

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
Lp trnh trc quan

179
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
Lp trnh trc quan

180
BI 20. DNG HA
Visual Basic 6 c cho ta mt s phng tin v ha (graphics) trang im cho cc ca
s thm phong ph, thn thin, d lm vic v p mt hn. D rng cc phng tin v th
ny khng mnh cho ta vit nhng chng trnh tr chi (games) nhng c th p ng cc
nhu cu cn thit thng thng.
Khi ni n ha, ta mun phn bit n vi Text thng thng. V d ta dng Notepad
edit mt bi th trong mt ca s (V d : Hm qua em i tnh v ). Trong lc bi th ang
c hin th ta c th sa i d dng bng cch dng bn phm nh thm cc ch mi
vo, dng cc nt Delete, Backspace xa cc ch. l ta lm vic vi Text.
By gi, trong khi bi th cn ang hin th, ta dng mt chng trnh Graphic nh
PhotoImpact Capture ca ULead chp ci hnh ca s ca bi th (active window) thnh
ging nh mt photo, th ta c mt Graphic. Sau , mun sa i bi th t graphic ny ta
phi dng mt graphic editor nh MSPaint, PaintShopPro,.v.v.. Cc ch trong hnh cng c
cng dng graphic nh ta thy mt photo, nn mun edit phi dng mt c vi mu sn.
20.1. Mu (color) v mn (resolution)
Ta ni mt tm hnh tt v n c mu sc so v r rng. Mt graphic trong Windows gm
c nhiu m nh, mi m, c gi l mt pixel, c kh nng hin th 16, 256, ... mu khc
nhau.
20.1.1 mn (resolution)
Thng thng mn (resolution) ca mn nh ta dng l 800x600, tc l chiu ngang c
800 pixels v chiu cao c 600 pixels. Sau ny, xem cc hnh r hn ta cn dng mn
1028x768 vi card SuperVGA v Monitor tt. Ta ni card SuperVGA c n 2MB RAM, ti
sao phi cn n 2MB hin th graphic p?
Nu mu ca mi pixel c biu din bi mt byte d kin th vi mt byte ta c th cha
mt con s t 0 n 255. ngi ta ng vi nhau theo mt quy c rng s 0 tng trng
cho mu en, s 255 tng trng cho mu trng chng hn. Nu mn ca mn nh l
1024x768 th ta s cn 1024x768=786432 bytes, tc l gn 0,8 MB.
Lp trnh trc quan

181
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 2
16
= 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:

Lp trnh trc quan

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

Lp trnh trc quan

183
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 Mu Tr s Mu
0 Black 8 Gray
1 Blue 9 Light Blue
2 Green 10 Light Green
3 Cyan 11 Light Cyan
4 Red 12 Light Red
5 Magenta 13 Light Magenta
6 Yellow 14 Light Yellow
7 White 15 Bright White
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
Lp trnh trc quan

184
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.
Lp trnh trc quan

185

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

Lp trnh trc quan

186
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
Lp trnh trc quan

187
strRGB = "picColor.BackColor = RGB(Red, Green, Blue) " &
vbCrLf
' Values of Red, Green, Blue in Decimal
strRGB = strRGB & " Decimal: " & VScroll1(0).Value & ", " &
VScroll1(1).Value & ", " & VScroll1(2).Value & vbCrLf
' Values of Red, Green, Blue in Hexadecimal
strRGB = strRGB & " Hex: 0x" & Hex(VScroll1(0).Value) & ", 0x"
& Hex(VScroll1(1).Value) & ", 0x" & Hex(VScroll1(2).Value)
' Assign the resultant string to caption of Label lblRGBValue
lblRGBValue.Caption = strRGB
End Sub
Chng ta hy khi ng chng trnh ri nm cc bar ca 3 VScrolls ko ln, ko xung
xem kt qu. Ca s ca chng trnh s c dng ging nh di y:

20.3. Color Mapping
Nu dng Hex Calculator i con s 0xFFFFFF ra decimal ta s c 16777215, nu k c
s 0 ta s c tng cng 16777216 mu. Lc ny ta bn v 8bit (1 byte) v 16bit (2 bytes) color,
nhng y ta ni chuyn 3 byte color. Nh th c th mn nh khng kh nng cung
cp mi mu m Function RGB tnh ra. Vy VGA card s lm sao?
Lp trnh trc quan

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

Ch tuy nhin nu ta dng mt mu m hin th tuyt p th g trong chng
trnh VB6 m by gi ngi s dng t nhin thay i Color Scheme thnh Olive Green
chng hn khin cho mu m y coi chng ging ai trong ci Color Scheme mi.
trnh trng hp y, thay v ni thng ra l mu g (xanh hay ) ta ni dng mu
vbActiveTitlebar hay vbDesktop, .v.v. Dng Intrinsic Color Constant s bo m mu ta
Lp trnh trc quan

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

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


Lp trnh trc quan

190

BI 21. C S D LIU (DATABASE)
21.1. Table, Record v Field
Ni n c s d liu, ta lp tc ngh n SQLServer, Access hay Oracle .v.v., nhng ni
cha rt nhiu d liu ta c th lu tr hay ly chng ra mt cch tin li v nhanh chng.
Hu ht cc chng trnh ta vit u c truy cp c s d liu, v ta dng n nh mt cng c
lm vic vi rt nhiu d liu trong khi tp trung vo vic lp trnh phn giao din vi
ngi dng (ngi s dng).
Do ta cn c mt kin thc cn bn v kin trc ca c s d liu hiu l do to sao
ta thit k hay truy cp n theo nhng cch nht nh.
Ta s dng Access Database biblio.mdb, nm C:\Program Files\Microsoft Visual
Studio\VB98\biblio.mdb minh ha cc nim cn bit v c s d liu.
Trong database ny c 4 tables: Authors (tc gi), Publishers (nh xut bn), Titles (
mc) v Title Author.

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

191

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

192

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:
Lp trnh trc quan

193

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

Lp trnh trc quan

194
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.
Lp trnh trc quan

195
Nu gi s ta bt u thit k database vi Table Titles, ri quyt nh tch cc chi tit v
nh xut bn vo mt table mi, tn Publishers, th k thut y c gi l normalization.
Ni mt cch khc, normalization l thit k cc tables trong database lm sao mi loi
mnh d kin (khng phi l Key) ch xut hin mt ch.
Trong mi lin h one-to-many gia tables Publishers v Titles, field PubID l Primary Key
trong table Publishers. Trong table Titles, field PubID c gi l Foreign Key, c ngha rng
y l Primary Key ca mt table l (foreign). Hay ni mt cch khc, trong khi lm vic vi
table Titles, lc no cn chi tit mt nh xut bn, ta s ly cha kha l (Foreign Key) dng
lm Primary Key ca Table Publishers truy cp bn ghi ta mun. l chnh Table Titles
c Primary Key ISBN ca n.
21.4. Relational Database
Mt database c nhiu tables v h tr cc lin h, nht l one-to-many, c gi l
Relational Database. Khi thit k mt database, ta s tm cch sp t cc d liu t th gii
tht bn ngoi vo trong cc tables. Ta s quyt nh chn cc ct (columns/fields) no, chn
Primary Key, Index v thit lp cc mi lin h, tc l t cc Foreign Key u.
21.5. Cc li ch
Trong s cc li ch ca mt thit k Relational Database c:
- Sa i d kin, cho vo records mi hay delete (gch b) records c sn rt hiu qu
(nhanh).
- Truy cp d kin, lm bo co (Reports) cng rt hiu qu. V d kin c sp t th
t v c quy c nn ta c th tin cy tnh tnh ca database. V hu ht d kin nm trong
database, thay v trong chng trnh ng dng, nn database t c documentation (ti liu
ct ngha).
- D sa i chnh cu trc ca cc tables.
Lp trnh trc quan

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

197
- 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 Database-
Specific Integrity Rules nghim chnh th database c th b h v khng cn dng c.
21.7. Microsoft Access Database Management System (MSAccess DBMS)
Microsoft Access Database Management System gm c Database Engine v nhng cng
c i chung cung cp cho ngi s dng mt mi trng lm vic thn thin vi database,
nh Database Design (thit k cc tables v mi lin h), Data entry v bo co (reports). Km
theo vi Visual Basic 6.0 khi ta mua l mt copy ca Database Engine ca MSAccess. Tn n
l Jet Database Engine, ci li ca MSAccess DBMS. Cc chng trnh VB6 c th truy cp
database qua Jet Database Engine.
Nu trn computer ca chng ta c ci sn MSAccess, th chng ta c th dng thit
k cc tables ca database hay cho data vo cc tables.
21.8. Properties Required v Allow Zero Length
Khi thit k mt table field, lu property Required v nht l property Allow Zero Length
ca Text. Nu property Required ca mt field l Yes th ta khng th update (vit) mt bn
ghi vi field y c tr s NULL. Nu mt Text field c property Allow Zero Length l No th
th ta khng th update mt bn ghi khi field y cha mt empty string.
Lp trnh trc quan

198

Khi ta to mt bn ghi ln u, nu khng cho tr s ca mt field, th field y c tr s l
NULL. Thng thng, Visual Basic 6.0 khng thch NULL value nn ta phi th mt field
vi Function IsNULL() m bo n khng c tr s NULL trc khi lm vic vi n. Nu
IsNULL tr v tr s False th ta c th lm vic vi field y. Nh l khi tr s NULL c
dng trong mt expression, ngay c khi chng trnh khng cho Error, kt qu cng l NULL.
21.9. Lm vic vi cc versions khc nhau
Nu my chng ta ang chy MSAccess2002 th chng ta c th lm vic vi Access
database file version 97, 2000 v 2002. Nu cn phi convert t version ny qua version khc,
chng ta c th dng Access DBMS Menu Command Tools | Database Utilities | Convert
Database | To Access 2002 File Format.... Nu mun gi nguyn version, chng ta c th
convert database qua File Format 2002 sa i, ri sau convert tr li File Format c.

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

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

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

Lp trnh trc quan

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

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

201
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.
Lp trnh trc quan

202
BI 22. S DNG CONTROL DATA
22.1. Control Data
T VB5, Visual Basic cho lp trnh vin mt control truy cp c s d liu, tn n ch
n s l Data. Nh ta bit, c mt c s d liu Microsoft gi km theo VB6 - l Jet
Database Engine. Jet Database Engine l cng c x l d liu ca MS Access Database
Management System.
Cho n VB5, Microsoft cho ta ba k thut chnh:
- DAO (Data Acess Objects): DAO l k thut c bit ca Microsoft, ch dng vi
Jet Database Engine. N rt d dng, hiu nng v tin, nhng b gii hn trong phm vi
MS Access. Du vy, n rt thnh hnh v rt d s dng v mang li hiu qu cao.
- ODBC (Open Database Connectivity): ODBC c thit k cho php ngi s
dng ni vi loi databases m ch dng mt method duy nht. iu ny ct bt gnh
nng cho lp trnh vin, ch cn hc mt k thut lp trnh duy nht m c th lm vic
vi bt c loi database no. Nht l khi sau ny nu cn phi thay i loi database, nh
nng cp t Access ln SQLServer chng hn, th s sa i v coding rt t. Khi dng
ODBC chung vi DAO, ta c th cho Access Database ni vi cc databases khc. C mt
bt li ca ODBC l hi phc tp khi s dng.
- RDO (Remote Data Object): Mt trong nhng l do chnh RDO c thit k l
gii quyt kh khn v s rc ri ca ODBC. Cch lp trnh vi RDO n gin nh DAO,
nhng tht ra n dng ODBC nn cho php ngi s dng ni vi nhiu databases. Tuy
nhin, RDO khng c thnh hnh lm.
VB6 tip tc h tr cc k thut ni trn, v cho thm mt k thut truy cp database mi,
rt quan trng, l ADO (ActiveX Data Objects). Trong mt bi ti ta s kho st v ADO
vi nhng u im ca n. Tuy nhin, v DAO rt n gin v hiu nng nn ta vn c th
tip tc dng n rt hu hiu trong hu ht cc p dng. Do bi ny v bi k s tp trung
vo nhng k thut lp trnh ph bin vi DAO.
Lp trnh trc quan

203
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.
Lp trnh trc quan

204
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.
Lp trnh trc quan

205
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
Lp trnh trc quan

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



Lp trnh trc quan

207
22.2. Ch nh v tr Database lc chy chng trnh
Cch ch nh tn DatabaseName trong giai on thit k (at design time) ta dng trc
y tuy tin li nhng hi nguy him, v khi ta ci chng trnh ny ln computer ca khch,
cha chc file database y nm trong mt folder c cng tn. V d trn computer mnh th
database nm trong folder E:\Program Files\Microsoft Visual Studio\VB98, nhng trn
computer ca khch th database nm trong folder C:\VB6\DataControl chng hn. Do , khi
chng trnh khi ng ta nn xc nh li v tr ca database. Gi d ta mun database
trong cng mt folder vi chng trnh ang chy, ta c th dng property Path ca
Application Object App nh sau:
Dim AppFolder As String
Private Sub Form_Load()
' Fetch Folder where this program EXE resides
AppFolder = App.Path
' make sure it ends with a back slash
If Right(AppFolder, 1) <> "\" Then AppFolder = AppFolder & "\"
' Assign Full path database filename to Data1
Data1.DatabaseName = AppFolder & "BIBLIO.MDB"
End Sub
Vi cch code ni trn ta s m bo chng trnh tm thy file database ng ch, khng
cn bit ngi ta ci chng trnh chng ta u trong hard disk ca computer khch.
22.3. Thm bt cc Records
Chng trnh trn dng cng tm c, nhng n khng cho ta phng tin thm (add),
bt (delete) cc records. By gi chng ta hy vo Form 5 buttons tn: cmdEdit, cmdNew,
cmdDelete, cmdUpdate v cmdCancel.
Mc du chng ta khng thy, nhng tht ra Control Data Data1 c mt property
Recordset v khi ta dng Navigator buttons l di chuyn t bn ghi ny n bn ghi khc
trong Recordset y. Ta c th ni n n bng Notation (cch vit) Data1.Recordset, v mi
ln mun ly Recordset mi nht t database ta dng method Refresh nh
Data1.Recordset.Refresh.
Lp trnh trc quan

208
Lc chung trnh mi khi ng, ngi s dng ang xem (browsing) cc records th hai
buttons Update v Cancel khng cn phi lm vic. Do ta s nhn tin Lock (kha) cc
textboxes v disable (lm cho bt lc) hai buttons ny v khng cn dng chng.
Trong Sub SetControls di y, ta dng mt parameter gi l Editing vi tr s False hay
True ty theo ngi s dng ang Browse hay Edit, ta gi l Browse mode v Edit mode.
Trong Edit mode, cc Textboxes c unlocked (m kha) v cc nt cmdNew, cmdDelete
v cmdEdit tr nn bt lc:
Sub SetControls(ByVal Editing As Boolean)
' Lock/Unlock textboxes
txtTitle.Locked = Not Editing
txtYearPublished.Locked = Not Editing
txtISBN.Locked = Not Editing
txtPublisherID.Locked = Not Editing
' Enable/Disable buttons
CmdUpdate.Enabled = Editing
CmdCancel.Enabled = Editing
CmdDelete.Enabled = Not Editing
cmdNew.Enabled = Not Editing
CmdEdit.Enabled = Not Editing
End Sub
Trong Browse mode, Form c dng nh sau:

Sub SetControls c gi trong Sub Form_Load khi chng trnh khi ng v trong Sub
CmdEdit khi ngi s dng click nt Edit nh sau:
Lp trnh trc quan

209
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
Lp trnh trc quan

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

Lp trnh trc quan

211
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 Value Ch thch
RowSource Data2 y l datasource ca chnh DBCombo1. N cung cp table
Publishers.
Listfield Company
Name
Khi RowSource pha trn c chn ri, Combo ca property
Listfield ny s hin th cc fields ca table Publishers. Company
Name l field ca RowSource m ta mun hin th trn
DBCombo1.
DataSource Data1 y l datasource ca bn ghi m ta mun. edit, tc l bn ghi
ca table Titles
Datafield PubID Field (ca record Title) s c thay i.
BoundColumn PubID Field trong RowSource (table Publishers) tng ng vi item
user chn trong DBCombo1 (Company Name).
Lp trnh trc quan

212
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
Lp trnh trc quan

213
BI 23. LP TRNH VI K THUT DAO
23.1. Reference DAO
Trong bi ny ta s hc nhng cch lp trnh cn bn vi MS Access database qua k thut
DAO m khng cn dng n Control Data nh trong bi trc. Ta s cn n vi Objects
trong th vin DAO, do nu chng ta m mt d n VB6 mi th hy dng Menu
Command Project | References... chn Microsoft DAO 3.51 Object Library bng cch
click ci checkbox bn tri nh trong hnh di y.

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

214

By gi chng ta hy t ln Form chnh, tn frmDAO, 4 labels vi captions: Title, Year
Published, ISBN v Publisher ID. K cho thm 4 textboxes tng ng v t tn chng l
txtTitle, txtYearPublished, txtISBN v txtPublisherID.
iu ta mun lm l khi Form mi c loaded, n s ly v t database mt Recordset
cha tt c records trong table Titles theo th t v mu t (alphabetical order) ca field Title
v hin th bn ghi u tin.
23.2. Dng keyword SET
Chuyn trc ht l m mt Database Object da vo tn y (full path name) ca
Access database:
' Open main database
Set myDB = OpenDatabase(AppFolder & "BIBLIO.MDB")
ch Set trong cu code trn. l v myDB l mt Pointer n mt Object. Mc du
t y v sau ta s dng myDB nh mt Database theo cch ging nh bt c variable thuc
data type no khc, nhng khi ch nh ln u l n t u n th ta dng ch Set, ni
rng tht ra myDB khng phi l Object Database, nhng l Pointer n Object Database.
Mc ch l VB6 runtime dynamically allocates (dnh ra cho khi cn) mt phn trong b
nh (memory) cha Object Database khi ta nhn c n t execution ca Method
OpenDatabase. Du v tr ch cha Object Database trong b nh khng nht nh, nhng v
ta nm con tr ch n v tr y nn ta vn c th lm vic vi n mt cch bnh thng. Con
tr l value (tr s) ca variable myDB. V value ny khng phi l Object, nhng n cha
memory address ch n (point to hay refer to) Object Database, nn ta gi n l Pointer.
Lp trnh trc quan

215
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
Lp trnh trc quan

216
Hin threcord ' hin th details of current record
End If
End Sub
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
Lp trnh trc quan

217
Displayrecord ' hin th details of current record
Else
myRS.MoveLast ' Move back to last record
End If
End Sub

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:

Lp trnh trc quan

218
23.4. Thm bt cc Records
Ging nh chng trnh trong bi ri, ta s thm phng tin thm (add), bt (delete)
cc bn ghi. By gi chng ta hy vo Form 5 buttons tn: cmdEdit, cmdNew, cmdDelete,
cmdUpdate v cmdCancel.
Ch no trong chng trnh trc ta dng Data1.Recordset th by gi ta dng myRS.
Ta s dng li Sub SetControls vi parameter Editing c tr s False hay True ty theo
ngi s dng ang Browse hay Edit. Trong Browse mode, cc Textboxes b Locked (kha)
v cc nt cmdUpdate v cmdCancel tr nn bt lc. Trong Edit mode, cc Textboxes c
unlocked (m kha) v cc nt cmdNew, cmdDelete v cmdEdit tr nn bt lc.
V y khng c Data Binding nn i cho n khi Update ta mi t Recordset vo
AddNew hay Edit mode. Do ta ch cn nh l khi ngi s dng edits l ang sa i mt
bn ghi hin hu hay thm mt bn ghi mi. Ta cha tr s Boolean y trong variable
AddNewRecord. Nu ngi s dng sp thm mt bn ghi mi th AddNewRecord = True,
nu ngi s dng sp Edit mt bn ghi hin hu th AddNewRecord = False.
Ngoi ra, khi ngi s dng sp thm mt bn ghi mi bng cch click nt New th ta phi
t clear (lm trng) ht cc textboxes bng cch assign Empty string vo text property ca
chng nh sau:
' If Editing existing record then AddNewRecord = False
' Else AddNewRecord = true
Dim AddNewRecord As Boolean

Private Sub ClearAllFields()
' Clear all the textboxes
txtTitle.Text = ""
txtYearPublished.Text = ""
txtISBN.Text = ""
txtPublisherID.Text = ""
End Sub

Private Sub cmdNew_Click()
' Remember that this is Adding a new record
AddNewRecord = True
Lp trnh trc quan

219
' 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()
Lp trnh trc quan

220
' 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
Lp trnh trc quan

221
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
Lp trnh trc quan

222
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:
Lp trnh trc quan

223

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
Lp trnh trc quan

224
Lu l trong string Criteria, v ISBN thuc loi text, ch khng phi l mt con s, nn ta
phi kp n gia hai du ngoc n.
23.6. Bookmark
Khi di chuyn t bn ghi ny n bn ghi khc trong Recordset, i khi ta mun nh du
v tr ca mt bn ghi c dp s tr li. Ta c th thc hin iu y bng cch ghi nh
Bookmark ca Recordset.
V d khi ngi s dng clicks nt Go, ta mun nh v tr ca bn ghi lc y sau ny
quay tr li khi ngi s dng clicks nt Go Back. Chng ta hy thm vo Form mt button
tn CmdGoBack vi Caption Go Back. Ta s thm mt variable tn LastBookmark loi data
type Variant:
Dim LastBookMark As Variant
Lc u button CmdGoBack invisible, v ch tr nn visible sau khi ngi s dng clicks
nt Go. Ta thm cc dng codes sau vo Sub CmdGo_Click() nh sau:
' Remember location of current record
LastBookMark = myRS.BookMark
CmdGoback.Visible = True
Di y l code quay tr li v tr current record trc y trong Recordset:
Private Sub CmdGoback_Click()
' Reposition record to last position
myRS.BookMark = LastBookMark
' Rehin th details or current record
Displayrecord
End Sub
23.7. LastModified
LastModified l vi tr ca bn ghi va mi c sa i hay thm vo trong Recordset.
th iu ny chng ta hy thm mt button invisible tn CmdLastModified vi caption l
Last Modified. Button ny ch hin ra sau khi ngi s dng clicks Update.
Bt c lc no chng ta Click nt CmdLastModified, bn ghi mi va c sa i hay
thm vo s hin th:
Lp trnh trc quan

225
Private Sub CmdLastModified_Click()
' Reposition record to last position
myRS.BookMark = myRS.LastModified
' Redisplay details or current record
Displayrecord
End Sub
Di y l hnh ca Form lc ang c thit k:




Lp trnh trc quan

226
BI 24. LP TRNH VI ADO
24.1. Control Data ADO
Visual Basic 6 cho ta s la chn v k thut khi lp trnh vi database, hoc l dng DAO
nh trong hai bi trc, hoc l dng ADO (ActiveX Data Objects).
S khc bit chnh gia ADO v DAO l ADO cho php ta lm vic vi mi loi ngun d
kin (data sources), khng nht thit phi l Access database hay ODBC. Ngun d kin c
th l danh sch cc a ch Email, hay mt file text string, trong mi dng l mt bn ghi
gm nhng fields ngn cch bi cc du phy (comma separated values).
Nu trong DAO ta dng thng tn ca MSAccess Database th trong ADO cho ta ni vi
(connect) mt database qua mt Connection bng cch ch nh mt Connection String.
Trong Connection String c Database Provider (v d nh Jet, ISAM, Oracle,
SQLServer..v.v.), tn Database, UserName/Password logon mt database .v.v.. Sau ta
c th ly v (extract) nhng recordsets, v cp nht ha cc records bng cch dng nhng
lnh SQL trn cc tables hay dng nhng stored procedures bn trong database.
Bnh thng, khi ta mi khi ng mt project VB6 mi, Control Data ADO khng c sn
trong IDE. Mun c n, chng ta hy dng Menu Command Project | Components..., ri
chn Microsoft ADO Data Control 6.0 (OLEDB) t giao din Components nh di y:

Lp trnh trc quan

227
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.
Lp trnh trc quan

228

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 2-
Lp trnh trc quan

229
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:
Lp trnh trc quan

230

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.

Lp trnh trc quan

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

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

Lp trnh trc quan

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

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

Trong trang k chn Access lm Database Type.
Lp trnh trc quan

233

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.

Lp trnh trc quan

234
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).
Lp trnh trc quan

235

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

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

236
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
Lp trnh trc quan

237
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:
Lp trnh trc quan

238
Private WithEvents PrimaryCLS As clsTitles
Trong Form, Event MoveComplete s lm hin th v tr tuyt i (Absolute Position) ca
bn ghi bng code di y:
Private Sub PrimaryCLS_MoveComplete()
'This will hin th the current record position for this
recordset
lblStatus.Caption="Record: " & CStr(PrimaryCLS.AbsolutePosition)
End Sub
Khi ngi s dng clicks Refresh, cc textboxes s c hin th li vi chi tit mi nht
ca bn ghi t trong recordset, nh khi c ai khc sa i bn ghi. Method Requery ca
clsTitles li gi method Requery ca Recordset nh sau:
Private Sub cmdRefresh_Click()
'This is only needed for multi user applications
On Error GoTo RefreshErr
' fetch the latest copy of Recordset
PrimaryCLS.Requery
Exit Sub
RefreshErr:
MsgBox Err.Description
End Sub

'In Class clsTitles
Public Sub Requery()
' Fetch latest copy of record
adoPrimaryRS.Requery
DataMemberChanged "Primary"
End Sub
Lp trnh trc quan

239
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
Lp trnh trc quan

240
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
Lp trnh trc quan

241
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
Lp trnh trc quan

242
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
Lp trnh trc quan

243
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
Lp trnh trc quan

244
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

You might also like