You are on page 1of 158

Visual Basic

CHNG 1 TNG QUAN V VISUAL


BASIC 6.0

Mc tiu:
Chng ny gii thiu v mi trng pht trin tch hp (IDE) Microsoft
Visual Basic 6.0; cng nh gip sinh vin c ci nhn tng quan v Visual
Basic.
Hc xong chng ny, sinh vin phi nm bt c cc vn sau:
- S dng mi trng pht trin tch hp VB 6.0 pht trin ng dng.
- Cch to d n mi (New Project) trong VB 6.0.
Kin thc c lin quan:
- S dng h iu hnh Windows.
Ti liu tham kho:
- Visual Basic 6 Certification Exam Guide - Chapter 1, Page 1 - Dan
Mezick & Scot Hillier - McGraw-Hill - 1998.

Trang 1

Visual Basic

I. Gii thiu v Visual Basic 6.0


Visual Basic 6.0 (VB6) l mt phin bn ca b cng c lp trnh Visual Basic
(VB), cho php ngi dng tip cn nhanh cch thc lp trnh trn mi trng
Windows. Nhng ai tng quen thuc vi VB th tm thy VB6 nhng tnh nng
tr gip mi v cc cng c lp trnh hiu qu. Ngi dng mi lm quen vi VB cng
c th lm ch VB6 mt cch d dng.
Vi VB6, chng ta c th :
Khai thc th mnh ca cc iu khin m rng.
Lm vic vi cc iu khin mi (ngy thng vi iu khin MonthView v
DataTimePicker, cc thanh cng c c th di chuyn c CoolBar, s dng ha
vi ImageCombo, thanh cun FlatScrollBar,).
Lm vic vi cc tnh nng ngn ng mi.
Lm vic vi DHTML.
Lm vic vi c s d liu.
Cc b sung v lp trnh hng i tng.

II. Ci t Visual Basic 6.0


S dng chng trnh Setup, ngi dng c th ci t VB6 ln my tnh ca
mnh. Chng trnh Setup ny cn ci t cc tp tin cn thit xem ti liu trn a
CD MSDN (Microsoft Developer Network). Nu cn, ngi dng c th ci t ring
phn ti liu v v d mu ca Visual Basic ln my tnh.
ci t VB6, ngi dng nn kim tra my tnh ca mnh m bo c cu
hnh ti thiu. Cc yu cu h thng ti thiu :
- Microsoft Windows 95 tr ln hoc l Microsoft Windows NT Workstation
4.0 tr ln.
- Tc CPU 66 MHz tr ln.
- Mn hnh VGA hoc mn hnh c phn gii cao c h tr bi Microsoft
Windows.
- 16 MB RAM cho Microsoft Windows 95 hoc 32MB RAM cho Microsoft
Windows NT Workstation.

III. Lm quen vi VB6


III.1 Bt u mt d n mi vi VB6
T menu Start chn Programs, Microsoft Visual Basic 6.0. Khi bn s
thy mn hnh u tin nh hnh I.1 di y.

Trang 2

Visual Basic

Hnh I.1 Ca s khi kch hot VB6


Chn

y, ngi dng c th chn to mi mt d n


thc thi c bng cch chn Standard EXE ri
nhp Open (Hnh I.2).
Tip theo l ca s lm vic chnh ca VB6, gi tt
l IDE (Integrated Development Environment) s
c gii thiu chi tit trong phn sau.

III.2 Tm hiu cc thnh phn ca IDE


IDE l tn tt ca mi trng pht trin tch hp (Integrated
Development Environment), y l ni to ra cc chng trnh Visual Basic.
IDE ca Visual Basic l ni tp trung cc menu, thanh cng c v ca s
to ra chng trnh. Mi mt thnh phn ca IDE c cc tnh nng nh
hng n cc hot ng lp trnh khc nhau.

Trang 3

Visual Basic

Hnh I.3 Ca s IDE ca VB6

Thanh menu cho php bn tc ng cng nh qun l trc tip trn ton b
ng dng. Bn cnh thanh cng c cho php truy cp cc chc nng ca thanh
menu thng qua cc nt trn thanh cng c.
Cc biu mu (Form) - khi xy dng chng trnh chnh ca VB - xut
hin trong ca s Form. Hp cng c thm cc iu khin vo cc biu mu ca
n. Ca s Project Explorer hin th cc n khc nhau m ngi dng ang lm
cng nh cc phn ca n. Ngi dng duyt v ci t cc thuc tnh ca iu
khin, biu mu v module trong ca s Properties. Sau cng, ngi dng s xem xt
v b tr mt hoc nhiu biu mu trn mn hnh thng qua ca s Form Layout.

III.3 S dng thanh cng c trong IDE ca VB


Thanh cng c l tp hp cc nt bm mang biu tng thng t di
thanh menu. Cc nt ny m nhn cc chc nng thng dng ca thanh menu (New,
Open, Save ...).

Hnh I.4 Thanh cng c dng


standard
Trang 4

Visual Basic

Hnh I.5 Popup menu


thm, xa cng c

Hn na, ngi dng c th ko r thanh cng c trn


IDE n v tr bt k no thun tin cho vic s dng.
Ngi dng c th thm hay xa thanh cng c trn
IDE:
* Chn Toolbars t menu View hoc n chut phi
vo im bt k no trn thanh menu, mt popup menu bt
ra.
* Chn loi thanh cng c m ta mun thm vo hoc
xa i. Nu c nh du check bn tri th loi cng c
ang c chn.
S dng thanh cng c g ri (debug)

Hnh I.6 Thanh cng c g ri

Vi thanh cng c g ri, ngi dng


c th thc thi, tm ngng hoc dng mt
n. Vi thanh cng c Debug, ngi
dng c th kim tra chng trnh v gii
quyt cc li c th xy ra. Khi g ri
chng trnh, ngi dng c th chy
tng dng lnh, kim tra gi tr cc bin,
dng chng trnh ti mt im no
hoc vi mt iu kin no .

S dng thanh cng c Edit


Thanh cng c Edit c dng vit chng trnh trong ca s Code,
thanh cng c Edit c y cc tnh
nng ca menu Edit. Ngoi ra ngi
s dng c th s dng chc nng
vit chng trnh t ng nh l
Hnh I.7 Thanh cng c Edit
Quick Info.
Thanh cng c Edit ca VB6 c tnh nng l th l t hon tt cc t
kha. Tnh nng ny rt hu dng gip cho ngi dng trnh cc li mc phi do g
sai t kha.
S dng thanh cng c Form Editor

Hnh I.8 Thanh cng c thit k biu mu


Thanh cng c Form Editor c chc nng ging nh menu
Format dng di chuyn v sp xp cc iu khin trn biu mu.

Trang 5

Visual Basic

Trong qu trnh thit k biu mu, i khi chng ta phi s dng thuc
tnh ZOrder cho php mt iu khin c th thay th mt iu khin khc hay
khng hoc l xut hin bn trn mt iu khin khc hay khng.
S dng hp cng c (Toolbox)
Hp cng c l ni cha cc iu khin c dng trong qu trnh thit
k biu mu. Cc iu khin c chia lm hai loi: iu khin c sn trong VB v
cc iu khin c cha trong tp tin vi phn m rng l .OCX.
i vi cc iu khin c sn trong VB th ta khng th g b khi hp
cng c, trong khi i vi iu khin nm ngoi ta c thm hoc xa b khi hp
cng c.
Mt iu khin c th c a vo biu mu bng cch chn iu khin
v a vo biu mu. Chng ta s tr li phn ny trong chng tip theo khi thit
k cc biu mu.
Hnh I.9 Hp cng c ca Visual Basic

III.4 Qun l ng dng vi Project Explorer


Project Explorer trong VB6 gip qun l v nh hng nhiu n.VB cho
php nhm nhiu n trong cng mt nhm. Ngi dng c th lu tp hp cc n
trong VB thnh mt tp tin nhm n vi phn m rng .vbp.
Project Explorer c cu trc cy
phn cp nh cy th mc trong ca s
Explorer ca h iu hnh. Cc n c th
c coi l gc ca cy, cc thnh phn ca
n nh biu mu, module ... l cc nt ca cy.
Khi mun lm vic vi thnh phn no th ta
c th nhn p ln thnh phn trn ca s
Project Explorer vo ca s vit code cho
thnh phn .
Hnh I.10 Ca s Project Explorer
Khi lm vic vi mt d n ln,
chng ta s thy Project Explorer cc k hu
ch cho vic t chc v qun l mt d n ln.

III.5 Ca s Properties
Mi mt thnh phn, iu khin iu c
nhiu thuc tnh. Mi mt thuc tnh li c mt
hoc nhiu gi tr.
Ca s Properties cho php ngi dng xem,
sa i gi tr cc thuc tnh ca iu khin nhm
gip iu khin hot ng theo ng ca ngi
s dng.

Trang 6

Visual Basic

III.6 Ca s Form Layout


y chnh l ca s trnh by biu mu cho php nh v tr ca mt hoc nhiu
biu mu trn mn hnh khi chng trnh ng dng c thi hnh.
Ta nh v mot bieu mau tren man hnh bang cach dung chuot di chuyen bieu
mau trong ca so Form Layout.
S dng ca s Form Layout khng n
gin nh cc ca s khc v n khng c kch
hot sn, ngi dng cn phi chy ng dng sau
mi c th b tr c cc biu mu thng qua
Form Layout.
Nu ta khng nh v cc biu mu th v
tr ca biu mu trn mn hnh lc thit k cng l
v tr khi ng ca biu mu khi thc thi.

Hnh I.12 Ca s Form


III.7 Bin dch n thnh tp tin thc thi
L Sau khi
t n hon thnh, ngi dng c th bin dch thnh tp tin thc thi
c. Cch tin hnh nh sau:
- Trc tin ta cn ch cho VB6 bit phn chng trnh no s c thc
thi trc bng cch chn Project Properties t menu Project. Chn tab General, ch
phn Startup Object, y l ni quy nh im khi u ca chng trnh sau khi bin
dch kt thc.
- T menu File, chn Make ... EXE... Mt hp thoi xut hin cho php
bn nhp vo tn ca tp tin thc thi. Bn ch cn g tn tp tin, VB s t ng thm
phn m rng .EXE.
- Nhn vo nt Options m hp thoi Project Properties v in tn
ca ng dng vo Title, ta c th ghi ch thng tin cho tng phin bn trong phn
Version Information. Ta c th chn Auto Increment VB t ng tng s Revision
mi ln ta to li tp tin EXE cho d n.
- Cui cng, nhn OK tr v hp thoi Make Project.

Trang 7

Visual Basic

CHNG 2 BIU MU V MT S IU
KHIN THNG DNG
Mc tiu:
Chng ny gii thiu v mt s iu khin c bn to nn giao din
cho cc ng dng cng nh mt s khi nim trong lp trnh vi VB; nhng
yu cu ti thiu cn c trong vic lp trnh s kin vi VB.
Hc xong chng ny, sinh vin phi nm bt c cc vn sau:
- Khi nim v iu khin, thuc tnh, phng thc, s kin.
- Quy tc t tn danh biu trong VB.
- S dng biu mu trong thit k giao din.
- S dng iu khin nhp liu, nt nhn, nhn, khung.
Kin thc c lin quan:
- Cch thc s dng mi trng pht trin VB.
Ti liu tham kho:
- Microsoft Visual Basic 6.0 v Lp trnh C s d liu - Chng 2, trang
26; Chng 3, trang 29 - Nguyn Th Ngc Mai (ch bin), Nh xut bn Gio dc
- 2000.

Trang 8

Visual Basic

I. Cc khi nim
9 iu khin: Cc thnh phn c sn ngi lp trnh to giao din tng tc
vi ngi dng.
Mi iu khin thc cht l mt i tng, do vy n s c mt s im
c trng cho i tng, chng hn nh cc thuc tnh, cc phng thc & cc s
kin.
9 Thuc tnh: Cc c trng ca mt iu khin to nn dng v ca iu khin
.
9 Phng thc: Cc iu khin c th thc thi mt s tc v no , cc tc v
ny c nh ngha sn bn trong cc phng thc (cn gi l chng trnh con: hm
& th tc), ngi lp trnh c th gi thc thi cc phng thc ny nu cn.
9 S kin: l hnh ng ca ngi dng tc ng ln ng dng ang thc thi.
Th d:

- Nhn phm bt k trn bn phm.


- Nhp chut.

Cc thnh phn giao din c kh nng p ng li s kin. Chng hn khi chng


ta nhp chut vo button, lc button nhn bit c s kin ny; hay nh textbox
nhn bit c s kin bn phm tc ng ln n.
Mt ng dng trn Windows thng c thc hin nh vo vic p ng li
cc s kin ca ngi dng.
9 Lp trnh s kin:
Cc thnh phn giao din c kh nng nhn bit c cc s kin t pha ngi
dng. Tuy nhin kh nng p ng li cc s kin c thc hin bi ngi lp trnh.
Khi mt thnh phn giao din c s dng, ngi lp trnh phi xc nh chnh
xc hnh ng ca thnh phn giao din p ng li mt s kin c th. Lc
ngi lp trnh phi vit on m lnh m on m lnh ny s c thc thi khi s
kin xy ra.
Chng hn, trong ng dng Paint ca Windows; khi ngi s dng nhp chut
vo nt v hnh elip sau dng chut v n trn ca s v, mt hnh elip c v ra.
Trong lp trnh s kin, mt ng dng c xy dng l mt chui cc p ng
li s kin. Tt c cc hnh ng ca ng dng l p ng li cc s kin. Do vy
ngi lp trnh cn phi xc nh cc hnh ng cn thit ca ng dng; phn loi
chng; sau vit cc on m lnh tng ng.
Th d v p ng li s kin:
M lnh
- M lnh cho s kin Click ca Ghi a.
--------------------------------------------------------------------------------------------------- M lnh cho s kin Click ca In giy
---------------------------------------------------------------------------------------------------

Hnh II.1: Th d v p ng s kin


Trang 9

Visual Basic

- Khi ngi dng khng tc ng vo ng dng, ng dng khng lm g c.


- Khi ngi dng nhp d liu vo cc nhp H v tn, a ch; s kin bn
phm xy ra trn cc nhp. Tuy nhin, ng dng vn khng lm g c v khng c
on m lnh no p ng cc s kin ny.
- Khi ngi dng nhp nt chn Ghi a, ng dng tm kim trong m lnh ca
mnh thy c on m lnh p ng li s kin ny; lc on m lnh c thc thi.
- Tng t nh vy i vi nt chn In giy.
9 Cch xc lp cc thuc tnh & cc phng thc trong chng trnh
<Thuc tnh Name ca iu khin>.<Tn thuc tnh>
<Thuc tnh Name ca iu khin>.<Tn phng thc>[(<Cc tham s>)]
9 Tn iu khin (thuc tnh Name)
y l thuc tnh xc nh tn ca iu khin trong ng dng. Tn ny c
t theo quy tc:
o Tn c th di t 1 - 40 k t.
o Tn phi bt u vi k t ch, c th ch hoa hay thng.
o Sau k t u tin, tn c th cha k t, s hay du gch di.
V d: Num, StudentCode, Class12A2 l nhng tn hp l. 345, 7yu l nhg
tn khng hp l.

II. Biu mu (Form)


II.1. Khi nim:
Chng trnh ng dng giao tip vi ngi dng thng qua cc biu mu
(hay cn gi l ca s, xut pht t ch Form hay Windows); cc iu khin (Control)
c t ln bn trn gip cho biu mu thc hin c cng vic .
Biu mu l cc ca s c lp trnh nhm hin th d liu v nhn thng
tin t pha ngi dng.

II.2. Thuc tnh


o Name: thuc tnh ny nh l mt nh danh nhm xc nh tn ca biu
mu l g? Ta s s dng thuc tnh ny truy xut n cc thuc tnh khc cng vi
phng thc c th thao tc c trn biu mu.
o Caption: chui hin th trn thanh tiu ca biu mu.

o Icon: hnh icon c dng trong thanh tiu ca biu mu, nht l khi
biu mu thu nh li.

o WindowState: xc nh biu mu s c kch thc bnh thng


(Normal=0), hay Minimized (=1), Maximized =(2).

Trang 10

Visual Basic

o Font: xc lp Font cho biu mu. Thuc tnh ny s c cc iu khin

nm trn n tha k. Tc l khi ta t mt iu khin ln biu mu, thuc tnh Font ca


iu khin y s t ng tr nn ging y ca biu mu.

o BorderStyle: xc nh dng ca biu mu.


II.3. Phng thc
o Move: di chuyn biu mu n ta X,Y: Move X, Y.

II.4. S kin
o Form_Initialize: S kin ny xy ra trc nht v ch mt ln thi khi ta

to ra th hin u tin ca biu mu. Ta dng s kin Form_Initialize thc hin


nhng g cn phi lm chung cho tt c cc th hin ca biu mu ny.

o Form_Load: S kin ny xy ra mi ln ta gi th hin mt biu mu.

Nu ta ch dng mt th hin duy nht ca mt biu mu trong chng trnh th


Form_Load coi nh tng ng vi Form_Initialize.

Ta dng s kin Form_Load khi to cc bin, iu khin cho cc th


hin ca biu mu ny.

o Form_Activate: Mi ln mt biu mu c kch hot (active) th mt s

kin Activate pht sinh. Ta thng dng s kin ny cp nht li gi tr cc iu


khin trn biu mu.

Form_QueryUnload: Khi ngi s dng chng trnh nhp chut vo


nt X pha trn bn phi ng biu mu th mt s kin QueryUnload c sinh ra.
on chng trnh con di y m t th tc x l s kin QueryUnload.
Private Sub Form_QueryUnload(Cancel As Integer, _
UnloadMode As Integer)
End Sub

S kin ny cho ta kh nng hy b hnh ng ng biu mu bng cch


t li Cancel l 1.

Form_Resize: S kin ny xy ra mi khi biu mu thay i kch thc.

III. Nhn (Label)


III.1. Khi nim:
Nhn l iu khin dng ha cho php ngi s dng hin th chui k t
trn biu mu nhng h khng th thay i chui k t mt cch trc tip.
Biu tng (shortcut) trn hp cng c:

III.2. Thuc tnh:


o Name: y l mt tn xc nh mt nh danh, ngi lp trnh c th thay
i tn ny theo cch ca mnh tin s dng.

Trang 11

Visual Basic

o Caption: Thuc tnh quy nh chui k t hin th khi ta to mt iu


khin nhn. Khi ta to mi mt iu khin th thuc tnh Caption c gi tr mc nhin
l Label.
V d: Ta mun to mt nhn l Cho mng bn n vi Visual Basic,
ta thay i gi tr ca thuc tnh Caption thnh Cho mng bn n vi Visual Basic.
Ta c th thay i gi tr ca thuc tnh Caption ti thi im ng dng
ang chy nh vo on m lnh n gin nh sau:
L1.Caption = " i gi tr Caption" vi L1 l tn ca
iu khin nhn m ta mun i.
o Font, Fore Color: Quy nh kiu ch, kch thc, mu hin th.
o BackStyle, BackColor: BackStyle quy nh l nhn trong sut hay khng.
BackColor quy nh mu nn ca nhn trong trng hp khng trong sut.

III.3. Phng thc:


o Move: di chuyn nhn n ta X,Y: Move X, Y.

III.4. S kin:
o Change: Xy ra mi khi nhn thay i gi tr.
o Click: Mi khi nhn c chut nhp ln, s kin ny xy ra.
o DblClick: Xy ra khi ngi s dng nhp p chut ln iu khin nhn.

IV. Khung (Frame)


IV.1. Khi nim:
Khung l mt iu khin dng trong vic b tr giao din ca biu mu mt
cch trong sng v r nt. Thng thng cc iu khin cng phc v cho mt cng
vic no s c t trong mt khung nhm lm ni bt vai tr ca chng.
Biu tng (shortcut) trn hp cng c:
Khi chng ta to mi mt khung cha cc iu khin khc, ta c hai cch
thc hin:
- To khung cha trc, sau a cc iu khin vo trong khung
cha. y l cch n gin nht.
- To khung cha sau khi to mi cc iu khin, khi khung
cha s che mt cc iu khin, v vy ta cn phi a khung cha ra sau cc
iu khin bng cch nhp chut phi v chn Send to Back. Nhng i vi
cch ny, cc iu khin khc khng nm trn khung cha. Do vy ta c th gii
quyt bng cch ct (Cut) cc iu khin ny i, sau dn (Paste) vo trong
khung cha.

Trang 12

Visual Basic

Hnh II.2 V d v khung cha


(Frame)

IV.2. Thuc tnh:


Khung cng c cc thuc tnh thng dng nh ca iu khin nhn chng hn nh:
Name, Caption,...

IV.3. Phng thc:


o Move: di chuyn khung n ta X,Y: Move X, Y.

IV.4. S kin:
o Click, DblClick: xy ra khi khung nhn c mt thao tc nhp (nhp
p) chut.

V. Nt lnh (Command Button)


V.1. Khi nim:
Nt lnh l mt iu khin dng bt u, ngt hoc kt thc mt qu
trnh. Khi nt lnh c chn th n trng nh c nhn xung, do nt lnh cn
c gi l nt nhn (Push Button). Ngi s dng lun c th chn mt nt lnh no
bng cch nhn chut trn nt lnh .
Biu tng (shortcut) trn hp cng c:

V.2. Thuc tnh:


o Name: s dng nh mt nh danh nhm xc nh tn ca nt lnh.
o Caption: Dng hin th mt chui no trn nt lnh.
o Default: Nu gi tr ca thuc tnh ny l True th ta c th chn nt lnh
bng cch nhn phm Enter.
o Cancel: Nu gi tr ca thuc tnh ny l True th ta c th chn nt lnh
no bng cch nhn phm ESC.
o Enabled: Trong mt biu mu, c th c nhiu nt lnh thc hin
nhiu cng vic khc nhau v ti mt thi im no ta ch c php thc hin mt
s cng vic. Nu gi tr thuc tnh Enabled l False th nt lnh khng c tc dng.
Gi tr mc nh ca thuc tnh ny l True. Ta c th thay i gi tr ca thuc tnh ti
thi im chy ng dng.
Trang 13

Visual Basic

o ToolTipText: cho php hin th mt on vn bn ch thch cng dng


ca nt lnh khi ngi s dng dng chut r trn nt nhn.
o Font, Fore Color: Quy nh kiu ch, kch thc, mu hin th.

V.3. Phng thc


o Move: di chuyn nt lnh n ta X,Y: Move X, Y.

V.4. Phng thc


o Click: y l s kin thng xy ra vi nt lnh. Mi khi mt nt lnh
c chn, s kin ny c kch hot. Do , ngi s dng s vit m cc lnh
p ng li s kin ny.
V d: To mt biu mu c mt nhp liu vi nhn l h tn v mt
nt lnh cho php a ra cu cho ngi dng .
Private Sub Command1_Click()
MsgBox "Chao mung ban " & Text1.Text & _
" lam quen voi Visual Basic"
End Sub

Click here
Hnh II.3 S dng nt lnh

VI. nhp liu (TextBox)


VI.1. Khi nim:
nhp liu l mt iu khin cho php nhn thng tin do ngi dng nhp
vo. i vi nhp liu ta cng c th dng hin th thng tin, thng tin ny c
a vo ti thi im thit k hay thm ch thi im thc thi ng dng. Cn thao tc
nhn thng tin do ngi dng nhp vo d nhin l c thc hin ti thi im chy
ng dng.
Biu tng (shortcut) trn hp cng c

VI.2. Thuc tnh:


o Name: y l tn ca nhp liu, c s dng nh mt nh danh.
o MaxLength: Thuc tnh quy nh s k t ti a c th nhp vo nhp
liu. Nu s k t nhp vo vt qu s k t ti a th ch c ng s k t ti a
c ghi nhn vo trong thuc tnh Text.
Trang 14

Visual Basic

o Text: Dng nhp vo thng tin cn hin th trong Textbox ti thi


im thit k hoc nhn gi tr do ngi dng nhp vo ti thi im chy ng dng.
V d:
MsgBox Text1.Text

on m ny vit trong s kin Click ca nt lnh OK. Cho php hp


thng bo hin th ni dung do ngi dng nhp vo nhp liu.

Hnh II.3 V d v iu
khin nhp liu

o Locked: Thuc tnh cho php ngi dng thay i ni dung ca nhp
liu c hay khng? Thuc tnh ny c th nhn 2 gi tr True hoc False. Nu False
th ngi dng c th thay i ni dung ca nhp liu & mc nh th thuc tnh ny
c gi tr l False.
o PasswordChar: Thuc tnh ny quy nh cch hin th thng tin do
ngi dng nhp vo. Chng hn, nu ta nhp vo gi tr thuc tnh ny l * th cc k
t nhp vo iu hin th bi du * . Thuc tnh ny thng c dng trong trng
hp thng tin nhp vo cn c che giu (V d mt khu ng nhp mt chng
trnh ng dng no m trong cc ngi dng khc nhau th c cc quyn khc
nhau).
o Multiline: Thuc tnh quy nh nhp liu c c hin th thng tin
di dng nhiu hng hay khng, nu l TRUE th nhp liu cho php nhiu hng.
o Font, Fore Color: Quy nh kiu ch, kch thc, mu hin th.
o SelLength:Cho php tr v hoc t trc s lng k t c chn
trong nhp liu.
o SelStart: Tr v hoc xc nh im bt u ca chui c chn. y
l v tr bt u chn mt chui mi trong trng hp khng c nh du chn chui.
o SelText: Tr v hoc xc nh chui k t c nh du chn, chi tr
v s l rng nu nh khng nh du chn chui no.
Ba thuc tnh SelLength, SelStart, SelText ch c tc dng ti thi im
chy ng dng.

VI.3. Phng thc


o Move: Di chuyn nhp liu n ta X, Y: Move X, Y.

Trang 15

Visual Basic

o SetFocus: Phng thc ny nhm mc ch thit lp cho iu khin


nhp liu nhn c Focus, ngha l n sn sng c tng tc bi ngi
s dng.

VI.4. S kin:
o KeyPress: xy ra khi ngi s dng chng trnh nhn mt phm. i
vi iu khin TextBox, ta thng dng n lc (filter out) cc phm khng chp
nhn. S kin KeyPress cho ta mt m Ascii, mt s c gi tr t 0 n 255, ca phm
va nhn. Trong v d di y, TextBox Text1 s ch nhn bit cc phm l s (0 - 9),
khng nhn bit cc phm khc:
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii < 48 Or KeyAscii > 57 Then M Ascii ca 0 l 48, ca 9 l 57
KeyAscii = 0
End If
End Sub

o KeyDown, KeyUp: mi s kin KeyPress li cho ta mt cp s kin


KeyDown/KeyUp. S kin KeyDown/KeyUp c 2 tham s l KeyCode v Shift. S
kin ny cho php ta nhn bit c cc phm c bit trn bn phm. Trong v d di
y, ta hin th tn cc phm chc nng m ngi s dng chng trnh nhn vo:
Private Sub Text3_KeyDown(KeyCode As Integer, Shift As Integer)
If (KeyCode >= 112) And (KeyCode <= 123) Then
MsgBox "Ban vua nhan phim chuc nang: F" & _
Trim(Str(KeyCode - 111))
End If
End Sub

CHNG 3: LP TRNH CU TRC TRONG


VISUAL BASIC
Mc tiu:
Chng ny gii thiu v cc cu trc lp trnh trong VB; y l cc cu
trc ct li xy dng nn mt chng trnh VB.
Hc xong chng ny, sinh vin phi nm bt c cc vn sau:
- S dng mi trng lp trnh VB vit m lnh.
- Cc kiu d liu trong VB.
- Cch khai bo hng, bin trong VB.
- Biu thc trong VB.
- Cc cu lnh n cng nh cc cu lnh c cu trc.
- Chng trnh con trong VB.
- By li trong VB.
Kin thc c lin quan:
- Cch s dng mi trng pht trin ca VB.
Trang 16

Visual Basic

Ti liu tham kho:


- Microsoft Visual Basic 6.0 v Lp trnh C s d liu - Chng 4, trang
49 - Nguyn Th Ngc Mai (ch bin), Nh xut bn Gio dc - 2000.

Trang 17

Visual Basic

I. Mi trng lp trnh
I.1. Son tho chng trnh:
Trong Visual Basic IDE, ca s m lnh (Code) cho php son tho chng
trnh. Ca s ny c mt s chc nng ni bt:
o nh du (Bookmarks): Chc nng ny cho php nh du cc dng lnh
ca chng trnh trong ca s m lnh d dng xem li v sau ny. bt tt kh
nng ny, chn Bookmarks t menu Edit, hoc chn t thanh cng c Edit.
o Cc phm tt trong ca s m lnh:
Chc nang
Xem ca s Code
Xem ca s Object Browser
Tm kim
Thay th
Tm tip
Tm ngc
Chuyn n th tc k tip
Chuyn n th tc trc
Xem nh ngha
Cun xung mt mn hnh
Cun ln mt mn hnh
Nhy v v tr trc
Tr v u ca m-un
n cui m-un

Phm tat
F7
F2
CTRL+F
CTRL+H
SHIFT+F4
SHIFT+F3
CTRL+DOWN ARROW
CTRL+UP ARROW
SHIFT+F2
CTRL+PAGE DOWN
CTRL+PAGE UP
CTRL+SHIFT+F2
CTRL+HOME
CTRL+END

I.2. Cc chc nng t ng:


o T ng kim tra c php (Auto Syntax Check)
Nu chc nng ny khng c bt th khi ta vit mt dng m c cha
li, VB ch hin th dng chng trnh sai vi mu nhng khng km theo ch thch
g v tt nhin ta c th vit tip cc dng lnh khc. Cn khi chc nng ny c bt,
VB s cho ta bit mt s thng tin v li v hin th con tr ngay dng chng trnh li
ch ta sa.
o Yu cu khai bo bin (Require Variable Declaration)
VB s thng bo li khi mt bin c dng m khng khai bo v s ch
ra v tr ca bin .

Trang 18

Visual Basic

Hnh III.1: Ca s Options


o Gi nh m lnh (Code):
Kh nng Auto List Members: T ng hin th danh sch cc thuc tnh
v phng thc ca 1 iu khin hay mt i tng khi ta g vo tn ca chng. Chn
thuc tnh hay phng thc cn thao tc v nhn phm Tab hoc Space a n vo
chng trnh.

Hnh III.2 Ca s Code vi kh nng gi nh Code

II. Kiu d liu


II.1. Khi nim
Kiu d liu l mt tp hp cc gi tr m mt bin ca kiu c th nhn v mt
tp hp cc php ton c th p dng trn cc gi tr .
Trang 19

Visual Basic

II.2. Cc kiu d liu c s trong Visual Basic

Kiu d liu

M t

Boolean

Gm 2 gi tr: TRUE & FALSE.

Byte

Cc gi tr s nguyn t 0 255

Integer

Cc gi tr s nguyn t -32768 32767

Long

Cc gi tr s nguyn t -2147483648 2147483647. Kiu d


liu ny thng c gi l s nguyn di.

Single

Cc gi tr s thc t -3.402823E+38 3.402823E+38. Kiu d


liu ny cn c gi l chnh xc n.

Double

Cc gi tr s thc t -1.79769313486232E+308 1.79769313486232E+308. Kiu d liu ny c gi l chnh


xc kp.

Currency

D liu tin t cha cc gi tr s t -922.337.203.685.477,5808 922.337.203.685.477,5807.

String

Chui d liu t 0 n 65.500 k t hay k s, thm ch l cc


gi tr c bit nh ^%@. Gi tr kiu chui c t gia 2 du
ngoc kp ().

Date

D liu kiu ngy thng, gi tr c t gia cp du ##. Vic


nh dng hin th ty thuc vo vic thit lp trong Control
Panel.

Variant

Cha mi gi tr ca cc kiu d liu khc, k c mng.

III. Hng s
III.1. Khi nim
Hng s (Constant) l gi tr d liu khng thay i.

III.2. Khai bo hng


[Public|Private] Const <tn hng> [As <kiu d liu>] = <biu thc>
Trong , tn hng c t ging theo quy tc t tn ca iu khin.
V d:
Const g = 9.8
Const Num As Integer = 4*5
Ta c th dng ca s Object Browser xem danh sch cc hng c sn ca
VB v VBA (Visual Basic for Application).
Trng hp trng tn hng trong nhng th vin khc nhau, ta c th ch r
tham chiu hng.
Trang 20

Visual Basic

[<Libname>.][<tn m-un>.] <tn hng>

III) Bin
III.1. Khi nim
Bin (Variable) l vng lu tr c t tn cha d liu tm thi trong qu
trnh tnh ton, so snh v cc cng vic khc.
Bin c 2 c im:
o Mi bin c mt tn.
o Mi bin c th cha duy nht mt loi d liu.

III.2. Khai bo
[Public|Private|Static|Dim] <tn bin> [ As <kiu d liu> ]
Trong , tn bin: l mt tn c t ging quy tc t tn iu khin. Nu
cn khai bo nhiu bin trn mt dng th mi khai bo cch nhau du phy (,).
Nu khai bo bin khng xc nh kiu d liu th bin c kiu Variant.
Khai bo ngm: y l hnh thc khng cn phi khai bo mt bin trc khi
s dng. Cch dng ny c v thun tin nhng s gy mt s sai st, chng hn khi ta
nh nhm tn bin, VB s hiu l mt bin mi dn n kt qu chng trnh sai
m rt kh pht hin.
V d:
Dim Num As Long, a As Single
Dim Age As Integer
Khai bo tng minh: trnh rc ri nh nu trn, ta nn quy nh rng
VB s bo li khi gp bin cha c khai bo bng dng lnh:
Option Explicit trong phn Declaration (khai bo) ca m-un.
Option Explicit ch c tc dng trn tng m-un do ta phi t dng
lnh ny trong tng m-un ca biu mu, m-un lp hay m-un chun.

IV. Biu thc


IV.1. Khi nim
Ton t hay php ton (Operator): l t hay k hiu nhm thc hin php tnh
v x l d liu.
Ton hng: l gi tr d liu (bin, hng).
Biu thc: l tp hp cc ton hng v cc ton t kt hp li vi nhau theo quy
tc nht nh tnh ton ra mt gi tr no .

IV.2. Cc loi php ton


a. Cc php ton s hc: Thao tc trn cc gi tr c kiu d liu s.

Trang 21

Visual Basic

Php
ngha
Kiu ca i s
Kiu ca kt qu
ton
Php ly s i
Kiu s (Integer, Single) Nh kiu i s
+
Php cng hai s
Kiu s (Integer, Single) Nh kiu i s
Php tr hai s
Kiu s (Integer, Single) Nh kiu i s
*
Php nhn hai s
Kiu s (Integer, Single) Nh kiu i s
/
Php chia hai s
Kiu s (Integer, Single) Single hay Double
\
Php chia ly phn nguyn Integer, Long
Integer, Long
Mod Php chia ly phn d
Integer, Long
Integer, Long
^
Tnh ly tha
Kiu s (Integer, Single) Nh kiu i s
b. Cc php ton quan h
y l cc php ton m gi tr tr v ca chng l mt gi tr kiu
Boolean (TRUE hay FALSE).
Php ton
ngha
So snh bng nhau
=
<>
So snh khc nhau
>
So snh ln hn
<
So snh nh hn
>=
So snh ln hn hoc bng
<=
So snh nh hn hoc bng
c. Cc php ton Logic: l cc php ton tc ng trn kiu Boolean v cho kt
qu l kiu Boolean. Cc php ton ny bao gm AND (v), OR (hoc), NOT (ph
nh). Sau y l bng gi tr ca cc php ton:
X
Y
X AND Y
X OR Y
NOT X
TRUE
TRUE TRUE
TRUE
FALSE
TRUE
FALSE FALSE
TRUE
FALSE
FALSE TRUE FALSE
TRUE
TRUE
FALSE FALSE FALSE
FALSE
TRUE

V. Cu lnh
Mt cu lnh (statement) xc nh mt cng vic m chng trnh phi thc
hin x l d liu c m t v khai bo. Cc cu lnh c ngn cch vi
nhau bi k t xung dng. K t xung dng bo hiu kt thc mt cu lnh.

V.1. Lnh gn
C php:
<Tn bin> = <Biu thc>
V d:
Gi s ta c khai bo sau:
Dim TodayTemp As Single, MinAge As Integer
Dim Sales As Single, NewSales As Single, FullName As String

Cc lnh sau gn gi tr cho cc bin trn:


Trang 22

Visual Basic
TodayTemp = 30.5
MinAge = 18
Sales = 200000
NewSales = Sales * 1.2

Gi s ngi dng cn nhp h v tn vo nhp liu TextBox c thuc tnh


Name l txtName, cu lnh di y s lu gi tr ca nhp liu vo trong
bin FullName:
FullName = txtName.Text

Lu : Kiu d liu ca biu thc (v phi ca lnh gn) phi ph hp vi bin


ta cn gn tr.

V.2. Lnh r nhnh If


o Mt dng lnh:
If <iu kin> Then <dng lnh>
o Nhiu dng lnh:
If <iu kin> Then
Cc dng lnh
End If
K

Lu c php:

Sai

ng
Cc dng lnh

Trong , <iu kin>: biu thc m kt qu tr v kiu Boolean.


ngha cu lnh: Cc dng lnh hay dng lnh s c thi hnh nu nh
iu kin l ng. Cn nu nh iu kin l sai th cu lnh tip theo sau cu trc If ...
Then c thi hnh.
o Dng y : If ... Then ... Else
If <iu kin 1> Then
[Khi lnh 1]
ElseIf <iu kin 2> Then
[Khi lnh 2]...
[Else
[Khi lnh n]]
End If

Trang 23

Visual Basic

VB s kim tra cc iu kin, nu iu kin no ng th khi lnh tng


ng s c thi hnh. Ngc li nu khng c iu kin no ng th khi lnh sau t
kha Else s c thi hnh.
V d:
If (TheColorYouLike = vbRed) Then
MsgBox "You are a lucky person"
ElseIf (TheColorYouLike = vbGreen) Then
MsgBox "You are a hopeful person"
ElseIf (TheColorYouLike = vbBlue) Then
MsgBox "You are a brave person"
ElseIf (TheColorYouLike = vbMagenta) Then
MsgBox "You are a sad person"
Else
MsgBox "You are an average person"
End If

V.3. Lnh la chn Select Case


Trong trng hp c qu nhiu cc iu kin cn phi kim tra, nu ta dng cu
trc r nhnh IfThen th on lnh khng c trong sng, kh kim tra, sa i khi
c sai st. Ngc li vi cu trc SelectCase, biu thc iu kin s c tnh ton
mt ln vo u cu trc, sau VB s so snh kt qu vi tng trng hp (Case).
Nu bng n thi hnh khi lnh trong trng hp (Case) .
Select Case <biu thc kim tra>
Case <Danh sch kt qu biu thc 1>
[Khi lnh 1]
Case <Danh sch kt qu biu thc 2>
[Khi lnh 2]
.
.
.
[Case Else
[Khi lnh n]]
End Select
Mi danh sch kt qu biu thc s cha mt hoc nhiu gi tr. Trong trng
hp c nhiu gi tr th mi gi tr cch nhau bi du phy (,). Nu c nhiu Case cng
tha iu kin th khi lnh ca Case u tin s c thc hin.
V d ca lnh r nhnh IfThen trn c th vit nh sau:
Select Case TheColorYouLike
Case vbRed
MsgBox "You are a lucky person"
Case vbGreen
MsgBox "You are a hopeful person"
Case vbBlue
MsgBox "You are a brave person"
Case vbMagenta
MsgBox "You are a sad person"
Case Else

Trang 24

Visual Basic
MsgBox "You are an average person"
End Select

Ton t Is & To
Ton t Is: c dng so snh <Biu thc kim tra> vi mt biu thc no
.
Ton t To: Dng xc lp min gi tr ca <Biu thc kim tra>.
V d:
Select Case Tuoi
Case Is <18
MsgBox Vi thanh nien
Case 18 To 30
MsgBox Ban da truong thanh, lo lap than di
Case 31 To 60
MsgBox Ban dang o lua tuoi trung nien
Case Else
MsgBox Ban da lon tuoi, nghi huu duoc roi day!
End Select

Lu : Trong v d trn khng th vit Case Tuoi < 18.

V.4. Cu trc lp
Cc cu trc lp cho php thi hnh mt khi lnh no nhiu ln.
a. Lp khng bit trc s ln lp
Do ... Loop: y l cu trc lp khng xc nh trc s ln lp, trong ,
s ln lp s c quyt nh bi mt biu thc iu kin. Biu thc iu kin phi c
kt qu l True hoc False. Cu trc ny c 4 kiu:
Kiu 1:
Do While <iu kin>
<khi lnh>
kin
Loop
ng
Sai
Khi lnh
Khi lnh s c thi hnh n khi no iu kin khng cn ng na.
Do biu thc iu kin c kim tra trc khi thi hnh khi lnh, do c th khi
lnh s khng c thc hin mt ln no c.
Kiu 2:
Do
<khi lnh>
Loop While <iu kin>

Trang 25

Visual Basic

Khi lnh s c thc hin, sau biu thc iu kin c kim tra,
nu iu kin cn ng th, khi lnh s c thc hin tip tc. Do biu thc iu
kin c kim tra sau, do khi lnh s c thc hin t nht mt ln.
Kiu 3:
Do Until <iu kin>
<khi lnh>
Loop
Cng tng t nh cu trc Do While ... Loop nhng khc bit ch l
khi lnh s c thi hnh khi iu kin cn sai.
Kiu 4:
Do
<khi lnh>
Loop Until <iu kin>
Khi lnh c thi hnh trong khi iu kin cn sai v c t nht l mt
ln lp.
V d: on lnh di y cho php kim tra mt s nguyn N c phi
l s nguyn t hay khng?
Dim i As Integer
i = 2
Do While (i <= Sqr(N))
i = i + 1
Loop
If (i > Sqr(N)) And (N
MsgBox Str(N) &
Else
MsgBox Str(N) &
End If

And (N Mod i = 0)
<> 1) Then
la so nguyen to
khong la so nguyen to

Trong , hm Sqr: hm tnh cn bc hai ca mt s


b. Lp bit trc s ln lp
9 For ... Next
y l cu trc bit trc s ln lp, ta dng bin m tng dn hoc
gim dn xc nh s ln lp.
For <bin m> = <im u> To <im cui> [Step <bc nhy>]
[khi lnh]
Next
Bin m, im u, im cui, bc nhy l nhng gi tr s (Integer,
Single,). Bc nhy c th l m hoc dng. Nu bc nhy l s m th im u
phi ln hn im cui, nu khng khi lnh s khng c thi hnh.
Khi Step khng c ch ra, VB s dng bc nhy mc nh l mt.
V d: on lnh sau y s hin th cc kiu ch hin c ca my bn.
Private Sub
Dim i

Form_Click( )
As
Integer

Trang 26

Visual Basic
For

End

i = 0 To Screen.FontCount
MsgBox Screen.Fonts(I)

Next
Sub

V d: Tnh N!
o Bc 1: Thit k chng trnh c giao din:

TextBox:
Name:txtNum

Label: Name: lblKQ

o Bc 2: S kin Command1_Click c x l:
Private Sub Command1_Click()
Dim i As Integer, n As Integer, Kq As Long
n = Val(txtNum.Text)
Kq = 1
For i = 1 To n
Kq = Kq * i
Next
lblKQ.Caption = Str(Kq)
End Sub

o Lu d n v chy chng trnh ta c kt qu nh hnh di:

9 For Each ... Next


Tng t vng lp For ... Next, nhng n lp khi lnh theo s phn
t ca mt tp cc i tng hay mt mng thay v theo s ln lp xc nh. Vng lp
ny tin li khi ta khng bit chnh xc bao nhiu phn t trong tp hp.
For Each <phn t> In <nhm>
<khi lnh>
Next <phn t>
Lu :
- Phn t trong tp hp ch c th l bin Variant, bin Object, hoc mt
i tng trong Object Browser.
- Phn t trong mng ch c th l bin Variant.
Trang 27

Visual Basic

- Khng dng For Each ... Next vi mng cha kiu t nh ngha v
Variant khng cha kiu t nh ngha.

VI. Chng trnh con


VI.1. Khi nim
Trong nhng chng trnh ln, c th c nhng on chng trnh vit lp i
lp li nhiu ln, trnh rm r v mt thi gian khi vit chng trnh ngi ta
thng phn chia chng trnh thnh nhiu module, mi module gii quyt mt cng
vic no . Cc module nh vy gi l cc chng trnh con.
Mt tin li khc ca vic s dng chng trnh con l ta c th d dng kim
tra xc nh tnh ng n ca n trc khi rp ni vo chng trnh chnh v do
vic xc nh sai st tin hnh hiu nh trong chng trnh chnh s thun li hn.
Trong Visual Basic, chng trnh con c hai dng l hm (Function) v th tc
(Sub).
Hm khc th tc ch hm tr v cho lnh gi mt gi tr thng qua tn ca n
cn th tc th khng. Do vy ta ch dng hm khi v ch khi tho mn ng thi cc
yu cu sau y:
o Ta mun nhn li mt kt qu (ch mt m thi) khi gi chng trnh con.
o Ta cn dng tn chng trnh con (c cha kt qu) vit trong cc biu
thc.
Nu khng tha mn hai iu kin y th dng th tc.

VI.2. Th tc
a. Khi nim:
Th tc l mt chng trnh con thc hin mt hay mt s tc v no .
Th tc c th c hay khng c tham s.
b. Khai bo th tc
[Private | Public] [Static] Sub <tn th tc> [(<tham s>[As <Kiu tham s>])]
<Cc dng lnh> hay <Cc khai bo>
End Sub
Trong :
- <Tn th tc>: y l mt tn c t ging quy tc tn bin, hng,
- <tham s>[: <Kiu tham s>]: c th c hay khng? Nu c nhiu tham
s th mi tham s phn cch nhau du phy. Nu khng xc nh kiu tham s th
tham s c kiu Variant.
gi th tc thc thi, ta c 2 cch:
o <Tn th tc> [<Cc tham s thc t>]
o Call <Tn th tc> ([<Cc tham s thc t>])

Trang 28

Visual Basic

V d: Thit k chng trnh kim tra xem s nguyn N c phi l s nguyn t


hay khng?
o Bc 1: Thit k chng trnh c giao din

TextBox:
Name:txtNum

o Bc 2: Vit th tc KtraNgTo trong phn m lnh ca Form


Sub KTraNgTo(N As Integer)
Dim i As Integer
i = 2
Do While (i <= Sqr(N)) And (N Mod i <> 0)
i = i + 1
Loop
If (i > Sqr(N)) And (N <> 1) Then
MsgBox Str(N) & " la so nguyen to"
Else
MsgBox Str(N) & " khong la so nguyen to"
End If
End Sub

o Bc 3: X l s kin Command1_Click; trong th tc x l s kin ny ta


c gi th tc KtraNgTo nh sau:
Private Sub Command1_Click()
KTraNgTo Val(txtNum.Text)
Call KtraNgTo(Val(txtNum.Text))
End Sub

o Bc 4: Lu d n v chy chng trnh. Ta c kt qu sau:

Trong v d trn thay v gi th tc bng li gi:


KTraNgTo Val(txtNum.Text)

Ta c th s dng cch khc:


Call KtraNgTo(Val(txtNum.Text))

Trang 29

Visual Basic

VI.3. Hm
a. Khi nim
Hm (Function) l mt chng trnh con c nhim v tnh ton v cho ta
mt kt qu. Kt qu ny c tr v trong tn hm cho li gi n.
b. Khai bo hm
[Private | Public | Static] Function <Tn hm> [(<tham s>[As <Kiu tham s>])] _
[As <KIU D LIU>]
<Cc dng lnh> hay <Cc khai bo>
End Function
Trong :
- <Tn hm>: y l mt tn c t ging quy tc tn bin, hng,
- <tham s>[: <Kiu tham s>]: c th c hay khng? Nu c nhiu tham
s th mi tham s phn cch nhau du phy. Nu khng xc nh kiu tham s th
tham s c kiu Variant.
- <KIU D LIU>: Kt qu tr v ca hm, trong trng hp khng
khai bo As <kiu d liu>, mc nh, VB hiu kiu tr v kiu Variant.
Khi gi hm thc thi ta nhn c mt kt qu. Cn ch khi gi hm thc
thi ta nhn c mt kt qu c kiu chnh l kiu tr v ca hm (hay l kiu Variant
nu ta khng ch r kiu tr v trong nh ngha hm). Do li gi hm phi l thnh
phn ca mt biu thc.
C php gi hm thc thi: <Tn hm>[(tham s)].
V d: Tnh N!
o Bc 1: Thit k chng trnh c giao din:
TextBox:
Name:txtNum

Label: Name: lblKQ

o Bc 2: Thm mt hm vo ca s m lnh ca Form


Function Giaithua(N As Integer) As Long
Dim i As Integer, Kq As Long
Kq = 1
For i = 1 To n
Kq = Kq * i
Next
Giaithua = Kq
End Function
Private Sub Command1_Click()

Trang 30

Visual Basic
Dim n As Integer
n = Val(txtNum.Text)
lblKQ.Caption = Str(Giaithua(n))
End Sub

Lu d n v chy chng trnh ta c kt qu nh hnh di:

Lu : Do khi gi hm ta nhn c mt kt qu nn bn trong phn nh ngha


hm, trc khi kt thc ta phi gn kt qu tr v ca hm thng qua tn hm (trong v
d trn l dng lnh Giaithua = Kq)

VII. Truy xut d liu trong Visual Basic


VII.1. Cc khi nim
o Module:
- Mt ng dng n gin c th ch c mt biu mu, lc tt c m lnh ca
ng dng c t trong ca s m lnh ca biu mu (gi l Form Module).
Khi ng dng c pht trin ln ln, chng ta c th c thm mt s biu mu na v
lc ny kh nng lp i lp li nhiu ln ca mt on m lnh trong nhiu biu mu
khc nhau l rt ln.
- trnh vic lp i lp li trn, ta to ra mt Module ring r cha cc
chng trnh con c dng chung. Visual Basic cho php 3 loi Module:
Module biu mu (Form module): i km vi mi mt biu mu l mt
module ca biu mu cha m lnh ca biu mu ny. Vi mi iu khin trn
biu mu, module biu mu cha cc chng trnh con v chng sn sng c thc
thi p ng li cc s kin m ngi s dng ng dng tc ng trn iu khin.
Module biu mu c lu trong my tnh di dng cc tp tin c ui l *.frm.
Module chun (Standard module): M lnh khng thuc v bt c mt biu
mu hay mt iu khin no s c t trong mt module c bit gi l module
chun (c lu vi ui *.bas). Cc chng trnh con c lp i lp li p ng
cc s kin khc nhau ca cc iu khin khc nhau thng c t trong module
chun.
Module lp (Class module): c s dng to cc iu khin c gi thc
thi trong mt ng dng c th. Mt module chun ch cha m lnh nhng module lp
cha c m lnh v d liu, chng c th c coi l cc iu khin do ngi lp trnh
to ra (c lu vi ui *.cls).
Trang 31

Visual Basic

o Phm vi (scope): xc nh s lng chng trnh c th truy xut mt bin. Mt


bin s thuc mt trong 3 loi phm vi:
Phm vi bin cc b.
Phm vi bin module.
Phm vi bin ton cc.

VII.2. Bin ton cc


o Khi nim: Bin ton cc l bin c phm vi hot ng trong ton b ng dng.
o Khai bo:
Global <Tn bin> [As <Kiu d liu>]

VII.3. Bin cc b
o Khi nim: Bin cc b l bin ch c hiu lc trong nhng chng trnh m

chng c nh ngha.
o Khai bo:
Dim <Tn bin> [As <Kiu d liu>]
o Lu :
Bin cc b c nh ngha bng t kha Dim s kt thc ngay khi vic
thi hnh th tc kt thc.

VII.4. Bin Module


o Khi nim: Bin Module l bin c nh ngha trong phn khai bo
(General|Declaration) ca Module v mc nhin phm vi hot ng ca n l ton b
Module y.
o Khai bo:
- Bin Module c khai bo bng t kha Dim hay Private & t trong
phn khai bo ca Module.
V d:
Private Num As Integer

- Tuy nhin, cc bin Module ny c th c s dng bi cc chng trnh


con trong cc Module khc. Mun th chng phi c khai bo l Public trong phn
Khai bo (General|Declaration) ca Module.
V d:
Public Num As Integer

Lu : Khng th khai bo bin vi t kha l Public trong chng


trnh con.

VII.5. Truyn tham s cho chng trnh con


o Khi nim
Mt chng trnh con i lc cn thm mt vi thng tin v trng thi ca
on m lnh m n nh ngha thc thi. Nhng thng tin ny l cc bin c
truyn vo khi gi chng trnh con, cc bin ny gi l tham s ca chng trnh con.
Trang 32

Visual Basic

C hai cch truyn tham s cho chng trnh con: Truyn bng gi tr &
truyn bng a ch.
o Truyn tham s bng gi tr
Vi cch truyn tham s theo cch ny, mi khi mt tham s c truyn
vo, mt bn sao ca bin c to ra. Nu chng trnh con c thay i gi tr,
nhng thay i ny ch tc ng ln bn sao ca bin. Trong VB, t kha ByVal c
dng xc nh tham s c truyn bng gi tr.
V d:
Sub Twice (ByVal Num As Integer)
Num = Num * 2
Print Num
End Sub
Private Sub Form_Click()
Dim A As Integer
A = 4
Print A
Twice A
Print A
End Sub

Kt qu thc hin ca on chng trnh trn:


4
8
4
o Truyn tham s bng a ch
Truyn tham s theo a ch cho php chng trnh con truy cp vo gi tr
gc ca bin trong b nh. V th, gi tr ca bin c th s b thay i bi on m
lnh trong chng trnh con. Mc nhin, trong VB6 cc tham s c truyn theo a
ch; tuy nhin ta c th ch nh mt cch tng minh nh vo t kha ByRef.
V d:
Sub Twice (Num As Integer)
Num = Num * 2
Print Num
End Sub
Private Sub Form_Click()
Dim A As Integer
A = 4
Print A
Twice A
Print A
End Sub

Kt qu thc hin ca on chng trnh trn:


4
8
Trang 33

Visual Basic

VIII. By li trong Visual Basic


Cc thao tc by cc li thc thi ca chng trnh l cn thit i vi cc ngn
ng lp trnh. Ngi lp trnh kh kim sot ht cc tnh hung c th gy ra li.
Chng hn ngi ta kh c th kim tra cht ch vic ngi dng ang chp d liu t
a mm (hay CD) khi chng khng c trong a. Nu c cc thao tc by li y
th tin cho ngi lp trnh rt nhiu.
Visual Basic cng cung cp cho ta mt s cu trc by cc li ang thc thi.
C php:
Dng 1:
On Error GoTo <Tn nhn>
<Cc cu lnh c th gy ra li>
<Tn nhn>:
<Cc cu lnh x l li>
ngha:
- <Tn nhn>: l mt tn c t theo quy tc ca mt danh biu.
- Nu mt lnh trong <Cc cu lnh c th gy ra li> th khi chng
trnh thc thi n cu lnh , chng trnh s t ng nhy n on chng
trnh nh ngha bn di <Tn nhn> thc thi.
Dng 2:
On Error Resume Next
<Cc cu lnh c th gy ra li>
ngha:
- Nu mt lnh trong <Cc cu lnh c th gy ra li> th khi chng
trnh thc thi n cu lnh , chng trnh s t ng b qua cu lnh b li v
thc thi cu lnh k tip.

Trang 34

Visual Basic

CHNG 4

CC KIU D LIU C
CU TRC

Mc tiu:
Chng ny gii thiu v cc cu trc d liu trong VB. Vic nm bt
c cc vn ny gip cho vic t chc d liu khi vit chng trnh VB
c hp l hn.
Hc xong chng ny, sinh vin phi nm bt c cc vn sau:
- S dng kiu d liu chui.
- S dng kiu ngy thng.
- Kiu ng (Variant)
- Kiu mng
Kin thc c lin quan:
- Cc cu trc lp trnh trong VB.
Ti liu tham kho:
http://www.vovisoft.com/VisualBasic/VB6Chapter5.htm
http://www.vovisoft.com/VisualBasic/VB6Chapter6.htm

Trang 35

Visual Basic

I. Kiu chui k t (String)


I.1. Khai bo
C hai c t chui k t theo c php nh sau:
- String * <Chiu di> Ch ra mt chui k t c di c nh l bao nhiu
k t. Trong trng hp gi tr thc ca chui c di ngn hn di khai bo
th di ca chui th mt s khong trng c thm vo cho di thc.
Trong trng hp gi tr thc ca chui c di ln hn di khai bo th s ct
bt cc k t d tha bn phi. Mt chui khng c k t no ( di bng 0) gi l
chui rng.
- String: Khi khng ch ra chiu di ti a ca chui th mc nhin chui c
chiu di ti a l 65.500 k t.
V d:
Dim Name As String * 30, Class As String * 10
Dim A As String

I.2. Cc hm x l chui
o Ghp chui: cho php ghp 2 hay nhiu chui li vi nhau nh php ton &.
V d:
Dim FirstWord As String, SecondWord As String
Dim Greeting As String
FirstWord = "Hello"
SecondWord = "World"
Greeting = FirstWord & SecondWord
' Greeting by gi l "HelloWorld"

o Len: tr v chiu di mt chui c ch nh.


V d:
Greeting = "Hi John!"
Dim iLen As Integer
iLen = Len(Greeting) ' iLen by gi bng 8

o Left: Trch chui con t phn u chui gc Left (String, [length]).


o Right: Trch chui con t phn ui chui gc Right (String, [length])
o Mid: Trch chui con t gia chui gc
Mid(String, Start As Long, [length])

V d 1:
Dim Today As String, StrDay As String, StrMonth As String
Dim StrYear As String, StrMonthYear As String
Today = "24/05/2001"
' Ly ra 2 k t t bn tri ca chui Today
StrDay = Left(Today,2) ' StrDay by gi bng "24"
' Ly ra 4 k t t bn phi ca String Today
StrYear = Right(Today,4) ' StrYear by gi bng "2001"
' Ly ra 2 characters bt u t k t th t ca chui
Today, k t u tin t bn tri l th nht
StrMonth = Mid(Today,4,2) ' StrMonth by gi bng "05"

Trang 36

Visual Basic
' Ly ra phn cn li bt u t k t 4 ca chui Today
StrMonthYear = Mid(Today,4) ' StrMonthYear bng 05/2001"

V d 2:
Today = "24/05/2001"
' Thay th character th 3 ca Today bng
Mid(Today,3,1) = "-"
' Thay th 2 k t bt u t k t 4 ca
Mid(Today,4,2) = "10"
' Thay th character th 6 ca Today bng
Mid(Today,6,1) = "-" ' Today by gi bng

"-"
Today bng "10"
"-"
"24-10-2001"

o InStr: Tm chui con trong chui gc. Nu hm InStr tr v 0, ngha l khng


tm thy.
C php: InStr([start,] string1, string2 [, compare])
Trong :
- Start: Xc nh v tr trong chui bt u vic tm kim. Nu gi tr l Null th
s bt u t u chui. Nu nh tham s Compare c c t th bt buc phi khai bo
tham s Start.
- String1: Biu thc chui so snh.
- String2: Chui cn tm.
- Compare: Xc nh kiu so snh chui.
Gi tr: vbTextCompare, vbBinaryCompare.
V d 1:
Dim myString As String, Position As Integer
myString = "The *rain in Spain mainly..."
Position = Instr(myString,"*") ' Position s l 5

Nu trong myString khng c du "*" th Position s bng 0


V d 2:
Dim KeyValuePair As String, Key As String
Dim Value As String
KeyValuePair = "BeatlesSong=Yesterday"
Pos = Instr(KeyValuePair, "=")
Key = Left(KeyValuePair, Pos-1)
Value = Mid(KeyValuePair, Pos+1)

o Replace: tm v thay th chui.


C php:
Replace(Expression, find, replace[, start[, count[, compare]]])

Trong :
- Expression: Biu thc chui cha chui cn thay th.
- find:Chui cn tm.
- replace: Chui thay th chui tm c.
- start: Tng t nh hm InStr.
- count: Xc nh s ln thay th. Mc nh l 1.
- compare: Tng t nh hm InStr.
o LTrim (RTrim): ct tt c cc khong trng bn tri (bn phi ca chui)
LTrim(string)
C php:
RTrim(string)

Trang 37

Visual Basic

o UCase: i chui sang chui gm cc k t l ch hoa.


C php:
UCase(string)
o Asc: cho m Ascii ca mt k t.
o Chr: tr v k t ng vi m Ascii c ch nh.
Dim ASCIINumberA As Integer, CharB As String * 1
Dim StrFive As String * 1
ASCIINumberA = Asc("A") ' ASCIINumberA by gi bng 65
CharB = Chr(66)
StrFive = Chr(Asc("0") + 5) ' ta c digit "5"

o InstrRev: tng t nh InStr nhng vic tm kim c tin hnh t phi sang.
o Val: Hm i chui sang s.
o Str: Hm i s sang chui.

II. Kiu ngy thng (Date)


- L kiu m cc bin ca n cha gi tr ngy thng.
- cho VB bit d liu l kiu Date ta cn t gia hai du # (hoc cp ).
V d:
Dim D As Date
D = #01/02/98# Hay 01/02/98

Nu hiu theo kiu ngi M, y


l ngy 2 thng ging nm 1998, cn nu
theo kiu Anh th y l ngy 1 thng hai
nm 1998. Tuy nhin, nh dng ngy
thng hin th ph thuc vo quy nh ca
Windows.
- Hp thoi hnh IV.1 hin th khi
ta chn Regional Setting trong ca s
Control Panel ca Windows, n cho php
quy nh kiu ngy thng ty thuc cch
m ngi dng quy nh. VB x l ngy
thng theo kiu M, nhng nu my hin
th theo kiu Anh th n vn hin th theo
kiu Anh.

Hnh IV 1 Hp thoi xc lp
- Hm Now: tr v ngy gi hin ti.
V d: Dng hm Now & Format:

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


' s hin th

NOW IS Tue 05-Oct-2004 16:15:53

Trang 38

Visual Basic

III. Cc loi s
o chuyn i mt chui ra s ta c cc hm Val, CInt, CSng. Ngc li
chuyn i t s sang chui ta dng CStr, Str.
V d:
Dollars = "500"
ExchangeRatePerDollar = "7000"
tempValue= Val(Dollars) * Val(ExchangeRatePerDollar)
VNDong = CStr(tempValue)
MsgBox "Amount in VN Dong is " & VNDong

V d:
Dollars = "500.0"
ExchangeRatePerDollar = "7000.0"
'Dng hm CSng i chui ra Single
tempValue = CSng(Dollars) * CSng(ExchangeRatePerDollar)
'Dng hm Format c cc du phy ngn v triu
v phi c 2 ch s sau du chm thp phn.
VNDong = Format (tempValue, "#,###,###.00")
MsgBox "Amount in VN Dong is " & VNDong

o Round: b bt mt s ch s sau du chm thp phn


V d:
Round ( 12.3456789, 4 )
ch gi li 4 con s sau du chm thp phn v cho ta 12.3457

IV.Kiu Object
Bin kiu Object cha mt a ch 4 Byte tr n i tng trong ng dng hin
hnh hoc cc ng dng khc. Dng lnh Set ch ra i tng c th.
Dim
Set

ObjDb
ObjDb

As
Object
= OpenDatabase("d:\tqdinh\thu.mdb")

Khi khai bo bin i tng, ta nn ch ra tn lp tng minh, chng hn nh


TextBox thay v Control, ng dng ca ta s chy nhanh hn.
Ta c th xem danh sch cc lp c sn trong ca s Object Browser.

V. Kiu Variant
Bin kiu Variant c th cha mi kiu d liu k c kiu mng, kiu do ngi
dng nh ngha nhng ngoi tr kiu chui c di c nh .
Bin kiu Variant c th nhn cc gi tr c bit nh Empty, Nothing, Error,
Null. Ta c th xc nh kiu d liu ca bin Variant bng cc s dng hm VarType
hoc hm TypeName.
Hm VarType dng kim tra kiu d liu

Hng
vbEmpty
vbNull
vbInteger

Gi tr
Din gii
Khng cha g c
0
1
D liu khng hp l
2
D liu kiu Integer chun
Trang 39

Visual Basic

vbLong
vbSingle
vbDouble
vbCurrency
vbDate
vbString
vbObject
vbError
vbBoolean
vbVariant
vbDataObject
vbDecimal
vbByte
vbUserDefinedType
vbArray

3
4
5
6
7
8
9
10
11
12
13
14
17
36
8192

D liu kiu Long Integer


D liu kiu du chm ng Single
D liu kiu du chm ng Double
Kiu Currency
Kiu Date
Kiu String
Kiu Object
C mt i tng li
Kiu gi tr Boolean chun
Kiu Variant
Kiu DAO chun (data access object)
Gi tr thuc h thp phn
Kiu Byte
Kiu do ngi dng nh ngha
Kiu mng

Mt s ch khi dng bin kiu Variant:


- Nu mun thi hnh cc hm ton hc, Variant phi cha gi tr kiu s.
- Nu mun ni chui, dng ton t & thay v ton t +.
Gi tr Empty:
- y l gi tr c bit xut hin khi mt bin cha c gn tr. Ta dng hm
IsEmpty kim tra gi tr Empty.
- Gi tr Empty bin mt khi c mt gi tr bt k c gn cho bin Variant,
tr v gi tr Empty, ta gn t kho Empty cho bin Variant.
Gi tr Null: Bin Variant cha gi tr Null trong trng hp nhng ng dng c
s d liu th hin khng c d liu hoc d liu khng xc nh.
Gi tr Error: Trong mt bin kiu Variant, Error l mt gi tr c bit cho bit
c mt li xy ra bn trong th tc.
V d:
Private Sub cmdShowDataTypes_Click()
Dim sMess As String
Dim vVariant As Variant
vVariant = "Xin chao" 'String
sMess = VarType(vVariant) & vbCrLf ' xung dng & v u dng
vVariant = 25 ' Integer
sMess = sMess & VarType(vVariant) & vbCrLf
vVariant = True ' Boolean
sMess = sMess & VarType(vVariant) & vbCrLf
'Date
vVariant = #1/1/2001# 'trong cp du #
sMess = sMess & VarType(vVariant)
MsgBox sMess
End Sub

Khi chy chng trnh kt qu l:

Trang 40

Visual Basic

VI. Kiu Mng


VI.1. Khi nim
- Mng l tp hp cc phn t c cng mt kiu.
- Dng mng s lm cho chng trnh n gin v gn hn v ta c th s dng
vng lp. Mng s c bin trn v bin di, trong cc thnh phn ca mng l lin
tip trong khong gia hai bin ny.
- C hai loi bin mng: mng c chiu di c nh v mng c chiu di thay
i lc thi hnh.

VI.2. Khai bo
o Mng c chiu di c nh:
Dim <Tn bin mng>(<Kch thc>) [As <Kiu>]
Lc ny phn t u tin c ch s l 0 & phn t cui cng c ch s l
<Kch thc>.
Dim <Tn bin mng>(<Ch s u> To <Ch s cui>) [As <Kiu>]
V d:
' Khai bo mt bin mng 15 phn t kiu Integer
Dim

Counters(14)As Integer

' Khai bo mt bin mng 21 phn t kiu Double


Public Sums(20)As Double

' Khai bo mt bin mng 10 phn t kiu chui k t


Dim List (1 To 10) As String * 12

- Hm UBound tr v bin trn ca mt mng.


Trang 41

Visual Basic

- Hm LBound tr v bin di ca mt mng.


V d:
UBound(List) s tr v gi tr l 10.
LBound(List) s tr v gi tr l 1.
9 Lu : ta c th khai bo mt mng nhiu chiu nh sau
Dim

Multi3D (3, 1 To 10, 9) As Double

Khai bo ny to ra mt mng 3 chiu vi kch thc 4 x 10 x 10.

o Mng ng:
- y l mng c kch thc thay i, l mt trong nhng u im ca mng
ng v n gip ta tit kim ti nguyn h thng. Ta c th s dng mt mng c kch
thc ln trong mt thi gian no ri xo b tr li vng nh cho h thng.
- Khai bo mt mng ng bng cch cho n mt danh sch khng theo chiu
no c. C php: Dim <Tn mng> () [As <Kiu>]
V d:
Dim DynArray() As Integer

Sau ta c th cp pht s phn t tht s bng lnh ReDim.


ReDim <Tn mng>(N) ' Trong N l mt biu thc kiu
Integer.
ReDim dng xc nh hay thay i kch thc ca mt mng ng. Ta
c th dng ReDim thay i s phn t, s chiu ca mt mng nhiu ln nhng
khng th thay i kiu d liu ca mng ngoi tr kiu mng l kiu Variant.
Mi ln gi ReDim tt c cc gi tr cha trong mng s b mt. VB khi
to li gi tr cho chng (Empty i vi mng Variant, 0 cho mng kiu s, chui
rng cho mng chui hoc Nothing cho mng cc i tng). Nhng i khi ta
mun tng kch c ca mng nhng khng mun lm mt d liu, ta dng ReDim
i km vi t kho Preserve. Ta xem v d di y:
ReDim

DynArray (UBound(DynArray) +10)

Preserve

Tuy nhin ch c bin trn ca chiu cui cng trong mng c thay i
khi ta dng Preserve. Nu ta c tnh thay i chiu khc hoc bin di th VB s
bo li.

VI.3. Mt s thao tc trn mng


o Truy xut tng phn t trong mng: <Tn mng>(<V tr>)
o Sao chp mng: i vi VB6, ta c th gn mt mng cho mt mng khc, hoc
kt qu tr v ca mt hm c th l mt mng.
V d:
ByteCopy (old () As
New = old
End Sub
Sub

Byte,

New ()

As

Byte)

Tuy nhin, cch ny cng ch p dng c cho mng khai bo ng m thi.


Khi gn bin, c mt s quy lut m ta cn lu : l quy lut v kiu d liu v quy
lut v kch thc v s chiu ca mng.
Trang 42

Visual Basic

Li khi gn mng c th xy ra lc bin dch hoc khi thi hnh. Ta c th thm


by li m bo rng hai mng l tng thch trc khi gn.
o Mng l kt qu tr v ca hm. Chng hn nh:
Public Function ArrayFunction (b As Byte) As Byte()
Dim
x(2)
As
Byte
x(0) = b
x(1) = b + 2
x(2) = b + b
ArrayFunction = x
End Function

Khi gi hm tr v mng, bin gi gi tr tr v phi l mt mng v c kiu


nh kiu ca hm, nu khng n s bo li "khng tng thch kiu".

VII. Kiu do ngi dng nh ngha - Kiu mu tin


C php:
Type <tn kiu>
<Tn trng 1> : <Kiu trng 1>
<Tn trng 2> : <Kiu trng 2>
:
<Tn trng n> : <Kiu trng n>
End Type
V d:
Type

End

TEmployee
Fullname
As
String
Salary
As
Single
Age
As Integer
Type

Chng ta va nh ngha mt kiu d liu mi c tn l TEmployee. Kiu ny


c nt tng t nh mt lp. V mt chc nng, c hai l nh nhau, nhng mt lp c
th cha trong DLL v sn sng cho vic dng chung vi cc ng dng khc, trong khi
kiu d liu do ngi dng nh ngha phi c khai bo li trong tng d n. Do
vy, kiu lp c nhiu mt tin li hn.
Cch truy xut tng trng ca kiu mu tin:
<Tn bin mu tin>.<Tn trng>
V d: Gi s ta c khai bo bin sau:
Dim e As TEmployee

Ta c th gn:
e.Fullname = Nguyen Van An
e.Salary = 300000.00
e.Age = 26

Cu lnh With:
- c s dng vit gn hn khi thao tc vi d liu kiu mu tin.
- C php:
With <Tn bin mu tin>
Trang 43

Visual Basic

[ Truy xut n tng trng ca mu tin theo dng:


.<Tn trng>
]
End With
V d: Dim e As TEmployee
Ta c th gn:
With e
.Fullname = Nguyen Van An
.Salary = 300000.00
.Age = 26
End With

Trang 44

Visual Basic

CHNG 5

THIT K BIU MU DNG


CC IU KHIN

Mc tiu:
Chng ny gii thiu v cc iu khin dng trong vic to giao din
cho cc ng dng chy trn Windows. Vic nm bt c cc vn ny lm
cho cng vic to giao din cho ng dng c nhanh chng.
Hc xong chng ny, sinh vin phi nm bt c cc vn sau:
- S dng cc iu khin hp danh sch, hp la chn lu cc danh sch.
- S dng cc iu khin hp nh du, nt la chn nhn/hin th d liu
dng Yes/No.
- S dng cc iu khin hp hnh nh, iu khin nh hin th nh.
- S dng iu khin thanh cun nhn/hin th d liu s.
- S dng iu khin thi gian p ng s tri i ca thi gian.

- Mt s iu khin khc.
Kin thc c lin quan:
- Cc cu trc lp trnh trong VB.
- Cch thc x l s kin.
Ti liu tham kho:
- Microsoft Visual Basic 6.0 v Lp trnh C s d liu - Chong 3, trang
29 - Nguyn Th Ngc Mai (ch bin), Nh xut bn Gio dc - 2000.

Trang 45

Visual Basic

I. Phn loi iu khin


C 3 nhm iu khin trong Visual Basic:
Cc iu khin ni ti (Intrinsic control). Cc iu khin ni ti lun cha sn
trong hp cng c (nhn, khung, nt lnh, khung nh...). Ta khng th g b cc iu
khin ni ti ra khi hp cng c.
Cc iu khin ActiveX tn ti trong cc tp tin c lp c phn m rng .OCX:
l cc iu khin c th c trong mi phin bn ca VB hoc l cc iu khin ch
hin din trong n bn Professional v Enterprise. Mt khc cn c rt nhiu iu
khin ActiveX do nh cung cp th ba cung cp.
Cc i tng chn c (Insertable Object): Cc i tng ny c th l
Microsoft Equation 3.0 hoc bng tnh (Worksheet) ca Microsoft Excel... Mt vi i
tng kiu ny cho php ta lp trnh vi cc i tng sinh ra t cc ng dng khc
ngay trong ng dng VB.

II. S dng cc iu khin


II.1 iu khin danh sch cc la chn (List Box)
II.1.1. Khi nim:
iu khin ny hin th mt danh sch cc mc m ngi dng c
th chn la mt hoc nhiu mc
Biu tng (Shortcut) trn hp cng c
iu khin ny hin th mt danh sch cc mc m ngi dng c
th chn la mt hoc nhiu mc
Trang 46

Visual Basic

List Box gii thiu vi ngi dng mt danh sch cc la chn. Mt cch
mc nh, cc la chn hin th theo chiu dc trn mt ct v bn c th thit lp l
hin th theo nhiu ct. Nu s lng cc la chn nhiu v khng th hin th ht
trong danh sch th mt thanh trt s t ng xut hin trn iu khin. Di y l
mt v d v danh sch cc la chn n ct.

Hnh V.1: V d v List Box

II.1.2. Thuc tnh:


o Name: y l tn ca danh sch la chn, c s dng nh mt nh danh.
o MultiSelect: Thuc tnh ny cho php List Box c c php c nhiu la
chn khi thc thi hay khng?
o Sort: List Box c sp xp hay khng?
o Ngoi ra cn c mt s thuc tnh thng dng khc nh: Font, Width,
Height
o ListIndex: V tr ca phn t c la chn trong List Box.
o Select(<Index>): cho bit phn t th <Index> trong List Box c c chn
hay khng?
II.1.3. Phng thc:
o AddItem: Thm mt phn t vo List Box. C php:
<Name>.AddIem(Item As String, [Index])
Tham s
Name
Item
Index

Din gii
Tn ca List Box.
Biu thc chui ( mc) cn thm vo.
Xc nh v tr mc mi c chn vo, gi tr 0 xc nh cho
v tr u tin. Khi khng ch nh r Index th phn t thm vo
l mc cui cng trong List Box mi.

Sau y l on m v d to mt List Box c tn List1 vi cc mc


"Germany," "India," "France," v "USA" vo lc biu mu c np (Load).

Private Sub Form_Load ()

Trang 47

Visual Basic
List1.AddItem
List1.AddItem
List1.AddItem
List1.AddItem

"Germany"
"India"
"France"
"USA"

End Sub

Ngi dng cng c th thm vo mt mc mi mt cch t ng vo


bt k thi im no nhm p li tc ng t pha ngi s dng ng dng.
Di y l hnh nh minh ha cho List Box tng ng vi on m trn.

Hnh V.2 List box hin th cc


quc gia

Thm mt mc mi ti v tr xc nh: thc hin cng vic ny ta


ch cn ch ra v tr cn xen mc mi vo.
V d: List1.AddItem "Japan", 0
Thm mi mc ti thi im thit k: S dng thuc tnh List ca iu
khin List Box, ta c th thm mi cc mc v dng t hp phm
CTRL+ENTER bt u thm vo mc mi trn dng khc. Khi thm
xong danh sch cc mc, ta c th sp xp li cc mc bng cch s dng
thuc tnh Sorted v t gi tr ca thuc tnh ny l TRUE.
o RemoveItem: Xa mt phn t ra khi List Box.
C php: <Name>.RemoveItem Index
Tham s Name v Index ging nh trng hp thm vo mt mc.
o Clear: Xa tt c cc mc trong List Box. C php <Name>.Clear
o Text: Nhn gi tr t List Box khi mt mc c chn. Chng hn on
m sau y s cho bit dn s ca Canada khi ngi dng chn Canada t List Box.
Private Sub List1_Click ()
If List1.Text = "Canada" Then
Text1.Text = "Canada has 24 million people."
End If
End Sub

Trang 48

Visual Basic

Chon

Hnh V.3 V d v List Box

o List: truy xut ni dung phn t bt k trong List Box.


Thuc tnh ny cho php truy xut tt c cc mc ca iu khin List
Box. Thuc tnh ny cha mt mng v mi mc l mt phn t ca mng. Mi
mc c hin th di dng chui, tham chiu n mt mc trong danh sch, s
dng c php sau:
<Name>.List(Index)
V d: Text1.Text = List1.List(2)
II.1.4. S kin:
o Click & Double Click: Xy ra khi ngi s dng nhp chut (hay nhp
p) vo List Box.
Thng thng ngi s dng s thit k mt nt lnh i km nhn v
gi tr do ngi dng chn. Khi cng vic thc hin sau khi nt lnh c chn s
ph thuc vo gi tr ngi dng chn t List Box.
Double Click ln mt mc trong danh sch cng c kt qu tng t
nh vic chn mt mc trong danh sch ri n ln nt lnh. thc hin cng vic
nh trn trong s kin Double Click ca List Box ta s gi n s kin Click ca nt
lnh.
Private Sub List1_DblClick ()
Command1_Click
End Sub

Hoc ta c th thit t gi tr True cho thuc tnh Value ca nt lnh.


Private Sub List1_DblClick ()
Command1.Value = True
End Sub

Trang 49

Visual Basic

II.2 iu khin hp la chn (Combo Box)


iu khin Combo Box c th c xem l tch hp gia hai iu khin
Text Box v List Box. Ngi dng c th chn mt mc bng cch nh chui vn
bn vo Combo Box hoc chn mt mc trong danh sch.
im khc nhau c bn gia Combo Box v List Box l iu khin Combo
ch gi (hay ngh) cc la chn trong khi iu khin List th gii hn cc
mc nhp vo tc l ngi dng ch c th chn nhng mc c trong danh sch.
iu khin Combo cha c nhp liu nn ngi dng c th a vo mt mc
khng c sn trong danh sch.
Biu tng short cut trn hp cng c:
Cc dng ca iu khin Combo Box: C tt c 3 dng ca iu khin
Combo Box. Ta c th chn dng ca Combo ti thi im thit k bng cch dng gi
tr hoc hng chui ca VB.
Kiu

Gi tr

Drop-down Combo Box

VbComboDropDown

Simple Combo Box

VbComboSimple

Drop-down List Box

vbComboDropDownList

Drop-down combo box

Hng

Simple combo box

Drop-down list box

Hnh V.4: Cc dng combo box

- Drop-down Combo Box: y l dng mc nhin ca Combo. Ngi


dng c th nhp vo trc tip hoc chn t danh sch cc mc.
- Simple Combo Box: Ta c th hin th nhiu mc cng mt lc.
hin th tt c cc mc, bn cn thit k Combo ln. Mt thanh trt s xut hin
khi cn mc cha c hin th ht. dng ny, ngi dng vn c th nhp mt
chui vo trc tip hoc chn t danh sch cc mc.
- Drop down List Box: Dng ny rt ging nh mt List box. Mt im
khc bit l cc mc s khng hin th n khi no ngi dng Click ln mi tn
pha phi ca iu khin. im khc bit vi dng th 2 l ngi dng khng th
nhp vo trc tip mt chui khng c trong danh sch.
Cc thuc tnh cng nh cc phng thc p dng trn Combo Box
ging nh trn List Box.
Trang 50

Visual Basic

II.3 iu khin hp nh du (Check Box)


II.3.1. Khi nim:
y l iu khin hin th du 9 nu nh c chn v du 9 b xo nu
nh khng chn. Dng iu khin Check Box nhn thng tin t ngi dng theo
dng Yes/No hoc True/False. Ta cng c th dng nhiu iu khin trong mt nhm
hin th nhiu kh nng la chn trong khi ch c mt c chn. Khi Check Box
c chn, n c gi tr 1 v ngc li c gi tr 0.
Biu tng shortcut trn hp cng c
II.3.2. Thuc tnh:
o Name: thuc tnh tn.
o Value: Gi tr hin thi trn Check Box. C th nhn cc gi tr: vbChecked,
vbUnchecked, vbGrayed.
II.3.3. S kin:
o Click: Xy ra khi ngi s dng nhp chut trn Check Box.
II.3.4. V d:
Thit k chng trnh c giao din:

Hnh V.5 V d v Check Box

Hnh V.5 l hnh minh ha cch dng Check Box hin th chui di dng t
m v nghing.
Private Sub chkBold_Click ()
If ChkBold.Value = vbChecked Then
' If checked.
txtDisplay.Font.Bold = True
Else
' If not checked.
txtDisplay.Font.Bold = False
End If
End Sub
Private Sub chkItalic_Click ()
If
ChkItalic.Value = vbChecked Then
txtDisplay.Font.Italic = True
Else If not checked.
Trang 51

' If checked.

Visual Basic

txtDisplay.Font.Italic = False
End If
End Sub

II.4 iu khin nt la chn (Option Button)


II.4.1. Khi nim:
Cng dng ca iu khin Option button cng tng t nh iu khin
Check Box. im khc nhau ch yu gia hai loi iu khin ny l: Cc Option
Button ca cng mt nhm ti mi thi im ch c mt iu khin nht nh c
chn.
Biu tng Shortcut trn hp cng cu
Cch s dng Option button cng tng t nh ca Check Box.
To nhm Option Button
Tt c cc Option button t trc tip trn biu mu (c ngha l
khng thuc vo Frame hoc Picture Box) s c xem nh l mt
nhm. Nu ngi dng mun to mt nhm cc Option button khc th
bt buc phi t chng bn trong phm vi ca mt Frame hoc Picture
box.

Hnh V.6 Nhm cc option button

II.4.2. Thuc tnh:

False.

o Name: thuc tnh tn ca iu khin Option Button.


o Value: Gi tr hin thi trn Option Button. C th nhn cc gi tr: True &

II.4.3. S kin:
Click: Xy ra khi ngi s dng nhp chut trn Option Button.

II.5 iu khin thanh cun ngang (HScrollBar)


II.5.1. Khi nim:
L iu khin c thanh trt cho php cun ngang v ngi dng c th s
dng HScrollBar nh mt thit b nhp hoc mt thit b ch nh cho s lng hoc
vn tc. V d ta thit k volume cho mt tr chi trn my tnh hoc din t c
bao nhiu thi gian tri qua trong mt khong nh thi nht nh.
Trang 52

Visual Basic

Biu tng Shortcut trn hp cng cu


Khi ngi dng s dng Scroll Bar nh mt thit b ch nh s lng th
ngi dng cn xc nh gi tr cho hai thuc tnh Max v Min a ra khong thay
i thch hp.
II.5.2. Thuc tnh:
o Name: Tn ca thanh cun.
o Min: L gi tr nh nht trn thanh cun.
o Max:: Gi tr ln nht ca thanh cun.
o Large change: Thuc tnh ny dng xc nh khong thay i khi
ngi dng n chut ln Hscrollbar.
o Small change: Thuc tnh ny dng xc nh khong thay i khi
ngi dng n ln mi tn pha cui thanh cun.
o Value: Thuc tnh ny tr v gi tr ti mt thi im ca thanh cun nm
trong khong gi tr [Min, Max] m ngi dng xc nh.
II.5.3. S kin:
o Change: Xy ra mi khi HScrollBar thay i gi tr.
o Scroll: Xy ra mi khi ta di chuyn con tr thanh cun.
II.5.4. V d:

Hnh V.7 V d v Hscrollbar

Hnh V.7 minh ha vic s dng thanh cun thay i kch c ca Text h tn vi
on m n gin nh sau:

Private Sub HScroll1_Change()


Text1.FontSize = HScroll1.Value
End Sub

Trang 53

Visual Basic

II.6 iu khin thanh cun ng (VScrollBar)


Biu tng shortcut trn hp cng cu
Cc thuc tnh v cng dng ca VScrollBar cng tng t nh HScrollBar.

II.7 iu khin hp hnh nh (Picture Box)


II.7.1. Khi nim:
iu khin Picture Box cho php ngi dng hin th hnh nh ln mt biu
mu.
Biu tng Shortcut trn hp cng c
II.7.2. Thuc tnh:
o Name: tn ca iu khin Picture Box.
o Picture: y l thuc tnh cho php xc nh hnh nh no s c hin th
bn trong Picture box. Bao gm tn tp tin hnh nh v c ng dn nu c.
hin th hoc thay th mt hnh nh ti thi im chy chng trnh
th ngi dng c th dng phng thc LoadPicture t li gi tr ca thuc tnh
Picture vi c php nh trong v d di y:
picMain.Picture = LoadPicture("NEW.JPG")

o Autosize: Khi gi tr ca thuc tnh ny l TRUE th iu khin Picture


box s t ng thay i kch thc cho ph hp vi hnh nh c hin th. Ta nn
cn thn khi s dng thuc tnh ny v khi iu khin Picture Box thay i kch thc,
n khng quan tm n v tr ca cc iu khin khc.
II.7.3. S kin:
chut.

o Mouse Down: Xy ra khi ngi s dng chng trnh nhn gi phm


o Mouse Move: Xy ra khi ngi s dng chng trnh di chuyn chut.
o Mouse Up: Xy ra khi ngi s dng chng trnh th phm chut.

II.7.4. V d:

Trang 54

Visual Basic

Private Sub Picture1_MouseMove(Button As Integer, Shift As _


Integer,
X As Single, Y As Single)
Picture1.Picture = LoadPicture("d:\quocdinh\new.jpg")
End Sub

II.7.5. Lu :
o iu khin Picture Box c th c dng nh mt vt cha cc iu khin
khc (tng t nh mt Frame).
o Ngoi ra ngi dng cng c th s dng Picture Box nh mt khung v
hoc nh mt khung son tho v c th in c ni dung trn .

II.8 iu khin hnh nh (Image)


II.8.1. Khi nim:
iu khin Image dng hin th mt hnh nh. Cc dng c th l Bitmap,
Icon, Metafile, Jpeg, Gif. Tuy nhin khc vi iu khin Picture Box iu khin Image
s dng ti nguyn h thng t v cng np nh nhanh hn; hn na s lng thuc
tnh v phng thc p dng t hn iu khin Picture box.
Biu tng Shortcut trn hp cng c
II.8.2. Thuc tnh:
o Name: tn ca iu khin Image.
o Picture: y l thuc tnh cho php xc nh hnh nh no s c hin th
bn trong iu khin Image. Bao gm tn tp tin hnh nh v c ng dn nu c.
hin th hoc thay th mt hnh nh ti thi im chy chng trnh
th ngi dng c th dng phng thc LoadPicture t li gi tr ca thuc tnh
Picture vi c php nh trong v d di y:
imgMain.Picture = LoadPicture("NEW.JPG")
o Stretch: Khi gi tr ca thuc tnh ny l TRUE th iu khin Image s t
ng thay i kch thc cho ph hp vi hnh nh c hin th.
II.8.3. S kin:
chut.

o Mouse Down: Xy ra khi ngi s dng chng trnh nhn gi phm


o Mouse Move: Xy ra khi ngi s dng chng trnh di chuyn chut.
o Mouse Up: Xy ra khi ngi s dng chng trnh th phm chut.
Trang 55

Visual Basic

II.9 iu khin hnh dng (Shape)


Biu tng Shortcut trn hp cng cu
iu khin Shape dng v cc hnh dng nh: hnh ch nht, hnh vung,
oval, hnh trn, hnh ch nht gc trn hoc hnh vung gc trn.
Thuc tnh Shape cho php ngi dng chn 1 trong 6 dng nh nu trn.
Sau y l bng gi tr ca thuc tnh ny
Hnh dng

Gi tr

Hng

Rectangle

vbShapeRectangle

Square

vbShapeSquare

Oval

vbShapeOval

Circle

vbShapeCircle

Rounded Rectangle

vbShapeRoundedRectangle

Rounded Square

vbShapeRoundedSquare

Hnh V.9 di y minh ha cho cc dng ca iu khin Shape

Hnh V.9: 6 dng ca iu khin Shape

Ngi dng c th s dng cc thuc tnh nh BorderColor, BorderStyle,


BorderWidth xc nh mu, dng cng nh dy ca ng bin. Tng t vi
cc thuc tnh FillColor, FillStyle xc nh mu v kiu t nn.

II.10 iu khin thi gian (Timer)


II.10.1. Khi nim:
iu khin Timer p ng li s tri i ca thi gian. N c lp vi ngi
s dng v ta c th lp trnh thc hin mt cng vic no c sau mt khong
thi gian u nhau.
Biu tng Shortcut trn hp cng cu
Vic a mt iu khin Timer v trong mt biu mu cng tng t nh
nhng iu khin khc. y, ta ch c th quan st c v tr ca iu khin Timer
Trang 56

Visual Basic

ti giai on thit k, khi chy ng dng iu khin Timer coi nh khng c th hin
trn biu mu.
II.10.2. Thuc tnh:
o Name: tn ca iu khin Timer.
o Interval: y l thuc tnh ch r s ms gia hai s kin k tip nhau. Tr
khi n b v hiu ha, mi iu khin Timer s lun nhn c mt s kin sau mt
khong thi gian u nhau.
Thuc tnh Interval nhn gi tr trong khong 0...64.767 ms c ngha l
khong thi gian di nht gia hai s kin ch c th l khong mt pht (64.8 giy).
o Enabled: nu gi tr l True ngha l iu khin Timer c kch hot v
ngc li.
II.10.3. S kin:
o Timer: xy ra mi khi n thi gian mt s kin c thc hin (xc nh
trong thuc tnh Interval).
II.10.4. S dng iu khin Timer:
o Khi to mt iu khin Timer: Nu lp trnh vin mun iu khin
Timer hot ng ngay ti thi im biu mu cha n c np th t thuc tnh
Enable l TRUE hoc c th dng mt s kin no t bn ngoi kch hot iu
khin Timer.
o Lp trnh p ng s kin tr v t iu khin Timer: Ta s a m
lnh ca cng vic cn thc hin vo trong s kin Timer ca iu khin Timer. Sau
y l v d khi to mt ng h s nh vo iu khin Timer.
Private Sub Timer1_Timer()
If Label1.Caption <> CStr(Time) Then
Label1.Caption = Time
End If
End Sub

Thuc tnh Interval c thit lp l 500 (tc 0.5 giy).


iu khin Timer cn hu ch trong vic tnh ton thi gian cho mt cng
vic no , n mt thi im no th ta s khi to mt cng vic mi hoc ngng
mt cng vic khng cn cn na.

II.11 iu khin danh sch a (DriveListbox), danh sch th mc


(DirListbox), danh sch tp tin (FileListbox)
II.11.1. Khi nim:
o iu khin DriveListbox trnh by nhng a ca h thng v cho php
ngi dng chn mt trong nhng a .
Biu tng shortcut (DriveListbox) trn hp cng c
o iu khin DirListbox cho php trnh by nhng th mc v ng dn ti
thi im chy ng dng. S dng iu khin ny trnh by mt danh sch c th
bc ca cc th mc, c ngha l ngi dng c th m mt ti liu t danh sch cc
ti liu c sn.
Trang 57

Visual Basic

Biu tng shortcut (DirListbox) trn hp cng c


o iu khin FileListbox cho php trnh by nhng ti liu c sn trong th
mc hin hnh. Bn c th dng thuc tnh Partten xc nh kiu tp tin no c
hin th trong danh sch.
Biu tng shortcut (FileListbox) trn hp cng cu
Thng thng cc ng dng s s dng kt hp c ba loi iu khin trn
l DriveListbox, DirListbox v FileListbox.
II.11.2. V d:
Cc thuc tnh c thit lp ti thi im thit k
FileListbox: Partten = "*.doc"
DriveListbox, DirListbox
FileListbox: FontName = "Vncourier New".
Tc l iu khin FileListbox ch hin th cc tp tin ca Microsoft Word.
on m di y c vit trong s kin Load ca biu mu
Private Sub Form_Load()
Dir1.Path = "c:\"
File1.Path = "c:\"
End Sub

Hnh V.10 : V d v cc iu khin


a, th mc v tp tin

Trang 58

Visual Basic

on m trn cho php xc nh ng dn hin hnh ca iu khin


DirListbox, FileListbox ti thi im np ng dng l "C:\". Khi chy ng dng ta
c nh hnh V.10.
Khi ta thay i a th cc th mc s thay i theo l nhng th
mc a hin hnh, s thay i cng din ra tng t i vi danh sch cc tp tin.
Cn ch rng i vi a mm v CD th cn thit phi c a mm hoc CD ti
thi im chn a nu khng s xy ra li ti thi im chy ng dng.
Private Sub Dir1_Change()
File1.Path = Dir1.Path
End Sub
Private Sub Drive1_Change()
Dir1.Path = Drive1.Drive
End Sub

Bn trn l nhng on m p ng li vic ngi dng chn vic thay


i a v th mc. Trong danh sch cc tp tin ta ch hin th nhng file *.doc.

Trang 59

Visual Basic

CHNG 6: LP TRNH X L GIAO DIN


& HA
Mc tiu:
Chng ny gii thiu v cch to menu cng nh mt s hm x l
ha, nhng thnh phn quan trng trong cc ng dng chy trn Windows.
Hc xong chng ny, sinh vin phi nm bt c cc vn sau:
- S dng menu trong thit k giao din.
- S dng cc hp thoi trong thit k ng dng.
- S dng cc phng thc ha cng vi cch x l mt s s kin
to cc ng dng ha.
Kin thc c lin quan:
- Cc cu trc lp trnh trong VB.
- Cch thc x l s kin.
Ti liu tham kho:
- Microsoft Visual Basic 6.0 v Lp trnh C s d liu - Chng 7,
trang 99 - Nguyn Th Ngc Mai (ch bin), Nh xut bn Gio dc - 2000.

Trang 60

Visual Basic

I. Menu
I.1. Khi nim
Menu l mt loi iu khin trong ngi s dng c th la chn cc mc t
mt danh sch cho trc.
C 2 loi menu:
- Menu th xung (Drop-Down Menu): l dng menu thng dng nht.
- Menu bt ra (Pop-Up Menu): thng hin th khi ta n nt phi chut.

I.2. Cc thuc tnh ca Menu


Cc thuc tnh ca Menu khng cha trong ca s Properties m cha trong
Menu Editor.
- Caption: L chui hin th trn menu.
- Name: Phi duy nht v d nh. y l tn nhn bit thnh phn
no ca Menu c chn.
- Shortcut: dng thit lp cc phm tt (Shortcut key).
- WindowList: Dng trong cc ng dng MDI (Multipe Document
Interface). y l ng dng c mt biu mu chnh v nhiu biu mu con. Thuc tnh
ny ra lnh cho VB hin th tiu ca cc biu mu con trn menu.
- Checked: Nu chn thuc tnh ny th s c mt du hin th bn cnh
tri, nhng thuc tnh ny khng c p dng cho nhng mc menu c cha menu
con.
- Enabled: Nu thuc tnh ny khng c chn th mc ny s b xm
i v ngi dng khng th chn.
- Visible: Nu thuc tnh ny khng c chn th mc ny s khng
c hin th.
- NegotiatePosition: qun l v tr gn menu trong trng hp s dng
cc i tng ActiveX.

I.3. Cc s kin
- Click: Xy ra khi ngi s dng chng trnh nhp chut vo mt mc
no ca Menu.

I.4. Cch to Menu


Menu cng l mt loi iu khin, nhng Windows s kim sot vic v menu.
Lp trnh vin ch qun l vic iu hnh cc s kin m thi.

Trang 61

Visual Basic

Hnh VI.1 Trnh son tho Menu


Menu khng cha trong hp cng c m c thit k t trnh son tho menu. Trong
Visual Basic 6.0 IDE, chn Tools, ri Menu Editor m chng trnh ny.
V d: To mt Drop-Down Menu.
- To mt n mi.
- n Ctrl-E m Menu Editor
- Ta s to mt Menu File vi Menu con l Open v Save As.
- Trc tin ta nhp vo &File trong Caption v nhp mt tn bt k vo
Name (chng hn l mfile). K t & trc ch F cho bit ch F s l phm tt (n CtrlF) coi nh chn menu File.
- Tip theo ta nhp &Open v &Save As. Open v Save As l Sub menu ca
File, ta chn Open ri n mi tn sang tri. Tng t i vi Save As.

Hnh VI.2 V d to Popup Menu

Trang 62

Visual Basic

Tch nhm menu:


Trong trng hp Menu c nhiu mc, ta s tch nhm Menu tin
theo di. Chng hn ta thm vo Menu File mc Exit v tch ring ra vi Open v
Save As.
Ta s xen vo gia hai mc Save As v Exit mt mc mi c Caption l
-. Ta c th theo di qua hnh VI.3.

Hnh VI.3 V d tch nhm cc


V d: To Pop-up menu
- S dng li menu dng v d trc, nhng ta s tt thuc tnh Visible ca
menu File.
- Sau , m ca s Code ca ng dng, dng s kin MousUp, nhp vo on
lnh sau:
Private Sub Form_MouseUp (Button As Integer, Shift As _
Integer, X
As Single, Y
As
Single)
If
Button
=
vbRightButton
Then
PopupMenu mfile,
vbPopupMenuLeftAlign
End
If
End Sub

- Chy th ng dng, khi ta n chut phi, mt menu s bt ra.


- Lnh PopupMenu cho bit tn menu cn bt ra, l tn m ta t trong
trnh son tho MenuEditor, y l mfile.
- K n, l tham s xc nh cch hin th menu: vbPopupMenuLeftAlign,
vbPopupMenuRightAlign, vbPopupMenuCenterAlign.
Sau khi thit k xong menu, ta s vit cc on m VB s thi hnh mt
cng vic no tng ng vi mc c chn. Cng vic thi hnh s c vit bn
trong s kin Click ca mc .

Trang 63

Visual Basic

II. Hp thoi
II.1. Khi nim
Hp thoi (Dialog Box) l mt trong nhng cch VB dng giao tip vi
ngi dng. C 4 loi hp thoi:

- Hp thng ip (Message Box).


- Hp nhp (Input Box).
- Cc hp thoi thng dng (Common Dialog)
- Hp thoi hiu chnh (Custom Dialog).

II.2. Hp thng ip
Hp thng ip cng c 2 loi: Loi ch xut thng bo, loi c tng tc vi
ngi dng.
II.2.1 Loi ch xut thng bo
- Lc ny ta dng MsgBox nh l mt th tc.
- C php: MsgBox Prompt, Button, Title. Trong :
Prompt: Chui thng bo s hin th.
Button: Cc nt nhn s c hin th trn hp thng bo.
Title: Chui hin th trn thanh tiu ca hp thng bo.
- V d:

Hnh VI 4 Hp thng ip
Chng hn ta xy dng mt biu mu dng hin th tn v im trung bnh
cui nm ca mt hc sinh khi lp 12. Do gi tr im trung bnh cng nh h tn
hc sinh l khng th thay i. Do khi ngi dng Click vo mt Text no , ta
s xut thng bo rng gi tr ny khng th thay i.
Trang 64

Visual Basic
Private Sub Text2_Click()
MsgBox "Vous ne pouvez pas changer la value de ce champ!"
End Sub

Sau khi xut thng bo, VB s i ta n vo nt OK hoc Enter. Sau VB s


thi hnh dng lnh ngay sau dng lnh MsgBox.
i khi dng thng bo qu di, VB s t ng ct a xung dng khc, tuy
nhin c khi s khng nh mong mun ca lp trnh vin. Ta c th thc hin cng
vic ny nh sau:
MsgBox This is a multi-line & chr$(10) & message

Ty theo thng s truyn vo MsgBox m c nhiu loi hp thoi thng ip


khc nhau.
Hng s
vbOKOnly
vbOKCancel
vbAbortRetryIgnore
vbYesNoCancel
vbYesNo
vbRetryCancel

Gi tr
0
1
2
3
4
5

Din gii
Ch hin th nt OK .
Hin th 2 nt OK v Cancel.
Hin th cc nt Abort, Retry, v Ignore.
Hin th cc nt Yes, No, v Cancel.
Hin th 2 nt Yes v No.
Hin th 2 nt Retry v Cancel.

Cc loi biu tng trn hp cng c


Hng s
vbCritical
vbQuestion
vbExclamation
vbInformation

Din gii
Dng cho nhng thng bo li tht bi khi
thi hnh cng vic no .
Dng cho nhng cu hi yu cu ngi
dng chn la.
Dng cho cc thng bo ca chng trnh.
Dng cho cc thng bo cung cp thm
thng tin.

II.2.2 Loi tng tc vi ngi dng


Lc ny MsgBox c dng nh mt hm, khi mt nt no trn hp
thng bo c n, VB s tr v gi tr ca nt n .
C php:
MsgBox (Prompt, Button, Title) As Integer
Hng s

vbOK
vbCancel
vbAbort
vbRetry
vbIgnore
vbYes

Gi tr

1
2
3
4
5
6
Trang 65

Nt

OK
Cancel
Abort
Retry
Ignore
Yes

Visual Basic

vbNo

No

Vi nhng thng ip quan trng, ta mong mun ngi dng phi chn
la mt trong cc xut m ta a ra trc khi chuyn qua ng dng khc, ta s dng
thng s vbSystemModal.

Trang 66

Visual Basic

II.3. Hp nhp
y l loi hp thng ip cho php nhn thng tin t pha ngi s dng. Tuy
nhin trong cc ng dng, hp nhp rt t khi c dng do:
- Ta khng c cch no kim tra thng tin do ngi dng nhp vo khi m
Enter cha c n.
- Thng tin c nhp l rt t.
Sau y l mt v d v hp nhp:
Public Sub Main ()
Dim
ReturnString
As
String
ReturnString = InputBox(Nhap vao ten cua ban)
End Sub

Gi tr tr v ca hp nhp
mt5 chui.
HnhlVI
Hp nhp tn

II.4. Cc hp thoi thng dng


C 6 loi hp thoi thng dng:
- M tp tin
- Lu tp tin
- Chn mu
- Chn Font
- In n
- Tr gip
Tuy c 6 loi, nhng khi thit k biu mu, ta ch thy mt cng c duy nht
l CommonDialog. Mun a Common Dialog vo d n, ta chn:
Project/Components/Controls/Microsoft Common Dialog Control 6.0. Sau ,
Common Dialog s xut hin trong hp cng c ToolBox.
II.4.1 Hp thoi m v lu tp tin
Hai hp thoi ny c chc nng v th hin nh nhau. C hai hp thoi u
hin th danh sch cc tp tin, ngi dng c th duyt qua cc a tm cc tp tin.
Chng ch khc nhau phn tiu v nt nhn.
Cc thuc tnh quan trng:
o Name: tn ca Common Dialog.
o Filter: y l mt chui xc nh phn m rng ca tn cc tp tin m
hp thoi c th m hay lu.
Trang 67

Visual Basic

o FilterIndex: nu c nhiu phn m rng ca tn tp tin c m t trong


thuc tnh Filter th thuc tnh ny xc nh mc nh loi tp tin no c
chn (l mt s nguyn).
o FileName: tr v tn tp tin sau khi ngi s dng hp thoi chn mt
tp tin no .
o CancelError: nu TRUE th tr v gi tr li khi ngi dng chn nt
Cancel, mc nhin gi tr ny l False.
Phng thc:
o ShowOpen: m ra hp thoi m tp tin.
o ShowSave: m ra hp thoi lu tp tin.
V d:
Private Sub Form_Load()
On Error GoTo ErrHandler
dlgFile.Filter = "All Files (*.*)|*.*|Text Files & _
(*.txt)|*.txt|Batch Files (*.bat)|*.bat"
dlgFile.FilterIndex = 2
dlgFile.ShowOpen
Exit Sub
ErrHandler:
MsgBox Err.Description
End Sub

v d trn, ta thit k mt hp thoi m tp tin, trong cc tp tin c hin


th theo 3 nhm tp tin l:
- All Files: (*.*)
- Text Files: (*.txt)
- Batch Files: (*.bat)
Cc nhm tp tin c th hin trong thuc tnh Filter. Mi nhm tp tin cch
nhau bi du phn cch |.
Thuc tnh FilterIndex = 2 tc l khi hp thoi Open c m ln, th loi tp
tin hin th mc nh l Text Files.
Sau khi chn mt tp tin v nhn nt Open, ta s dng thuc tnh FileName
nhn v tn tp tin chn.
Khi ta chn thuc tnh CancelError l TRUE, th khi ngi dng n nt Cancel
trn hp thoi, ta s nhn c mt li v s c cch x l li ny.
Ta chn phng thc ShowOpen hin th hp thoi m tp tin.

Trang 68

Visual Basic

Hnh VI.6 Hp thoi m tp tin


Cc thuc tnh cng tng t i vi hp thoi lu tp tin, ta ch cn thay
i tiu ca Dialog v dng phng thc ShowSave. Di y l minh ha cho hp
thoi lu tp tin.

Hnh VI.7 Hp thoi lu tp tin

Trang 69

Visual Basic

II.4.2 Hp thoi chn mu


y l hp thoi cho php ngi dng chn v hin th cc mu c sn trong
bng mu ca Windows cng nh thit lp thm nhiu mu mi. Mt thuc tnh quan
trng i vi hp thoi chn mu l thuc tnh Color, thuc tnh ny tr v gi tr
ca mu c chn. Ta s dng phng thc ShowColor hin th hp thoi chn
mu.

Hnh VI.8 Hp thoi chn mu


Trong mt s ng dng, ta s dng hp thoi chn mu thay i gi tr
mu ca cc iu khin trong mt s trng hp no . V d thay i mu nn ca
iu khin TextBox trong v d di y:

Trang 70

Visual Basic

Hnh VI.9 V d s dng hp thoi chn mu


Ta s thit k mt nt nhn nh bn cnh iu khin TextBox, nt nhn ny cho
php ngi s dng chn mu nn ca TextBox. Ta c on m lnh sau:
Private Sub Command2_Click()
On Error GoTo ErrHandler
CommonDialog1.ShowColor
Text1.BackColor = CommonDialog1.Color
ErrHandler:
CommonDialog1.ShowColor
End Sub

Trc khi chy chng trnh cn xc nh thuc tnh CancelError =


TRUE.
II.4.3 Hp thoi chn Font ch
Cho php ngi dng chn Font mn hnh, my in hay c hai. Khi dng hp
thoi chn Font ta phi dng thuc tnh Flags quy nh loi Font no s c hin th.

Hnh VI.10 Hp thoi Font


Thuc tnh
Color
FontBold

Gii thch
Lu gi gi tr ca mu c chn
TRUE nu ngi dng chn ch m (Bold) v FALSE nu
Trang 71

Visual Basic

FontItalic
FontStrikeThru
FontUnderLine
FontName
Max
Min
FontSize

ngc li.
TRUE nu ngi dng chn ch nghing (Italic) v FALSE
nu ngc li.
TRUE nu chn ch gch ngang cc k t.
TRUE nu chn ch gch di
Ty
Kch c ln nht ca Font c hin th
Kch c nh nht ca font c hin th
Kch c ca Font c chn

Cc gi tr ca thuc tnh Flags:


Hng
cdlCFPrinterFonts
cdlCFScreenFonts
cdlCFBoth
cdlCFScalableOnly

Gi tr
&H2
&H1
&H3
&H20000

Hiu qu
Ch hin th font my in
Ch hin th font mn hnh
Ch hin th font mn hnh v font my in
Hin th font t l nh l fonts TrueType

Nu mun chn mu cho Font, ta thm 256 vo gi tr ca thuc tnh Flags. Nu


khng c iu ny, ta ch thy tn Font, kiu Font v kch c Font m thi.
m hp thoi chn Font, ta s dng phng thc ShowFont.
II.4.4 Hp thoi in n
y l hp thoi cho php xc lp cc thng tin v my in chng hn nh
bao nhiu d liu c in, my in s hot ng nh th no
Hp thoi in n, n tr v 3 thuc tnh thng dng: Copies, FromPage v
ToPage.

Hnh VI.11 Hp thoi in n

Thuc tnh
Copies
FromPage
Max

Gii thch
S bn in
S th t ca trang bt u
S bn in ti a cho php
Trang 72

Visual Basic

S bn in ti thiu cho php


Nu gn thnh TRUE, mi thay i m ngi dng thc hin s
c ghi li thnh cc thay i trn h thng v c nh hng n
cc ng dng khc nu c s dng my in.
S th t ca trang in cui cng

Min
PrinterDefault

ToPage

m hp thoi in n, ta s dng phng thc ShowPrinter.

III. X l cc s kin chut v bn phm


III.1 S kin chut
Biu mu hoc iu khin c th nhn bit s kin chut khi c con tr chut i
ngang qua.
C 3 s kin chut ch yu, l
S kin
MouseDown
MouseUp
MouseMove

Gii thch
Xy ra khi ngi s dng n chut (chut tri hoc phi)
Xy ra khi ngi s dng th mt nt chut bt k
Xy ra khi con tr chut di chuyn n mt im mi trn mn hnh.

Cc tham s
Tham s
Button
Shift
X, Y

Gii thch
Cho bit phm chut no c n
Cho bit SHIFT hay CTRL hay ALT c n
Xc nh v tr ca con tr chut i vi h ta ca iu khin

V d 1: S dng s kin MouseDown v cc on thng ni tip nhau mi


khi ta dng chut chm mt im trn biu mu. Ta c th thc hin iu vi on
m lnh x l s kin Form_MouseDown nh sau:
Private Sub Form_MouseDown(Button As Integer, & _
Shift As Integer, X As Single, Y As Single)
Line -(X, Y)
End Sub

Trang 73

Visual Basic

V d 2: S dng s kin MouseUp hin th mt thng ip cho bit nt


chut no va c th. S kin Form_MouseUp c x l:
Private Sub Form_MouseUp (Button As
Shift As Integer, X As Single,
If Button = 1 Then
Print Ban vua tha
End If
If Button = 2 Then
Print Ban vua tha
End If
If Button = 4 Then
Print Ban vua tha
End If
End Sub

Integer, & _
Y As Single)
phim chuot trai
phim chuot phai
phim chuot giua

V d 3: S dng s kin MouseMove v cc ng trn lin tc trn biu


mu. S kin Form_MouseMove c x l:
Private Sub Form_MouseMove(Button As Integer, & _
Shift As Integer, X As Single, Y As Single)
Circle (X, Y), 50
End Sub

Trang 74

Visual Basic

Hnh VI.13 V d v MouseMove


Vi v d 3 ta nhn thy rng: s kin MouseMove khng nht thit phi xy ra
ng vi mi Pixel khi con tr chut i qua. Thc ra mi n v thi gian no , h
iu hnh pht ra mt s thng ip. y, ta v ng trn ng vi s kin
MouseMove, nu ngi dng di chuyn chut chm, th cc ng trn s c v st
nhau v ngc li nu chut c di chuyn nhanh.
Hiu chnh con tr chut
Ta c th dng thuc tnh MousePointer hin th mt biu tng, con tr
mn hnh hay con tr chut c hiu chnh. Di y l cc gi tr ca thuc tnh
MousePointer:

Hng

Gi tr

Din gii

ccDefault

(Default) Shape determined by the object.

ccArrow

Arrow.

ccCross

Cross (cross-hair pointer).

ccIbeam

I Beam.

ccIcon

Icon (small square within a square).

ccSize

Size (four-pointed arrow pointing north, south,


east, and west).

ccSizeNESW

Size NE SW (double arrow pointing northeast


and southwest).

ccSizeNS

Size N S (double arrow pointing north and


south).

ccSizeNWSE

Size NW, SE.

ccSizeEW

Size E W (double arrow pointing east and west).

ccUpArrow

10

Up Arrow.

ccHourglass

11

Hourglass (wait).

ccNoDrop

12

No Drop.

ccArrowHourglass

13

Arrow and hourglass.

ccArrowQuestion

14

Arrow and question mark.

ccSizeAll

15

Size all.
Trang 75

Visual Basic

ccCustom

99

Custom icon specified by the MouseIcon


property.

III.2 S kin bn phm


Bn phm cng c 3 s kin, l s kin KeyPress (khi mt phm c m
ASCII bt k c n), KeyDown (khi mt phm bt k c n), KeyUp (khi mt
phm bt k c th)
Ch c iu khin ang c Focus mi bt s kin bn phm. Cn i vi biu
mu, n ch bt c s kin bn phm mi khi n c kch hot v khng c bt
k iu khin no trn n c Focus. Tuy nhin ta c kh khc phc iu ny nu nh
gn gi tr thuc tnh KeyPreview ca biu mu l True, biu mu s nhn mi s kin
bn phm ca mi iu khin t trn n, iu ny hu ch khi ta mun thc hin cng
mt cng vic no cho mt phm c n m khng quan tm rng Focus ang
thuc iu khin no.
Cc s kin KeyDown, KeyUp c th pht hin mt s tnh hung m s kin
KeyPress khng pht hin:
- Khi ngi dng bm mt t hp phm SHIFT, CTRL v ALT.
- Phm nh hng.
- PAGEUP v PAGEDOWN.
- Phn bit c phm s bn phi bn phm v phm s bn tri bn phm.
- p ng khi th phm.
- Phm chc nng khng trng vi menu.
Cc s kin bn phm l khng loi tr nhau. Tc l mt phm c n th c
th l c hai s kin KeyPress v KeyDown cng c pht ra. Nhng nu l mt
phm m KeyPress khng pht hin c th ch c KeyDown v KeyUp xy ra.
Thuc tnh KeyPreview
i khi ta mun tt c cc iu khin trn Form nhn c s kin KeyPress
ch khng phi ch c iu khin ang nhn con tr (Focus), ta s phi s dng thuc
tnh KeyPreview.
Khi chng ta thit k mt Form, gi tr mc nh ca thuc tnh ny s l
False, khi bt k mt s kin bn phm no cng u c gi n iu khin ang
gi quyn iu khin. Tuy nhin nu gi tr ca thuc tnh l True th Form s l ni
nhn mi s kin bn phm.
Sau y l v d v iu ny:
Private
Sub
Form_KeyPress (KeyAscii
As
Integer)
' Gi iu khin n textbox u tin
txtForward.SetFocus
txtBackward.Text = Chr(KeyAscii) & txtBackward.Text
txtAscii.Text = txtAscii.Text & CStr(KeyAscii) & ",
End Sub

Trang 76

Visual Basic

Hnh VI.15 Cc s kin bn phm


Trong v d trn, nu nh gi tr ca thuc tnh KeyPreview l False th cc TextBox
Backward v Ascii khng th nhn c gi tr.

IV. X l ha v giao din


IV.1 Hin th hnh nh
Bi v h iu hnh Windows l h iu hnh s dng giao din ha, do
mt phn quan trng trong ng dng ca ta l cch thc hin th hnh nh trong ng
dng ca mnh. VB cung cp cho chng ta 4 loi iu khin hin th v qun l hnh
nh: Picture Box, Image, Shape v Line.
IV.1.1 S dng Picture Box
Cch dng chnh ca iu khin Picture Box l hin th hnh nh. Hnh nh
mc nh m Picture Box hin th c tn c xc nh bi thuc tnh Picture (c th
bao gm c ng dn).
Ta cng cn ch mt iu l i tng Form cng c th hin th mt
hnh nh xem nh l nh nn thng qua thuc tnh Picture.
Thuc tnh AutoSize ca iu khin Picture Box quy nh kch thc ca
iu khin c th thay i mt cch t ng hay khng? Nu gi tr ca thuc tnh ny
l True, th kch thc ca iu khin s thay i theo kch thc ca hnh nh m n
cha. Tuy nhin s thay i ny c th lm ng dng ca chng ta tr nn xu i do s
thay i kch thc ca iu khin Picture Box s khng quan tm n cc v tr ca
cc iu khin khc cng c trn biu mu. Tt hn ht l chng ta nn th qua tt c
cc hnh nh c th hin th ti thi im thit k quy nh kch thc ca iu
khin cho hp l.
Trang 77

Visual Basic

Hn th na, c th thay i hnh nh hin th bn trong Picture Box bng


cch s dng phng thc LoadPicture thay i gi tr ca thuc tnh Picture.
Ngoi ra ta c th dng Picture Box nh mt vt cha cc iu khin khc.
Cng nh iu khin Frame, ta c th t cc iu khin khc bn trong Picture Box.
Ta thng s dng Picture box cha cc iu khin Label hin th cc thng tin v
trng thi ca ng dng.
Mt cch dng khc ca Picture box l xem nh mt khung v trng v ta
dng cc phng thc Circle, Line, PSet hay Point v ln trn iu khin ny.
IV.1.2 S dng Image Control
Image control cng nh iu khin Picture Box nhng ch dng hin th
hnh nh. N khng th dng lm vt cha v cng khng c mt s thuc tnh nh
iu khin Picture Box.
Cc phng thc dng hin th, thay i hnh nh cng nh iu khin
Picture Box, tuy nhin thuc tnh quy nh vic kch thc thay i mt cch t ng
l thuc tnh Stretch.
Mt trong nhng ng dng ch yu ca iu khin Image Control l s
dng nh mt nt lnh, y l mt cch thc tin li thit k nt lnh cha hnh nh
thay v l cc cu vn bn.
Khi s dng Image Control nh mt nt lnh, ta nn nh rng iu khin
ny s khng th c trng thi n xung khi c Click, v th ta nn thay i hnh nh
hin th bi Image Control cho bit rng nt lnh c n.

IV.2 X l ha
IV.2.1 Ta mn hnh
Gc tri trn ca mn hnh c ta l (0,0) c ngha l X = 0 v Y = 0.
Nh vy tc l khi di chuyn sang phi mn hnh th X tng ln cng nh di chuyn
xung di th Y tng ln.
Tuy nhin VB ch cho php ta v trn biu mu hay hp hnh (picture box).
Khi h ta s c gn vi tng iu khin.
Ta thng s dng 2 h ta ch yu sau: Twips v Pixel.
Twips: y l h ta mc nh dng cho biu mu. Mi im s bng
1/567 cm. y l h ta khng b nh hng bi thit b, kt qu v s nh nhau
trn mn hnh VGA chun, trn my in hay trn mn hnh c phn gii cao khc.
Pixel: y l h ta ph bin nht, mi mt im trn mn hnh s
bng chnh xc vi mt Pixel, nh vy khi s dng h ta ny s gip cho cc ng
dng ha thc hin c nhanh hn v khng phi thng qua qu trnh i h ta
.
IV.2.2 Cc phng thc ha
Cc iu khin c v ln biu mu lc thit k nhng cc phng thc
ha cho php v trc tip khi ng dng thi hnh.
Phng thc PaintPicture
Phng thc PaintPicture cho php sao chp nhanh cc hnh nh t biu
mu, hp hnh v my in.
C php:
Trang 78

Visual Basic

object.PaintPicture picture, x1, y1, width1, height1, x2, y2, width2, height2, opcode
Object

Object l i tng m phng thc s lm vic, n c th l biu


mu, hp hnh hay i tng my in.

Picture

Hnh nh ngun s c v ln i tng phi c ch r bi


thuc tnh Picture ca biu mu hoc hp hnh.

x1, y1

Gi tr ch nh v tr ca hnh nh trn i tng. Thuc tnh


ScaleMode xc nh h ta no c s dng.

Width1

Gi tr xc nh rng ca hnh nh, nu b qua th mc nh l


rng ca nh ngun.

Height1

Gi tr xc nh cao ca hnh nh, nu b qua th mc nh l


cao ca nh ngun.

x2, y2

Cc gi tr xc nh hnh nh s c v li t v tr no. Nu b
qua th gi tr mc nh l 0, tc ton b hnh nh c v li.

Width2

Tng t nh Width1, nhng y l tc ng n nh ngun.

Height2

Tng t nh Height1, nhng y l tc ng n nh ngun.

Opcode

y l ty chn v ch c tc dng vi nh Bitmap.

V d: Thit k chng trnh sao cho khi ngi s dng va di chuyn


va nm gi phm chut th mt hnh nh s c v li ta mi.
Dim re
Private Sub Form_Load()
re = False
End Sub
Private Sub Form_MouseDown(Button As Integer, & _
Shift As Integer, X As Single, Y As Single)
re = True
End Sub
Private Sub Form_MouseMove(Button As Integer, & _
Shift As Integer, X As Single, Y As Single)
If re Then
Form1.PaintPicture Image1.Picture, X, Y, & _
Image1.Width, Image1.Height
End If
End Sub
Private Sub Form_MouseUp(Button As Integer, & _
Shift As Integer, X As Single, Y As Single)
re = False
End Sub

Trang 79

Visual Basic

Qua v d trn ta thy phng thc PaintPicture cho php sao chp nhanh mt
nh ngun trn cc i tng khc .

Hnh VI.16 Phng thc PaintPicture

Phng thc PSet


Phng thc ny thao tc trn tng im v c cng dng gn mt mu
no cho mt im trn i tng.
C php :
Object.PSet [Step] (x, y), [color]
Object

i tng m phng thc lm vic.

Step

Ty chn. Xc nh mi quan h vi ta X v Y hin ti.

(x, y)

Ta ca im.

Color

Mu ca im .

iu khin hnh dng


y l iu khin cho php v cc hnh n gin ln mt biu mu trong
khi thit k. y l mt iu khin rt n gin, ta ch quan tm n cc thuc tnh sau:
- Shape: Quy nh hnh v l hnh oval, ch nht
- BorderStyle: Quy nh kiu ng v.
- BackStyle: Cho bit dng t mu c hay khng.
- BorderWidth: y l rng ca ng v.
V ng trn, cung trn v Ellipse
VB cung cp phng thc Circle cho php ta v ng trn, ng
cong, cung trn, ellipse
v mt ng trn ta dng phng thc Circle do VB cung cp.
C php:
Object.Circle (X, Y), Radius, [color]
Trang 80

Visual Basic

Object

i tng m phng thc lm vic.

(x, y)

Ta tm ng trn.

Radius

Bn knh ca ng trn

Color

Mu t cho ng trn. .

v mt cung trn, ta cng s dng phng thc Circle, tuy nhin ta


cn cung cp thm 2 thng s l im bt u v im kt thc ca cung trn.
Thng thng chng ta quen s dng n v o gc l , tuy nhin i vi VB ta cn
phi a vo n v l Radians.
V d v mt cung trn tm (1000, 1500), bn knh 500 bt u t gc
o
60 n gc 90o ta dng on lnh nh sau:
Const pi = 3.1415
Circle (1000, 15000), 500,

, pi/3, pi/2

v mt Ellipse, ta cung cp thm thng s cui cng (thng s


Aspect) l s co gin ca ng trn theo chiu ngang.
C php tng qut ca phng thc Circle:
object.Circle [Step] (x, y), radius, [color, start, end, aspect]

Chng 7 : TP TIN
Mc tiu:
Chng ny gii thiu v cch thc truy cp h thng tp tin ca
Windows trong VB, thao tc thng gp trong cc ng dng chy trn
Windows.
Hc xong chng ny, sinh vin phi nm bt c cc vn sau:
- S dng m hnh i tng h thng tp tin thao tc vi a, th
mc, tp tin trong Windows.
- S dng cc hm xut/nhp tp tin truy xut tp tin vn bn, tp tin
nh phn, tp tin truy xut ngu nhin.
Kin thc c lin quan:
- Cc cu trc lp trnh trong VB.
- Cch thc t chc h thng tp tin ca h iu hnh Windows (9X,
2000, XP)
Ti liu tham kho:
- Microsoft Visual Basic 6.0 v Lp trnh C s d liu - Chng 6,
trang 88 - Nguyn Th Ngc Mai (ch bin), Nh xut bn Gio dc - 2000.
Trang 81

Visual Basic

I. M hnh File System Object (FSO)


Cung cp cho ng dng ca ta cc kh nng nh to mi, thay i, xa, di
chuyn cc th mc, hoc kim tra xem mt th mc no c tn ti hay khng
Ngoi ra chng ta cng c th ly c cc thng tin lin quan n th mc nh tn,
ngy to, ngy sa i gn nht
M hnh FSO ch h tr truy xut trc tip tp tin dng vn bn thng qua i
tng TextStream, n cha h tr cho tp tin nh phn, do vi tp tin nh phn ta
phi dng lnh Open vi c Binary.
i tng
Drive
Folder
File
FileSystemObject
TextStream

Gii thch
Cho php thu thp thng tin v a, bao gm c cc a
chia s qua mng LAN, CD-ROM
Cho php to, xa, di chuyn v thu nhn cc thng tin h
thng trn th mc.
i tng cho php thao tc trn tp tin.
Cc thuc tnh v phng thc cho php thao tc trn tp
tin, th mc v a.
Cho php c v ghi tp tin dng vn bn (dng Text).

Nu cha c tham chiu n i tng FSO, ta cn chn "Microsoft Scripting


Runtime" t menu Project/References... Cc phng thc ca FSO ta c th xem trong
ca s Object Browser.

I.1 To i tng FileSystemObject


C hai cch, khai bo mt bin kiu FileSystemObject hoc dng phng
thc CreateObject ca lp trnh hng i tng.
Cch 1:
Dim fso As New FileSystemObject

Cch 2:
Set fso = CreateObject("Scripting. FileSystemObject")

Trong Scripting l tn th vin v FileSystemObject l tn i tng.

I.2 Truy cp a, th mc, tp tin


Dng cc phng thc GetDrive, GetFolder, GetFile. V d to mt
handle tr n tp tin "d:\tqdinh\text.txt" ta dng cc dng lnh sau:
Dim
Set

fso
f

As
=

New
FileSystemObject, f
As
File
fso.GetFile("d:\tqdinh\text.txt")

Hoc ta c th to mi th mc, tp tin thng qua cc phng thc


CreateFolder, CreateTextFile. Ngoi ra ta c th xa mt th mc hoc mt tp tin
thng qua DeleteFolder, DeleteFile.
i tng FileSystemObject cn c rt nhiu phng thc, ta c th xem
qua ca s ObjectBrowser.
Trang 82

Visual Basic

Hnh VII.1 Ca s ObjectBrowser vi i


tng FileSystemObject

I.3 Thng tin v a


Cc thng tin ny c truy xut thng qua cc thuc tnh ca i tng
File.
- TotalSize: tng dung lng ca a tnh bng Byte.
- AvailableSpace, FreeSpace: dung lng cn trng ca a.
- DriveLetter: k t a.
- DriveType: loi a ( tho lp hay c nh, mng, CD-ROM, RAM).
- FileSystem: a c qun l bi bn FAT no: FAT16, FAT32, NTFS...

I.4 Lm vic vi th mc
y l cc phng thc c cch s dng rt n gin, v th ta ch xt qua
phng thc no ng vi tc v g (cng vic g) ch khng i su phn tch tng
phng thc.
Tc v

Phng thc
FileSystemObject.CreateFolder
To th mc
FileSystemObject.DeleteFolder
Xa th mc
Folder.Delete
FileSystemObject.MoveFolder
Di chuyn th mc
Folder.Move
FileSystemObject.CopyFolder
Sao chp th mc
Folder.Copy
Folder.Name
Ly tn th mc
Kim tra th mc c tn ti trn FileSystemObject.FolderExists
Trang 83

hay
hay
hay

Visual Basic

a hay khng
Tr v i tng Folder
Ly tn ca th mc cha
Ly tn ca th mc h thng

FileSystemObject.GetFolder
FileSystemObject.GetParentFolderName
FileSystemObject.GetSpecialFolder

I.5 Lm vic vi tp tin


M tp tin ghi d liu
o To tp tin mi: s dng phng thc CreateTextFile.
Dim
fso
As
New
FileSystemObject
fso.CreateTextFile("d:\home\lhbao\test.txt")

o M tp tin ghi vi c ForWriting, lc ny ta s dng phng thc


OpenAsTextStream ca i tng File cng vi i tng TextStream thao tc.
V d:
Dim fso As New FileSystemObject, f As File
Dim ts As TextStream
fso.CreateTextfile("d:\home\lhbao\test.txt")
Set f = fso.GetFile("d:\home\lhbao\test.txt")
Set ts = f.OpenAsTextStream(ForWriting)

o Ghi d liu ln tp tin: ta c th ghi d liu vo tp tin ang m bng


phng thc Write hay WriteLine ca i tng TextStream. S khc bit gia hai
phng thc ny l s c thm k t xung dng nu nh s dng WriteLine. Nu
mun ghi mt dng trng vo tp tin ang m, ta s dng phng thc
WriteBlankLines.
C php: ts l i tng TextStream
ts.Write(s) Ghi chui s ln tp tin
ts.WriteLine(s) Ghi chui s ln tp tin
ts.WriteBlankLines(N) Ghi N dng trng ln tp tin
M tp tin c d liu
o M tp tin c vi c ForReading, lc ny ta s dng phng thc
OpenAsTextStream ca i tng File cng vi i tng TextStream thao tc.
V d:
Dim
Dim
Set
Set

fso As New FileSystemObject, f As File


ts As TextStream
f = fso.GetFile(D:\Home\lhbao\Test.txt)
ts = f.OpenAsTextStream(ForReading)

o c d liu t tp tin: Ta c ba phng thc c d liu t mt tp tin


vn bn, l Read, ReadLine v ReadAll. Ba phng thc ny cho php c mt s
k t, mt dng ca vn bn v ton b vn bn.
Trong khi c ni dung ca tp tin, ta c th s dng phng thc Skip,
SkipLine nhy n phn t d liu mi.
C php: ts l i tng TextStream
ts.Read(N) As String: c N k t t tp tin
ts.ReadLine As String
ts.ReadAll As String

Trang 84

Visual Basic

ng tp tin: S dng phng thc Close ca i tng TextStream.


Di chuyn, sao chp v xa tp tin
S khc bit gia di chuyn v sao chp mt tp tin l tp tin ngun
c cn tn ti th mc ngun hay khng. ng vi mt thao tc, ta cng c hai
phng thc thc hin, l cc phng thc thuc i tng FileSystemObject v
i tng File.
Tc v
Di chuyn mt tp tin
Sao chp mt tp tin
Xa mt tp tin

Phng thc
FileSystemObject.MoveFile
File.Move
FileSystemObject.CopyFile
File.Copy
FileSystemObject.DeleteFile
File.Delete

hoc
hoc
hoc

Cc phng thc ng vi thao tc di chuyn v sao chp tp tin cn c


i s l ng dn n ni cha tp tin ch.

I.6 V d
Thit k mt ng dng nh Notepad ca Windows, s dng FSO truy xut
tp tin.

Trang 85

Visual Basic

TextBox:
txtNoidung

o Thm vo iu khin CommonDialog vo ng dng vi Name: dlgFile.


o S kin mnuNew_Click c x l:
Private Sub mnuNew_Click()
txtNoiDung.Text = ""
End Sub

o on m cho th tc x l s kin mnuOpen_Click:


Private Sub mnuOpen_Click()
On Error GoTo Xuly
dlgFile.Filter = "All Files (*.*)|*.*| & _
Text Files (*.txt)|*.txt"
dlgFile.FilterIndex = 2
dlgFile.ShowOpen
Dim fso As New FileSystemObject, f As File
Dim ts As TextStream
Set f = fso.GetFile(dlgFile.FileName)
Set ts = f.OpenAsTextStream(ForReading)
txtNoiDung.Text = ts.ReadAll()
ts.Close
Xuly:
End Sub

o i vi mnuSave_Click:
Private Sub mnuSave_Click()
On Error GoTo Xuly
dlgFile.Filter = "All Files (*.*)|*.*| & _
Text Files (*.txt)|*.txt"
dlgFile.FilterIndex = 2
dlgFile.ShowSave
Dim fso As New FileSystemObject, f As File
Dim ts As TextStream
fso.CreateTextFile (dlgFile.FileName)

Trang 86

Visual Basic
Set f = fso.GetFile(dlgFile.FileName)
Set ts = f.OpenAsTextStream(ForWriting)
ts.Write (txtNoiDung.Text)
ts.Close
Xuly:
End Sub

o S kin mnuSaveAs_Click cng c x l tng t.


o S kin mnuFont:
Private Sub mnuFont_Click()
On Error GoTo Xuly
With dlgFile
.Flags = cdlCFBoth + 256
.ShowFont
txtNoiDung.Font.Bold = .FontBold
txtNoiDung.Font.Italic = .FontItalic
txtNoiDung.Font.Name = .FontName
txtNoiDung.Font.Size = .FontSize
End With
Xuly:
End Sub

o S kin mnuExit_Click:
Private Sub mnuExit_Click()
End
End Sub

o Lu d n v chy chng trnh.

II. Hm I/O v lnh x l tp tin


C ba kiu tp tin: Tun t, ngu nhin v nh phn
- Tun t (Sequential): y l cch thc truy cp n tp tin cho kiu c
v ghi thnh theo cc khi lin tc nhau.
- Ngu nhin (Random): c v ghi cc tp tin vn bn hoc nh phn c
cu trc theo cc mu tin c di c nh.
- Nh phn (Binary): c v ghi cc tp tin c cu trc thay i.
Cc hm v dng lnh thao tc trn cc kiu truy cp tp tin, cng dng ca
tng hm s c xt n trong phn sau:
Statements &
Functions

Sequential

Random

Binary

Close

Get
Input( )

Input #

Line Input #

Trang 87

Visual Basic

Open

Print #

Put
Write #

II.1. Tp tin tun t


II.1.1 M tp tin
C php:
Open pathname For [Input|Output|Append] _
As filenumber [Len = buffersize]

Nu ta dng tham s Input th tp tin (c ng dn l pathname) phi


tn ti ri, nu khng s gy ra li v tham s ny c dng trong trng hp m tp
tin c. Cn cc tham s Output hoc Append s to mi tp tin v sau m n.
Tham s Len s ch ra s k t trong vng m khi sao chp d liu gia
tp tin v chng trnh x l.
Filenumber l s hiu ca tp tin c m, n mang gi tr kiu
nguyn v nm trong khong t 1 n 511. ly s hiu tp tin mi hp l, ta s
dng hm FreeFile.
II.1.2 c ni dung tp tin
o Hm Input
C php: Input (number, filenumber) As String: hm ny
tr v number k t ca tp tin c s hiu c ch nh bi filenumber.
o Lnh Input #
C php: Input # filenumber, varlist: lnh ny s c ni
dung ca tp tin vo cc bin c ch bi varlist. Lu rng lnh ny ch s dng
vi cc tp tin c ghi bi lnh Write #.
o Lnh Line Input #
C php: Line Input # filenumber, varname: lnh ny s c
ni dung ca mt dng trong tp tin tun t vo bin chui.
II.1.3 Ghi d liu ln tp tin
Ta c 2 cu lnh ghi d liu ln tp tin l Write # v Print #.
o Cu lnh Write #:
C php: Write # filenumber, [outputlist]: lnh ny ghi d
liu vo tp tin tun t, ni dung ghi mi cha trong danh sch bin outputlist, cc
phn t ca danh sch cch nhau bi du phy. Nu ta khng c t outputlist th
mt dng trng s c ghi vo tp tin.
o Cu lnh Print#:
C php: Print # filenumber, [outputlist]: tng t nh
Write# nhng d liu c th nh dng khi ghi ln tp tin.
Trang 88

Visual Basic

i s outputlist c th l:
[{Spc(n) | Tab[(n)]}] [expression] [charpos]

Trong :
- Spc(n): dng xen khong trng vo tp tin vi n l s khong
trng.
- Tab(n): dng xc nh ct bt u ghi d liu trong vng ghi vi
n l s th t ct. Dng Tab khng i s ch v tr bt u ca vng ghi tip theo.
- Expression: biu thc chui hoc biu thc s.
- Charpos: ch nh v tr ca k t k tip. Trong : du ; xc nh
d liu mi s ghi k tip k t cui cng trc . Tab(n) xc nh chnh xc ct
ghi d liu hay Tab ch ra v tr ca d liu cn ghi vo l vng ghi k tip. Nu tham
s ny b b qua, d liu s c ghi bt u t dng k tip.
II.1.4 ng tp tin
C php: Close filenumberlist: ng li cc tp tin c m vi cc
s hiu c m t trong filenumberlist, filenumberlist c dng sau:
[[#]filenumber] [, [#]filenumber] . . .

II.1.5 V d
Open "TESTFILE" For Output As #1
' M tp tin ghi.
Print #1, "This is a test"
' Ghi chui vo tp tin.
Print #1,
' Ghi mt dng trng vo tp tin.
Print #1, "Zone 1"; Tab ; "Zone 2"
' To hai vng ghi.
' Phn cch hai chui bi khong trng.
Print #1, "Hello" ; " " ; "World"
Print #1, Spc(5) ; "5 leading spaces " ' To 5 khong trng
Print #1, Tab(10) ; "Hello"
' ghi chui ti ct th 10.
' Gn gi tr thuc kiu Boolean, Date, Null v Error.
Dim MyBool, MyDate, MyNull, MyError
MyBool = False : MyDate = #February 12, 1969# : MyNull = Null
MyError = CVErr(32767)
Print #1, MyBool ; " is a Boolean value"
Print #1, MyDate ; " is a date"
Print #1, MyNull ; " is a null value"
Print #1, MyError ; " is an error value"
Close #1
' ng tp tin

V sau y l ni dung ca tp tin TESTFILE sau khi thc thi chng trnh:

Trang 89

Visual Basic

This is a test
Zone 1
Zone 2
Hello World
5 leading spaces
Hello
False is a Boolean value
2/12/1969 is a date
Null is a null value
Error 32767 is an error value

ng dng sau y cho php c ni dung 1 tp tin c la chn.


o Thit k chng trnh c giao din:

y ta c s dng iu khin danh sch a, th mc, tp tin la chn tp


tin cng vi 1 TextBox hin th ni dung.
o Cc s kin c x l nh sau:
Private Sub Drive1_Change()
Dir1.Path = Drive1.Drive
End Sub
Private Sub Dir1_Change()
File1.Path = Dir1.Path
End Sub
Private Sub Command1_Click()
Dim fname As String, str As String
fname = Dir1.Path + "\" + File1.filename
Open fname For Input As #1
Do While Not EOF(1)
Line Input #1, str
Text1.Text = Text1.Text + str + vbCrLf
Loop
Close #1
End Sub

o Lu d n v chy chng trnh, ta c kt qu:


Trang 90

Visual Basic

II.2. Tp tin truy xut ngu nhin


II.2.1 M tp tin
C php
Open pathname [For Random] As filenumber _
[Len = RecLength]

Bi v tham s Random l mc nh, do t kha For Random l


khng cn thit.
Tham s Len cn mt kch thc ng ca mu tin, nu nh hn th s
gy ra li, ln hn s gy lng ph khng gian a.
Filenumber: s hiu tp tin khi m (c ng dn l pathname)
II.2.2 c ni dung tp tin
o Cu lnh Get:
C php: Get [#] filenumber, [recnumber], varname: lnh
ny s c ni dung ca mu tin th recnumber trong tp tin vo bin mu tin
varname, trong mu tin u tin c s th t l 1.
II.2.3 Ghi d liu ln tp tin
o Cu lnh Put:
C php: Put [#] filenumber, [recnumber], varname: Lnh
ny s thay th hoc thm mi mu tin vo tp tin. Nu nh s th t mu tin
(recnumber) ch n mu tin tn ti, th ni dung ca mu tin c thay th.
thm mi mu tin, s th t mu tin cn c gi tr l s mu tin hin c ca tp tin
cng thm 1.
II.2.4 ng tp tin
C php: Close filenumberlist: ng li cc tp tin c m vi
cc s hiu c m t trong filenumberlist, filenumberlist c dng sau:
[[#]filenumber] [, [#]filenumber]...

II.2.5 V d
Gi s ta c khai bo 1 mu tin nh sau:
Type Hanghoa

Trang 91

Visual Basic
MaHang As String * 10
TenHang As String * 40
DVTinh As String * 15
Gia As Double
End Type

o Ghi d liu ln tp tin c cu trc l cc mu tin nh trn


Dim h As Hanghoa
h.MaHang = "AM01"
h.TenHang = "Dau goi Clear"
h.DVTinh = "Chai"
h.Gia = 14000#

Open "E:\Test.dat" For Random As #1 Len = LenB(h)


Put #1, 1, h
Close #1

o c d liu t tp tin c cu trc nh trn:


Dim h As Hanghoa
Open "E:\Test.dat" For
Get #1, 1, h
Close #1
MsgBox h.MaHang & ": "
h.DVTinh & ": "
Thong tin Hang

Kt qu khi c d liu nh sau:

Trang 92

Random As #1 Len = LenB(h)


& h.TenHang & ": " & _
& Str(h.Gia), , _
Hoa

Visual Basic

Chng 8: CC KHI NIM C BN V C S


D LIU
Mc tiu:
Chng ny gii thiu v mt s khi nim trong lp trnh c s d liu
vi VB, nhng vn cn thit khi thit k cc ng dng truy cp c s d
liu.
Hc xong chng ny, sinh vin phi nm bt c cc vn sau:
- Mt s khi nim khi lp trnh c s d liu trong VB.
- Phn bit DAO, RDO, ADO.
- S dng mi trng pht trin VB tng tc vi c s d liu.
Kin thc c lin quan:
- Cu lnh SQL truy vn d liu.
Ti liu tham kho:
- Microsoft Visual Basic 6.0 v Lp trnh C s d liu - Chng 18,
trang 447 - Nguyn Th Ngc Mai (ch bin), Nh xut bn Gio dc
2000.

Trang 93

Visual Basic

I. C s d liu
I.1. Khi nim
C s d liu l mt kho cha thng tin. C nhiu loi c s d liu, nhng
trong khun kh bi ging ny ta ch quan tm n cc ng dng lp trnh lin quan
n c s d liu quan h.
Mt c s d liu quan h:
o Cha d liu trong cc bng, c cu to bi cc dng cn gi l cc mu
tin, v ct cn gi l cc trng.
o Cho php ly v (hay truy vn) cc tp hp d liu con t cc bng.
o Cho php ni cc bng vi nhau cho mc ch truy cp cc mu tin lin
quan vi nhau cha trong cc bng khc nhau.

I.2. B my (Engine) c s d liu


Chc nng c bn ca mt c s d liu c cung cp bi mt b my c s
d liu, l h thng chng trnh qun l cch thc cha v tr v d liu.
Chng hn Microsoft Jet l b my c s d liu c s dng khi truy cp d
liu Access.

I.3. Bng (Table) v trng (Field)


Cc c s d liu c cu thnh t cc bng dng th hin cc phn nhm d
liu. Chng hn, nu ta to mt c s d liu qun l cc ti khon trong cng vic
kinh doanh, ta phi to mt bng cho Khch hng, mt bng cho Ha n v mt bng
cho Nhn vin. Bng c cu trc nh ngha sn v cha d liu ph hp vi cu trc
ny.
o Bng: cha cc mu tin l cc mu d liu ring r bn trong phn nhm d
liu.
o Mu tin: cha cc trng. Mi trng th hin mt b phn d liu trong
mt mu tin. V d nh mi mu tin th hin mt mc trong danh b a ch
cha cc trng tn v h, a ch, thnh ph, s in thoi
Ta c th dng chng trnh Visual Basic tham chiu v thao tc vi c s
d liu, bng, mu tin v cc trng.

I.4. Tp mu tin (Recordset)


Recordset l mt cu trc d liu th hin mt tp hp con cc mu tin ly v t
c s d liu. V khi nim, n tng t nh mt bng nhng c thm mt vi thuc
tnh ring bit quan trng.
Cc Recordset c th hin nh cc i tng. Cng nh cc i tng khc
trong Visual Basic, cc i tng recordset c cc thuc tnh v phng thc ring.

II. Truy xut c s d liu trong Visual Basic 6.0


Visual Basic cung cp km theo n mt b my c s d liu c th hiu c
d liu ca Microsoft Access gi l Joint Engine Technology (JET). JET l mt b
Trang 94

Visual Basic

my truy cp c s d liu hng i tng v n l mt phn khng th thiu c


ca Visual Basic. Phin bn ca JET i km vi VB 6.0 l min ph ngha l VB c
th truy xut trc tip c s d liu ca Microsoft Access. Giao din VB truy xut
JET c tn l Data Access Objects (DAO).
JET l mt b my c s d liu tuyt vi cho cc ng dng vn phng chy
trn my n, nhng hiu sut ca n gim ng k khi s lng ngi dng tng ln
v c s d liu c m rng. V iu ny JET khng phi l mt gii php ti u
cho cc ng dng c s d liu nhiu ngi dng. Cho n nay ngi ta cha c mt
thng k chnh xc c kch thc d liu ti a hay s lng ngi dng ti a ca
JET nhng nhn chung JET b gii hn nhiu hn so vi cc gii php khc trong mi
trng a ngi dng. Tuy vy, JET l im khi u tt nht cho ngi lp trnh VB
bi v s n gin ca n.
Khi kch thc d liu tng ln, ngi lp trnh bao gi cng mun xy dng
mt ng dng Khch/Ch (Client/Server) c kh nng bo mt cao v linh hot. V l
, Microsoft h tr trong VB truy cp cc c s d liu quan h c thng dch
bi chun Open Database Connectivity (ODBC). ODBC l mt k thut cho php truy
cp cc c s d liu quan h cao cp nh SQL SERVER hay ORACLE. Tuy nhin,
ODBC cng c th c s dng truy cp cc c s d liu nh t chc bng
Microsoft Access hay Foxpro, thm ch cc c s d liu my ch nh IBM DB2.
Visual Basic s dng giao din i tng Remote Data Objects (RDO) truy cp
ODBC.
DAO v RDO l nhng k thut h tr vic truy xut n cc c s d liu
quan h. Tuy nhin, Microsoft li cung cp mt cng c hu ch hn truy cp d
liu goi l OLEDB. OLEDB l k thut cho php d liu c truy xut t c 2 ngun
c s d liu: quan h v khng quan h. iu c ngha l gm cc c s d liu
ca Microsoft Access, Oracle, SQL SERVER v c cc ngun d liu khng quan h
nh Excel, Microsoft Index Server, Microsoft Exchange, Active Directory Visual
Basic s dng giao din i tng ActiveX Data Objects (ADO) truy cp OLEDB.
Visual Basic cung cp cho ta nhiu cng c truy cp d liu nh DAO,
RDO, ADO. Cu hi thng t ra l: K thut no c s dng lc no u?
Nhiu ngi cho rng DAO & RDO li thi v ngi ta him s dng chng. Tht
ra DAO & RDO l cc in hnh cho mt vi kh nng tiu biu ca ADO. Hin nay,
vn cn kh nhiu ng dng s dng DAO & RDO v tht s chng b gii hn trong
chng mc no . OLEDB thc s cung cp mt kh nng rng ln truy cp cc
c s d liu t nhiu ngun khc nhau. Tuy vy, trong mt s trng hp mt gii
php dng RDO li hu dng hn ADO.

III. Dng Visual Basic to mt c s d liu


Thng thng chng ta s s dng cc h qun tr c s d liu to nn mt
c s d liu, nhng trong phn ny ta s xt qua tnh nng to c s d liu bng
Visual Basic 6.0. Ta c th p dng phng php ny cho nhng c s d liu nh v
tng thch vi Microsoft Access.

Trang 95

Visual Basic

III.1 S dng ca s c s d liu


o T Menu ca VB6, chn mc Add-Ins, Visual Data Manager. Ca s Visual
Data Manager s xut hin.
o Chn mc File -> New -> MicroSoft Access -> Version 7.0 MDB.
o Chn th mc ta mun lu c s d liu v tn ca c s d liu.

Hnh VIII.1 Ca s Visual Data


Manager
To bng
to mi mt bng, ta chn Properties trong ca s Databases, nhp
chut phi, chn New Table, t tn cho Table ti Table Name, n Add Field to
mi cc trng cho bng.

Hnh VIII.2 Ca s to
Table
Trang 96

Visual Basic
Ta s nhp tn trng ti Name, chn kiu ca trng ti Combo Type,
ty chn FixedField v VariableField xc nh di ca trng l c nh hay thay
i.
Sau khi xc nh y cc thuc tnh ca trng, n OK v tip tc thm
vo cc trng khc cho bng. Nu thm mi y cc trng ca bng, n Close
quay v ca s Table Structure.
Sau khi quay v ca s Table Structure, ta s xc lp cc ch mc cng nh
kha chnh ca bng.

Hnh VIII.3 Ca s to kha


chnh v ch mc

Ti Name, ta s nhp vo tn ca ch mc, ri chn cc trng tham gia


vo ch mc . Nu ta chn Primary th chnh l cc trng cu thnh kha chnh
ca bng. Chn Unique tc l gi tr ca ch mc s khng c s trng lp.
n Close xc nhn rng ta xy dng xong tp cc ch mc ca bng.
Sau khi hon thnh tt c cc thao tc trn, to bng ta n Build the
Table.
Tuy rng y l mt tnh nng mi ca VB6, tuy nhin chng ta cng s gp
phi rt nhiu bt tin khi phi thit k mt c s d liu hon chnh cng nh trong
qu trnh bo tr v s dng (kh khn trong vic thay i cc thuc tnh xc lp,
khng to lin kt gia cc bng c ). Mt phng cch tt nht l nn dng
cc h qun tr c s d liu chuyn dng thc hin cng vic nu trn.

Trang 97

Visual Basic

Hnh VIII.4 To bng cho c s d liu

III.2 Dng Visual Data Manager to giao din


Ta c th thit k mt Form nhp liu n gin cho mt Table t Visual Data
Manager. Cc bc tin hnh nh sau:
T Visual Data Manager chn C s d liu cn thao tc.
Chn Data Form Design t mc Utility.
Chn Table cn cho vic to Form v cc trng hin th trn Form (thng
thng chng ta s cho hin th tt c cc trng).
Chn Build the Form, biu mu mi c to trong n ca chng ta.

Hnh VIII.5 Thit lp cc thuc tnh


cho Form
Kt qu sau khi chng ta xy dng Form bng Visual Data Manager:

Trang 98

Visual Basic

IV. S dng ca s xem d liu (Data View)


VB6 cn h tr cho ngi lp trnh kh nng lm vic vi c s d liu m
khng phi thng qua cng c qun tr c s d liu hoc cc cng c trong Add-In.
Cng c ny chnh l ca s Data View.
T Menu ca VB chn Data View hoc nhn nt Data View trn thanh cng
c.
Ca s Data View xut hin cho ta hai la chn: Data Links v Data
Environment Connections.

Hnh VIII.6 Ca s Data


View
Lin kt d liu (Data Link) l mt cch kt ni mi trng pht trin ca VB6
vi mt c s d liu no . Mt kt ni mi trng d liu (Data Environment
Connection) l cch thc s dng c s d liu trong mt n c th. im khc bit
gia hai thnh phn ny l s lin quan gia c s d liu vi n c th.
s dng c s d liu theo kiu Data Link, ta tin hnh nh sau:
Chn Data Links, n chut phi -> Add a Data Link hoc n nt Data Link
trn thanh cng c ca ca s.
Ca s Data Link Properties xut hin.

Trang 99

Visual Basic

Hnh VIII.7 Hp thoi Data Link


Properties
Chn trnh cung cp Microsoft Jet, chn Next.
Chn c s d liu mun ni kt n, nhn OK.
Lin kt d liu cung cp mt cch nhn tm lc v ngun d liu. Mi ln ta
to mt lin kt d liu, ta c th duyt bng cch m rng phn t trong danh sch
tm lc. Thc hin iu ny bng cch nhn vo du cng bn tri mi phn t (hnh
VIII.8).

Hnh VIII.8 Ca s Data

V. S dng iu khin d liu to giao din ngi s


dng
iu khin d liu gip cho ngi s dng lin kt biu mu ca mnh n
ngun c s d liu. iu khin d liu cung cp cho ngi s dng nhng tnh nng
x l d liu c bn nh duyt qua cc mu tin, thm mi, cp nht.
i vi phin bn VB6 cung cp cho chng ta 3 trnh iu khin d liu: DAO
(Data Access Object), RDO (Remote Data Object) v ADO (ActiveX Data Object).

Trang 100

Visual Basic

V.1 Kt ni vi c s d liu v lm vic vi cc mu tin thng qua iu


khin ADO Data
V.1.1 Hin th d liu
Nu nh chng ta xy dng mt biu mu ch hin th cc mu tin ca mt
bng, iu ny rt n gin v ta khng cn phi lp trnh g c.
s dng iu khin ADO Data, ta cn nh du Microsoft ADO Data
Control 6.0 (OLEDB) trong hp thoi Components.

Hnh VIII.9 Hp thoi Components


Chn iu khin ADO Data t hp cng c a vo biu mu, lin kt n
ngun d liu thng qua hai thuc tnh ConnectionString v RecordSource.
ConnectionString: Xc nh ngun d liu cn ni kt, chnh l chui ni
kt ch n c s d liu m ta thao tc.
RecordSource: Xc nh xem ni kt ca ta ang thao tc trn bng no.
V d: To mt ni kt n c s d liu "C:\Program Files\Microsoft Visual
Studio\VB98 \Biblio.mdb".
Chn Use Connection String, n Build.
Chn Microsoft Jet 4.0 OLE DB Provider.
Chn c s d liu nh v d.
n OK.
Quay v ca s Property Pages, chn Tab RecordSource, xc nh cc ty
chn nh hnh v.
n Close.

Trang 101

Visual Basic

Sau khi xc nh c ni kt, ta vn khng thy c s hot ng ca iu


khin d liu, nguyn nhn do chng ta khng c iu khin hin th ni dung, cch
gii quyt vn l dng iu khin TextBox hin th d liu.
dng iu khin Textbox hin th d liu, ta xc nh hai thuc tnh sau y
ca iu khin: DataSource, DataField. Cc thuc tnh ny xc nh ngun d liu v
tn trng, i vi v d ny l Adodc1 (tn ca ADO Data) v Au_Id.
Thc thi n, ta c kt qu sau:

Hnh VIII.11 V d dng ADO Data


V.1.2 Cp nht d liu
Thao tc cp nht d liu cng kh n gin, iu khin ADO Data s t ng
cp nht li gi tr ca mu tin hin hnh mi khi ta duyt qua mu tin khc, v vy ta
cng khng phi lm g c.
V.1.3 Thm mi mu tin
c th thm mi mu tin, ta c hai phng cch nh sau:
Thit lp thuc tnh EOFAction ca iu khin ADO Data l 2-AddNew.
Cch ny khng cn phi lp trnh g c.
Trang 102

Visual Basic

thm mi vo mt mu tin, ta s i n cui mu tin, sau n nt


tip, ta nhn thy gi tr ca cc trng s rng ch chng ta nhp mi thng tin
vo.

Hnh VIII.12 Thm mi mu tin dng


ADO Data
Thm mi mu tin bng 2 phng thc AddNew v Update, cc bc tin
hnh s nh sau:
- Thit k hai nt lnh l ADD NEW v UPDATE.
- Trong s kin Click ca hai nt trn ln lt nhp vo cu lnh sau:
Adodc1.Recordset.AddNew, Adodc1.Recordset.Update vi Adodc1 l
thuc tnh Name ca iu khin d liu.

Hnh VIII.13 S dng phng thc AddNew v Update

V.1.4 Dng s kin MoveComplete cp nht giao din ngi s dng


Ta c th dng s kin MoveComplete ca iu khin ADO Data khi ng
sa i trong ng dng khi ngi s dng di chuyn t mu tin ny sang mu tin khc.
S kin MoveComplete c kch hot khi mt mu tin mi thnh mu tin hin
hnh. y l mt trong vi s kin c kch hot khi iu khin di chuyn t mu tin
ny sang mu tin khc. Cc s kin khc bao gm WillChange, c kch hot khi iu
khin di chuyn t mu tin ny sang mu tin khc hay thay i mt mu tin v s kin
RecordChangeComplete, xy ra khi mt mu tin c sa i thnh cng trong c s
d liu nh mt kt qu ca hot ng trong iu khin d liu.
Trang 103

Visual Basic

V.1.5 Xa mu tin
xa mu tin trong mt ng dng s dng iu khin d liu, ta dng phng
thc Delete ca i tng Recordset ca iu khin d liu.
V d: Adodc1.Recordset.Delete
V.1.6 Dng s kin WillChangeRecord m bo d liu hp l
Trong lp trnh c s d liu, vic m bo rng d liu nhp vo ph
hp vi cc quy tc ca mt c s d liu ngi dng c th l yu t quan trng bc
nht v mang tnh bt buc.
i vi iu khin ADO Data, vic xc nh xem d liu c hp l hay
khng s c vit trong s kin WillChangeRecord ca iu khin. S kin ny s
c kch hot khi ngi dng thay i thng tin ca mt mu tin v di chuyn sang
mu tin khc hoc thm mi mu tin.

V.2 Kt ni vi c s d liu v lm vic vi cc mu tin thng qua iu


khin Data (DAO Data Control)
iu khin Data hn ch hn iu khin ADO Data v n ch cho php chng ta
ni kt n mt s ngun d liu c th, chng hn nh Access, Excel, Foxpro,
nhng Version ca cc h qun tr ny cng l nhng Version lu i.
s dng iu khin ny, ta cn xc nh cc gi tr ca cc thuc tnh sau:
Connect, DatabaseName, RecordSource.
- Connect xc nh c s d liu ca ta l loi g.
- DatabaseName ch n mt c s d liu c th.
- RecordSource l mt bng d liu trong c s d liu (i vi c s d
liu Access).
Sau khi xc nh gi tr ca cc thuc tnh trn th vic duyt qua cc mu tin
cng tng t nh ca iu khin ADO Data.
Thuc tnh EOFAction ca iu khin Data quy nh vic chng ta c th thm
mi mt mu tin hay l khng (tng t iu khin ADO Data).

Trang 104

Visual Basic

Chng 9: CC I TNG TRUY CP


D LIU (DATA ACCESS OBJECTS)
Mc tiu:
Chng ny gii thiu v th vin i tng Data Access Objects, cch
thc c s dng truy cp c s d liu ca cc h qun tr c s d liu
nh nh Microsoft Access, Foxpro...
Hc xong chng ny, sinh vin phi nm bt c cc vn sau:
- M hnh cy phn cp ca i tng DAO.
- S dng th vin i tng DAO tng tc vi c s d liu trong
VB.
Kin thc c lin quan:
- Cc cu trc lp trnh trong VB.
- Cu lnh truy vn d liu trong c s d liu.
Ti liu tham kho:
- Microsoft Visual Basic 6.0 & Lp trnh c s d liu - Chng 20,
trang 571 - Nguyn Th Ngc Mai (ch bin), Nh xut bn Gio dc - 2000.
- T hc Lp trnh c s d liu vi Visual Basic 6 trong 21 ngy
(T1) Chng 8, trang 305 - Nguyn nh T (ch bin), Nh xut bn Gio
dc - 2001.

Trang 105

Visual Basic

Cc ng dng Visual Basic c th thao tc trn c s d liu thng qua DAO


(Data Access Objects). Dng DAO ta c th thi hnh cc cu truy vn xem, cp
nht, cng nh to mi cc gi tr cho cc mu tin ca bng
DAO c th c s dng cho cc ng dng truy cp d liu t my c nhn hoc
cc ng dng theo kiu Khch/Ch (Client/Server). Tuy nhin, vo thi im hin ti,
chng ta ch dng DAO thao tc vi c s d liu Jet v dng ng dng
Client/Server l th mnh ca ADO (ActiveX Data Objects).

I. M hnh i tng Data Access Objects (DAO)


M hnh i tng DAO kh phc tp vi hng trm yu t vi rt nhiu tp hp
cha kh nhiu i tng, mi i tng li c cc thuc tnh, phng thc v cc i
tng con ca ring n.
Sau y l m hnh cy phn cp ca i tng DAO:

Trong lp trnh DAO, c mt tp hp ct li cc k thut thng dng c s


dng gn nh mi chng trnh. Chng bao gm:
o Thi hnh cu truy vn SELECT ly v d liu t c s d liu.
o Duyt qua tng mu tin trong mt Recordset.
o Thi hnh cu truy vn hnh ng (Update, Delete, Insert).
o Sa i cu trc c s d liu.
Trang 106

Visual Basic

o X l li pht sinh bi truy cp c s d liu.

II. S dng DAO lm vic vi c s d liu


s dng i tng DAO, ta cn tham chiu n i tng ny bng cch chn
Project -> References, sau nh du chn Microsoft DAO 3.51 Object Library.
Nhn OK v ta c th s dng cc i tng do DAO cung cp.

II.1 i tng Database


i tng Database l ni bt u vic truy cp n c s d liu, hay ni cch
khc c th kt ni v thao tc vi c s d liu thng qua DAO th cn thng qua
i tng u tin l i tng Database.
Trc tin ta khai bo mt i tng Database nh sau:
Dim db As Database
i tng Database c rt nhiu phng thc, ta s ch xt qua nhng phng
thc c bn v quan trng nht cho php ta thao tc vi c s d liu.
II.1.1 S dng phng thc OpenDatabase to mt i tng Database
Ta dng phng thc OpenDatabase cho php mt i tng Database
tham kho n mt c s d liu c th, i s bt buc ca phng thc l mt chui,
kt qu tr v l mt i tng Database, v vy trc khi s dng phng thc ny, ta
cn khai bo mt i tng Database. Chng hn nh:
Dim
Set

db
As
db =

Database
OpenDatabase("..\..\baigiang.mdb")

C php y ca phng thc OpenDatabase:


Set database = OpenDatabase (dbname, options, read-only, connect)
ngha cc tham s ca phng thc OpenDatabase nh sau:
Thnh phn

ngha

database

Bin kiu i tng Database m ta mun s dng.

dbname

Chui xc nh s tn ti ca c s d liu Jet hoc l tn


ngun d liu (DSN) dng ODBC data source.

options

Bin mang gi tr xc nh ty chn loi c s d liu.

read-only

Mang gi tr kiu Boolean, TRUE nu nh m c s d liu


dng ch c, ngc li cho kiu truy xut c v ghi.

connect

Kiu chui, xc nh kiu ni kt bao gm c mt khu.


Cc gi tr ca ty chn Options
Gi tr

dbDriverNoPrompt

ngha
Trnh qun l ODBC dng chui ni kt
cung cp tn c s d liu v ni kt. Nu
Trang 107

Visual Basic

ta khng cung cp thng tin c th, s xy


ra li ti thi im thc thi.
dbDriverPrompt

Trnh qun l ODBC hin th hp thoi cc


ngun d liu ODBC. Chui kt ni s
c to t ngun d liu do ngi dng
chn thng qua hp thoi, nu khng
ngun d liu mc nh s c s dng.

dbDriverComplete

Nu ni kt v tn ngun d liu xc nh
y cc thng tin cn thit cho mt ni
kt th trnh qun l ODBC s dng chui
trong ni kt nu khng s nh trng hp
s dng dbDriverPrompt.

II.1.2 S dng phng thc Execute thi hnh cu truy vn hnh ng


Ta s dng phng thc Excute ca i tng Database thi hnh mt
cu lnh SQL trn c s d liu. tuy vy phng thc ny khng nn dng cho mi
trng hp. ta ch nn dng phng thc Excute thi hnh cc lnh SQL cho cc
mc ch sau:
o Cp nht, xa hay sao chp mu tin (trong Access/Jet, ta gi l cc truy
vn hnh ng).
o Sa cu trc c s d liu (c bit nh l cc lnh DDL Ngn ng
nh ngha d liu, Data Definition Language).
Cc cu truy vn SELECT theo quy c (ly v cc mu tin) c thi
hnh nh phng thc OpenRecordset ca i tng Database.
C php:
Object.Execute Source
- Object: i tng Database.
- Source: cu SQL kiu bin chui.
V d: Tng gi bn mi sn phm ca bng Products ca CSDL
Northwind.MDB ln 10%.
Dim db As Database
Private Sub Form_Load()
Set db = OpenDatabase(Northwind.mdb)
End Sub
Private Sub cmdExcute_Click()
db.Excute UPDATE Products & _
SET [Unit Price] = [Unit Price] * 1.1
End Sub

II.2 i tng Recordset


i tng Recordset xc nh mt tp hp cc mu tin t mt bng c s hoc
kt qu ca mt cu lnh truy vn no . Ti mt thi im bt k, i tng

Trang 108

Visual Basic

Recordset ch tham kho n mt mu tin n, l mu tin hin hnh. s dng


i tng Recordset, ta dng phng thc Open Recordset.
C php thng dng ca OpenRecordset nh sau:
Set recordset = object.OpenRecordset source [, Type][, Options][, LockEdits]
Trong phng thc OpenRecordset tr v i tng Recordset v object l
bin i tng kiu Database, tham s Source y s l mt cu lnh truy vn
(SELECT).
i tng Recordset c nhiu loi (Type) khc nhau, sau y l bng phn
tch cng dng cng nh u, nhc im ca tng kiu Recordset.
Kiu
Dynamic
(dbOpenDynamic)

u im
Cp nht c, kt qu tr v
c th thuc nhiu bng khc
nhau thng qua ni kt bng.
Mt u im ni tri l
i vi c s d liu nhiu
ngi s dng, n c c
kh nng t cp nht khi cc
ngi dng khc cp nht
mu tin cha trong .
Dynaset
Cc chc nng tng t nh
(dbOpenDynaset)
Dynamic, nhng t c
hiu qu hn do khng thao
tc trn d liu thc s m l
s tham chiu n d liu.
Forward-Only
C th ly v mu tin t
(dbOpenForwardOnly) nhiu bng thng qua ni kt
bng. c bit hiu qu i
vi cc Recordset nh.
Snapshot
Tng t nh Forward-Only
(dbOpenSnapshot)
Table
(dbOpenTable)

Nhc im
Km hiu qu hn so vi kiu
Dynaset

Tm kim khng tht s hiu


qu do khng c cc ch mc.

Ta ch c th di chuyn n
pha trc.

Khng cp nht c vi d
liu Jet. Tr v mt bng sao
n d liu, nn thao tc chm
hn rt nhiu so vi Dynaset.
C th nh v v ly v cc Khng th thc hin mt cu
mu tin mt cch nhanh truy vn lin quan n nhiu
chng v cc bng c lp bng.
ch mc.

Lu :
9 Nu ta m mt Recordset vi b my CSDL Microsoft Jet v ta khng xc
nh tham s type ca OpenRecordset th dbOpenTable l mc nh (nu c th).
9 Vi mt Recordset xc nh mt cu truy vn, dbOpenDynaset l mc nh.
9 Vi cch truy cp CSDL theo ODBC, dbOpenForwardOnly l mc nh.
Mt s gi tr ca tham s Option, mt hng s c th c kt hp bi
nhiu gi tr khc nhau, xc nh c tnh ca Recordset.
Trang 109

Visual Basic

Hng s
dbAppendOnly

ngha
Cho php ngi dng thm mu tin mi vo Recordset, nhng
khng c sa i hay xa cc mu tin c sn (ch vi
dynaset-Recordset ca JET).

dbSQLPassThrough Cho php tham kho n cc cu SQL ca b my CSDL JET


khi khi n c ni vi mt ngun d liu ODBC (ch vi
snapshot-Recordset ca JET).
dbSeeChanges

Mt li thc thi s xut hin khi mt ngi dng thay i d


liu m ngi khc ang thao tc (ch vi dynaset-Recordset
ca JET). iu ny tht s c ch cho ng dng a ngi dng
cn ng b ha d liu.

dbDenyWrite

Ngn cn ngi dng khc sa i hay thm mu tin.

dbDenyRead

Ngn cn ngi dng khc c d liu t mt bng (chi vi


Table-Recordset ca JET).

dbForwardOnly

Mt Recordset ch cho php di chuyn ti (snapshot-Recordset


ca JET).

dbReadOnly

Khng cho ngi dng thay i d liu.

dbRunAsync

Thc thi mt cu truy vn khng ng b (truy cp d liu theo


ODBC).

dbExecDirect

Thc thi cu truy vn b qua phng thc SQLPrepare v trc


tip gi phng thc SQLExecDirect (truy cp d liu ODBC
trong mi trng a ngi dng).

Lu : Ta khng th s dng tham s lockedits khi options l dbReadOnly.


Mt s cc gi tr ca tham s lockedits:

Trang 110

Visual Basic

Hng s

ngha

dbReadOnly

Ngn cn ngi dng sa i d liu (mc nhin i vi cch


truy cp d liu theo ODBC). Ta c th s dng hng s ny
tham s Options hay LockEdits u c, nhng khng th cng
mt lc (li thc thi xy ra).

dbPessimistic

Kha trang bi quan trong mi trng a ngi dng. Trang cha


mu tin ang sa i s b kha li khi phng thc Edit c
thc thi (mc nh i vi JET).

dbOptimistic

Kha trang lc quan trong mi trng a ngi dng. Trang


cha mu tin ang sa i s khng b kha cho ti khi phng
thc Update c gi thc thi.

dbOptimisticValue

Kha trang lc quan ng thi da vo gi tr ca mt dng c


th (ch i vi cch truy cp d liu theo ODBC).

dbOptimisticBatch

Cho php cp nht theo l (ch i vi cch truy cp d liu theo


ODBC).

Lu : Xt v d sau:
Dim
Dim
Set
Set

db
rs
db
rs

As Database
As Recordset
= OpenDataBase ("..\..\baigiang.mdb")
= db.OpenRecordset ("Select * From Canbo " & _
"Order
by hotencb = "Truong"")

- Nh vy cu lnh cui cng trong v d trn s sai ch l VB khng xc nh


c u l du trch dn ca chui v u l du trch dn ht cu lnh truy vn. Cch
khc phc l i du trch dn chui thnh du nhy n.
- Mt im cn ch khc l khi vit mt cu truy vn trn nhiu dng th cn
c k t ni dng _ cui mi dng.
- Nu gi tr ca tham s trong cu truy vn khng phi l cng nhc, tc ta ly
gi tr t mt bin th ta theo nguyn tc sau:
Set rs = db.OpenRecordset ("Select * From Canbo " & _
"Order by hotencb = "& name & "")

II.3 i tng Field


i tng Field gip chng ta truy xut gi tr ca mt trng trong Recordset.
Gi tr ca trng s truy xut qua thuc tnh Value ca i tng Field, tuy nhin
thuc tnh Value l thuc tnh mc nh ca Field, nn ta khng cn tham kho tng
minh n thuc tnh ny.
Trang 111

Visual Basic

Nh vy truy xut gi tr ca mt trng trong 1 Recordset c th, ta c th


dng mt trong cc cch sau:
- Fields(Num): Num l s th t ca trng trong Recordset (bt u tnh t 0)
- Fields("name"): Vi name l tn trng
- Fields![name]: Vi name l tn trng.

II.4 Cc phng thc duyt qua i tng Recordset


Sau khi nhn v mt i tng Recordset, ta cn c nhng cch thc duyt
qua cc mu tin phc v cho mt cng vic c th no . Ta c mt s phng thc
duyt Recordset nh sau:
Phng thc

ngha

MoveFirst

Di chuyn n mu tin u tin trong Recordset

MoveNext

Di chuyn n mu tin k tip trong Recordset

MovePrevious

Di chuyn n mu tin lin trc trong Recordset

MoveLast

Di chuyn n mu tin cui trong Recordset

Move N

Di chuyn i N mu tin c ch nh trong Recordset

Cng nh nu trn, c nhiu loi kiu Recordset, ty vo tng kiu m


chng ta ch c th duyt ti m khng th i lui, khi cc phng thc nh
MoveFirst, MovePrevious s gy ra li.
bit c rng chng ta ang di chuyn trong phm vi cc mu tin ca
Recordset, ta s dng hai thuc tnh sau y xc nh iu :
- BOF: Tr v TRUE nu ta di chuyn n trc mu tin u tin ca
Recordset.
- EOF: Tr v TRUE nu ta di chuyn n sau mu tin cui cng ca
Recordset.
Hn th na, ta c th dng hai thuc tnh ny kim tra mt Recordset c
rng hay khng, mt Recordset rng khi ti mt thi im bt k c hai thuc tnh
EOF v BOF u c gi tr l TRUE.
xc nh s mu tin c trong mt Recordset, ta dng thuc tnh
RecordCount. Nhng ch rng ta cn di chuyn n mu tin cui cng trc khi s
dng thuc tnh RecordCount th kt qu tr v mi chnh xc. Ti sao li nh vy?
Bi v cu lnh truy vn c x l thng qua hai giai on, tr v s lng mu tin
cho x l v x l bn di cu lnh truy vn trn mt s lng ng d liu kt qu,
v ta khng th iu khin c hai qu trnh ny.
cp nht gi tr ca 1 mu tin ta lm theo cc bc nh sau:
- Dng cc phng thc duyt mu tin i n mu tin cn thay i gi tr.
- Thi hnh phng thc Edit.
- Dng thuc tnh Fields gn tr cho trng trong mu tin, chng hn:
rs.Fields("hotencb") = Truong Quoc Dinh

Trang 112

Visual Basic

- Lu li s thay i bng cch thi hnh phng thc Update.


thm mi mt mu tin ta lm theo cc bc:
- Thi hnh phng thc AddNew, VB s thm mi mt mu tin trng.
- S dng cc cch thc gn tr cp nht gi tr cho mu tin mi thm vo.
- Thi hnh phng thc Update.
Sau khi hon thnh cng vic chng ta cn thi hnh phng thc Close
ng mt i tng Recordset. iu ny tht s c ngha khi Recordset hin hnh
ang kha d liu, phng thc Close s m kha v cc ngi dng khc c th thao
tc trn d liu.

II.5 Tm kim d liu trong Recordset v Table (bng)


i khi i vi mt s cng vic no , ta cn tm kim mt mu tin c th
trong mt tp cc mu tin ca Recordset, c nhiu phng thc tm kim mu tin, ty
vo ni dung cng vic m ta p dng phng thc no cho hiu qu.
Ta c cc phng thc tm kim trn Recordset nh sau:
FindFirst|FindLast|FindNext|FindPrevious

C php ca phng thc Find:


recordset.{FindFirst | FindLast | FindNext | FindPrevious} criteria
Thnh phn

ngha

recordset

Mt bin i tng Recordset kiu dynaset hoc snapshot.

criteria

Chui dng xc nh mu tin, ging nh mnh


WHERE trong cu lnh SQL nhng khng c t kha
WHERE.

Phng thc

Bt u t

Hng tm kim

FindFirst

Mu tin u tin

n cui Recordset

FindLast

Mu tin cui cng

n u Recordset

FindNext

Mu tin hin hnh

n cui Recordset

FindPrevious

Mu tin hin hnh

n u Recordset

Cc phng thc tm kim ny s khng lm ny sinh mt Recordset, n ch di


chuyn n mu tin hp iu kin v mu tin tr thnh mu tin hin hnh, nu
khng tm thy, mu tin hin hnh khng thay i, khi ny thuc tnh NoMacth c
gi tr l TRUE.
Ngoi ra i tng Recordset cn cung cp phng thc Seek gip ta tm kim
trn mt Recordset kiu bng c ch mc, c php nh sau:
recordset.Seek comparison, key1, key2...key13

Trang 113

Visual Basic

Thnh phn

ngha

recordset

Mt bin i tng Recordset kiu bng nh ngha ch


mc thng qua thuc tnh Index.

comparison

Mt trong cc biu thc so snh sau <,<=, =, >=, or >.

key1, key2...key13

Mt hoc nhiu gi tr tng ng vi trng ch mc hin


hnh, ta c th dng ti a n 13 gi tr.

III. S dng iu khin DAO Data


Hin ti mc d vic lin kt vi c s d liu u c th thc hin thng qua
iu khin ADO Data vi nhiu tnh nng mnh hn, tuy nhin ta cng c th dng
iu khin DAO Data tham kho n c s d liu Jet cng nh mt s loi c s
d liu khc nh DBASE, vn bn, bng tnh Excel m chng ta khng cn dng
ODBC.
iu khin ny chnh l iu khin Data m ta xt chng 8. Tuy nhin khi
s dng iu khin ny th ta cn ch n thuc tnh Connect, y l thuc tnh quy
nh loi d liu s kt ni. Mt s kiu c s d liu c h tr bi iu khin DAO
Data:
- Microsoft Access.
- DBASE III, IV v 5.0.
- Phin bn Excel 3.0, 4.0, 5.0 v 8.0.
- Phin bn FoxPro 2.0,2.5 2.6 v 3.0.
- Lotus spreadsheet vi nh dng WK1, WK3 v WK4.
- Phin bn Paradox 3.x, 4.x v 5.x.
- Tp tin vn bn ASCII c phn cch.

Trang 114

Visual Basic

Chng 10 : ODBC V CC I TNG D


LIU T XA (REMOTE DATA OBJECTS)
Mc tiu:
Chng ny gii thiu v th vin i tng Remote Data Objects,
cch thc c s dng truy cp cc i tng d liu t xa.
Hc xong chng ny, sinh vin phi nm bt c cc vn sau:
- Khi nim Open Database Connectivity (ODBC).
- S dng iu khin d liu t xa (Remote Data Control) truy cp
d liu.
- Cy phn cp ca m hnh i tng RDO.
- S dng th vin i tng RDO tng tc vi c s d liu trong
VB.
Kin thc c lin quan:
- Cc cu trc lp trnh trong VB.
- Cu lnh truy vn d liu trong c s d liu.
- Nm bt c cc m hnh DAO l mt li th v lc vic tip thu
m hnh ADO c nhanh hn.
Ti liu tham kho:
- Microsoft Visual Basic 6.0 & Lp trnh c s d liu Chng 23,
trang 735 - Nguyn Th Ngc Mai (ch bin), Nh xut bn Gio dc - 2000.
- T hc Lp trnh c s d liu vi Visual Basic 6 trong 21 ngy
(T2) Chng 17, trang 227 - Nguyn nh T (ch bin), Nh xut bn
Gio dc - 2001.

Trang 115

Visual Basic

I. Open Database Connectivity (ODBC)


1. Khi nim
ODBC l cng ngh Windows cho php ng dng Client ni vi c s d liu
t xa. Nm trn my Client, ODBC lm cho ngun d liu quan h tr nn trong sut
i vi ng dng Client. V th ng dng Client khng cn quan tm n kiu c s d
liu l g.
ODBC gm 3 phn:
- Trnh qun l iu khin (driver manager).
- Mt hay nhiu trnh iu khin (driver).
- Mt hay nhiu ngun d liu (data source).

2. Kin trc
Kin trc ODBC cha kt ni gia ng dng Client v c s d liu Server
thng qua trnh qun l iu khin ODBC.
ng dng
Client

Ngun d
liu ODBC

Trnh qun l iu
khin ODBC

Trnh iu
khin ODBC

DB

Hnh 10.1: Kin trc ODBC trnh by kt ni gia ng dng Client v


CSDL Server thng qua trnh qun l iu khin ODBC

3. To ngun d liu ODBC


mt ng dng Client ni vi c s d liu Client/Server dng ODBC; trc
ht, ta phi cung cp thng tin v ngun d liu ODBC trn Client. Mi Server yu cu
nhng gi thng tin khc nhau ni vi Client. ODBC cung cp cho thng tin ny
mt tn n gin ta c th tham chiu n n, thay v phi thit lp gi thng tin t
u mi ln ta cn n n.
ng dng Client c th tham chiu mt cch d dng n t hp ca mt iu
khin, mt c s d liu v c th thm mt ngi s dng v mt khu. Tn ny
chnh l tn ngun d liu hay Data Source Name (DSN).
to mt tn ngun d liu ODBC trn my Client, ta lm nh sau:
o M Control Panel.
o Chn Administrative Tools\Data Source (ODBC), hp thoi qun tr ngun
d liu xut hin:

Trang 116

Visual Basic

Hnh 10.2: Hp thoi qun tr ngun d liu ODBC

o Ta c th to mt trong ba kiu ngun d liu ODBC:


9 User DSN: ch c ngi dng to ra n mi c th s dng (trn my ang
dng).
9 System DSN: bt k ai s dng my ny u c th dng c. y cng
l kiu ngun d liu m ta cn to khi ci t ng dng c s d liu Web.
9 File DSN: c th c copy v s dng bi my khc.
o Khi hp thoi ODBC m ra, chn lp UserDSN (hay System DSN), To
mt kt ni mi, nhn nt Add, mn hnh s hin ra nh sau:

Hnh 10.3: La chn loi c s d liu cn thit to kt ni

Trang 117

Visual Basic

o Chn loi CSDL m ta mun thao tc (Access, Foxpro, SQL Server,),


nhn Finish. Sau khi nhn Finish, mt mn hnh s hin ra cho php ta nhp vo Data
Source Name, y l tn ca kt ni CSDL. Tn ca kt ni khng cn phi ging vi
tn ca c s d liu. Phn Description dng g cc thng tin m t v kt ni.
Ngoi ra ta cn phi chn ng dn n tp tin CSDL tng ng.

4. Truy cp ngun d liu vi iu khin DAO Data v ODBC Direct


DAO t ng np b my c s d liu Jet mi khi n truy cp d liu
Client/Server, thm ch khi ta khng thc s s dng c s d liu Jet/Access.
Ngoi ra ta cn c thm ty chn s dng ODBCDIRECT truy cp d liu
Client/Server. y l mt chuyn i truy cp c s d liu server trc tip thng
qua DAO m khng cn np b my c s d liu Jet. Ty chn ny thch hp khi ta
phi dng DAO truy cp d liu Client/Server m khng cn bn tm v tnh linh
hot, kh nng s dng li v tnh d bo tr ca chng trnh.
V d: To mt Form c s dng ODBCDirect v DAO Data Control.
o To d n mi.
o Tham chiu n iu khin li Microsoft Data Bound Grid Control trong
mc Project\Components.
o To Form c dng sau:

2
Hnh 10.4: V d v ODBC Direct

1: DBGrid. Name: dbGrid1.


2: Data Control. Name: Data1.
o i thuc tnh DefaultType ca DataControl l 1 Use ODBC. iu ny
lm cho chng trnh thc hin nhanh hn.
o Thuc tnh Connect ca Data1 l: ODBC;DSN=DBHH
o t thuc tnh Record Source ca Data Control:
Select * From THANGHOA
t thuc tnh Data Source ca DBGrid1 l: Data1.
Lu d n v thc thi chng trnh.

Trang 118

Visual Basic

II. Truy cp d liu dng iu khin d liu t xa


iu khin d liu t xa (Remote Data Control - RDC) l mt cch khc truy
cp d liu t xa trong cc ng dng Visual Basic. iu khin ny dng mt giao din
lp trnh tng t nh iu khin ADO Data hay DAO Data.
V d: S dng RDC hin th d liu trn li:
o y ta c s dng Remote Data Control v li hin th d liu, do ta
tham chiu n cc thnh phn ny bng cch chn Project\Components, thit lp
tham chiu n Microsoft Remote Data Control v Microsoft Data Bound Grid
Control. Nhp OK.
o Thit k Form c dng sau:

1
Hnh 10.5: V d v Remote Data Control

1: RemoteDataControl. Name: rdcHangHoa


2: DBGrid. Name: dbgHangHoa.
o t thuc tnh DataSourceName ca iu khin rdcHangHoa l DBHH
(DSN to trc y).
o nh thuc tnh SQL ca iu khin rdcHangHoa l:
Select * From THANGHOA
o Ch nh thuc tnh DataSource ca iu khin dbgHangHoa l
rdcHangHoa.
o Thc thi chng trnh.

III. Remote Data Object (RDO)


i tng d liu t xa (Remote Data Objects - RDO) c m t dng hnh
cy tng t nh DAO. Tuy nhin m hnh i tng RDO n gin hn DAO.

Trang 119

Visual Basic

D vy ta khng th dng RDO to i tng c s d liu nh bng, view,


th tc cha sn
tham chiu n RDO ta vo Project\References\Microsoft Remote Data
Object 2.0.
M hnh i tng RDO:

Hnh 10.6: Kin trc ca RDO

III.1 i tng RDOEngine


y l i tng cp cao nht trong m hnh RDO, gii thiu v cc thnh
phn ca m hnh. Ta khng cn phi khi to i tng ny cch tng minh bi v
n c khi to t ng.
i tng rdoEngine cho php ta truy cp ton b cc i tng khc trong m
hnh RDO. Ngoi ra, n cn c s dng to mi mt Data Source Name (DSN)
nh vo phng thc rdoRegisterDataSource. on m lnh di y cho php ng
k mt ngun d liu mi cho c s d liu Pubs (ca SQL Server):
Dim strTemp As String
strTemp = Description=Test DSN & Chr(13) & _
SERVER=(local) & Chr(13) & Database=Pubs
rdoEngine.rdoRegisterDataSource MyTestPubs, SQL Server, _
True, strTemp

III.2 i tng RDOError


i tng li xc nh thao tc no trn mt ngun d liu gy ra li. y
khng phi l cc li ca Visual Basic v n xy ra i vi c s d liu. V th, ta
Trang 120

Visual Basic

khng cn phi by li cho cc li ny. Thay vo , tp hp rdoErrors s xc nh


thao tc ca ta l thnh cng hay tht bi. Chng hn nh on m lnh sau:
Dim objError As RDO.rdoError
Dim strError As String
For Each objError In rdoEngine.rdoErrors
strError = strError & objError.Description & vbCrLf
Next
' Display Errors
MsgBox "The following errors occurred: " & strError

III.3 i tng RDOEnvironment


i tng ny ch ra cch thc bo mt ca c s d liu. Ta s dng i tng
ny xc nh nh danh ngi dng cng mt khu hay thi hnh mt phin giao dch
(Transation) trn c s d liu.
i tng ny khng c khi to trc tip, chng c to ra t ng.

III.4 i tng RDOConnection


Phn ln cc chc nng ca RDO bt u vi i tng rdoConnection; i
tng ny cho php thit lp mt ni kt n mt ngun d liu ODBC. Khi ngun d
liu c nh ngha, cc thuc tnh cng cc phng thc ca i tng ny c
s dng giao tip vi ngun d liu y.
on m lnh n gin di y cho php to mt ni kt n ngun d liu c
tn l Biblio.
Set m_Connection = New RDO.rdoConnection
m_Connection.Connect = DSN=Biblio
m_Connection.EstablishConnection

III.4.1 i tng RDOQuery


i tng ny c s dng thc thi cc cu truy vn trn ngun d liu
ODBC. Cc cu truy vn ny c th l cc cu SQL hay l li gi thc thi cc th tc
lu tr sn trong c s d liu. Nu l li gi cc th tc lu tr sn th tham s ca
cc th tc ny c xc nh nh i tng rdoParameter.
Hai yu t then cht xc nh mt i tng rdoQuery l ni kt no cn truy
vn v cu lnh SQL truy vn d liu.
V d: Gi s ta c on m lnh bn trn to ni kt n ngun d liu
Biblio. on m lnh di y thc thi cu lnh SQL ly v thng tin v tt c cc nh
xut bn:
To cu SQL
Dim strSQL As String
strSQL = SELECT * FROM Publishers
To i tng Query
Dim m_Query As RDO.rdoQuery
Set m_Query = New RDO.rdoQuery
Set m_Query.ActiveConnection = m_Connection

Trang 121

Visual Basic
m_Query.SQL = strSQL
m_Query.Excute

III.4.2 i tng RDOResultset


i tng ny qun l cc mu tin c tr v t mt ni kt qua ODBC. Tp
cc mu tin c th c tr v thng qua i tng rdoQuery hay nh phng thc
OpenResultset ca mt i tng rdoConnection. Trong mt s trng hp, tp cc
mu tin c truy xut nh vo thuc tnh LastQueryResults ca i tng
rdoConnection:
Set m_Resultset = m_Connection.LastQueryResults

Khi i tng rdoResultset c to ra, ta c th di chuyn n mu tin xc


nh bng cc phng thc MoveFirst, MoveLast, MoveNext, MovePrevious.
III.4.3 i tng RDOTable
i tng ny xc nh mt bng trong mt ngun d liu ODBC. i tng
ny khng c s dng cho cc thao tc truy xut d liu m n ch c s dng khi
ta cn xc nh cu trc cc bng ca c s d liu ca ta.
III.4.4 i tng RDOParameter
i tng ny xc nh cc tham s u vo hay cc kt qu nhn c t cc
th tc lu tr sn trong c s d liu.

III.5 S dng RDO trong chng trnh


III.5.1 Thit lp kt ni n ngun d liu
o Trc tin ta phi tham chiu n m hnh i tng RDO.
o Ni kt n ngun d liu nh i tng rdoConnection.
- Khai bo mt bin i tng rdoConnection.
- Khi tao i tng, sau thit lp cc thuc tnh v cc phng thc
thch hp hon tt kt ni; trong c hai thuc tnh cn quan tm l
chui kt ni (ConnectionString) v loi con tr (Cursor Driver).
o Thit lp ni kt nh phng thc EstablishConnection ca i tng
rdoConnection.
III.5.2 Chui kt ni (ODBC Connect String)
Chui kt ni c s dng khi thit lp ni kt n ngun d liu. y l mt
chui (String) xc nh cc thng tin quan trng gi n trnh iu khin ODBC
truy cp d liu. Cc thng tin cn quan tm: tn ngun d liu (DSN Name), User ID,
Password.
Cc tham s ca chui kt ni ODBC:
Tham s

ngha

DSN

Tn ngun d liu ODBC

UID

Tn ngi dng c s d liu

PWD

Mt khu truy cp

DRIVER

Trnh iu khin DBC


Trang 122

Visual Basic

DATABASE

Tn ca c s d liu c ni kt

SERVER

Tn my cha c s d liu phc v (database server)

WSID

Tn my cha c s d liu khch (database client)

APP

Tn ca tp tin chng trnh (*.exe)

Chui kt ni c xc lp nh thuc tnh Connect ca i tng


rdoConnection.
V d: Chui ni kt n 1 DSN ca c s d liu Access Biblio:
Set m_Connection = New RDO.rdoConnection
m_Connection.Connect = "DSN=Biblo"
m_Connection.EstablishConnection

Chui ni kt n DSN Publications ca c s d liu SQL Server:


Set m_Connection = New RDO.rdoConnection
m_Connection.Connect = "DSN=Biblo;UID=sa;PWD=;"
m_Connection.EstablishConnection

Bn cnh ni kt chun thng qua ODBC, RDO cng h tr loi ni kt DSN


cp thp (DSN-less connection). i vi loi ny, ta khng cn nh ngha tn ngun
d liu (DSN) trong b qun tr ODBC ca Windows. Lc ny tt c cc thng tin v
c s d liu c cung cp y trong chui ni kt.
V d: Chui ni kt cp thp n c s d liu SQL Server Pubs:
Set m_Connection = New RDO.rdoConnection
m_Connection.Connect ="DRIVER={SQL Server}; & _
SERVER=(local);DATABASE=Pubs;UID=admin;PWD=;DSN=;"
m_Connection.EstablishConnection

III.5.3 Trnh iu khin con tr (Cursor Drivers)


Trnh iu khin con tr xc nh cch thc tp cc mu tin tr v t c s d
liu c lu tr nh th no, c th chng c lu tr ti my ch (server) hay my
trm (client).
Trnh iu khin con tr c thit lp nh thuc tnh CursorDriver ca i
tng Connection (trc khi gi thc thi phng thc EstablishConnection) v cc gi
tr sau c th c cho n:
Gi tr

ngha

rdUseIfNeeded

Trnh iu khin ODBC t ng xc nh loi con tr (c


lu pha server hay client). Nu c th, con tr loi c lu
pha server c c.

rdUseODBC

Xc nh loi con tr ca ODBC chun, ngha l tp tt c cc


mu tin c lu my client.

rdUseServer

Tp cc mu tin c lu phia server. Tuy nhin loi con tr


ny khng thch hp lm trong mi trng a ngi dng.
Trang 123

Visual Basic

rdUseClientBatch

Ging nh rdUseODBC nhng c th c cp nht ng thi.

rdUseNone

Khng s dng con tr, tp cc mu tin c tr v mt ln duy


nht lc chng c yu cu. Ta ch c th di chuyn ti trong
tp cc mu tin kt qu.

Trang 124

Visual Basic

Chng 11: I TNG D LIU ACTIVEX


(ACTIVEX DATA OBJECTS)
Mc tiu:
Chng ny gii thiu v th vin ActiveX Data Object (ADO), th vin
i tng c s dng nhiu nht trong cc ng dng truy cp c s d liu
dng khch/ch (Client/Server) hin nay.
Hc xong chng ny, sinh vin phi nm bt c cc vn sau:
- Kin trc OLEDB/ADO.
- Cy phn cp ca m hnh i tng ADO.
- S dng th vin i tng ADO tng tc vi c s d liu trong
VB.
Kin thc c lin quan:
- Cc cu trc lp trnh trong VB.
- Cu lnh truy vn d liu trong c s d liu.
- Nm bt c cc m hnh DAO, RDO l mt li th v lc vic tip
thu m hnh ADO c nhanh hn.
Ti liu tham kho:
- Microsoft Visual Basic 6.0 & Lp trnh c s d liu - Chng 27,
trang 877 - Nguyn Th Ngc Mai (ch bin) Nh xut bn Gio dc 2000.
- T hc Lp trnh c s d liu vi Visual Basic 6 trong 21 ngy (T2)
Chng 18, trang 277 - Nguyn nh T (ch bin) - Nh xut bn Gio
dc - 2001.

Trang 125

Visual Basic

ADO (ActiveX Data Objects) l cng ngh truy cp c s d liu hng i tng
tng t nh DAO. Hin nay, ADO c Microsoft xem k thut chnh truy cp d
liu t Web Server.

I. Kin trc OLE DB/ADO


ADO s dng OLEDB nh l trnh cung cp d liu c s. Trnh cung cp OLE
DB cho php ngi lp trnh c th truy xut d liu t c hai ngun: quan h v phi
quan h. VB6.0 h tr cc trnh cung cp cc b cho SQL Server, Oracle v
Microsoft Jet/Access.
Client Application
Remote Data
Objects

ActiveX Data
Objects

ODBC Driver

OLE DB Data
Provider

ODBC Driver
Manager

OLE DB

Document
Server

Email
Server
Relational Database

Hnh 11.1: M hnh lp trnh CSDL Client - Server dng RDO


v ADO

Ta ch cn lp trnh vi phn giao din ngi s dng pha Client. Vic truy cp
c s d liu trn trnh duyt Web hay ng dng VB c thc hin nh ADO. Cu
trc ny cho php ta lp trnh mt cch nht qun trn Web cng nh trn ng dng.

Trang 126

Visual Basic

HTTP

MS Internet
Information
Server with Active
Server Pages

Client Application
DCOM

ActiveX Server
(DLL or EXE)

ADO

OLE DB

Database

Web Browser

Hnh 11.2: Truy cp CSDL t trnh ng dng & trnh


duyt WEB theo ADO

II. M hnh ADO


M hnh ADO c trnh by theo dng phn cp (tng t DAO v RDO).
c th lp trnh vi th vin ADO, ta phi tham chiu n th vin ny bng
cch chn Project\References\Microsoft ActiveX Data Object 2.0.

Hnh 11.3: M hnh ADO

M hnh ADO c 3 i tng ct li:


Trang 127

Visual Basic

o Connection: kt ni CSDL tht s.


o Command: thc thi cc cu truy vn da vo kt ni d liu.
o RecordSet: l tp cc mu tin c chn t cu truy vn thng qua i tng
Command.

III Cc i tng trong m hnh ADO


III.1 i tng Connection
Dng phng thc Open ca i tng Connection thit lp kt ni vi ngun
d liu. thc hin iu ny ta cn phi thng bo vi ADO thng tin kt ni vi
dng chui theo kiu chui kt ni ca ODBC. Thuc tnh ConnectionString thc hin
iu ny. Ngoi ra ta cn c th chn trnh cung cp bng cch quy nh gi tr ca
thuc tnh Provider ca i tng.
ni kt vi d liu, ta cn xc nh trnh cung cp OLE DB v chui kt ni.
Nu khng xc nh c hai yu t ny, ta s s dng trnh cung cp mc nh l
ODBC: MSDASQL.
Mt s trnh cung cp c sn:
9 Microsoft OLEDB cho cc trnh iu khin ODBC.
9 Microsoft OLEDB cho Oracle.
9 Microsoft Jet 3.51 OLEDB (Access).
9 Microsoft Jet 4.0 OLEDB (Access)
9 Microsoft OLEDB cho SQL Server.
9 Microsoft OLEDB cho cc dch v th mc.
V d:
i vi trnh cung cp ODBC, thuc tnh ConnectionString c th l mt DSN hay
l mt kt ni khng c DSN (DSN cp thp).
Dim cn As ADODB.Connection
Set cn = New ADODB.Connection
cn.Provider = "MSDASQL"
cn.ConnectionString = "DSN=Baigiang"
cn.Open

Kt ni DSN cp thp:
Dim cn As ADODB.Connection
Set cn = New ADODB.Connection
cn.Provider = "MSDASQL"
cn.ConnectionString = "DRIVER={SQL Server}; & _
DATABASE=Baigiang;UID=myuser;PWD=mypassword;"
cn.Open

Trong trng hp ny vic kt ni vi c s d liu Server c thc hin nhanh


hn v chng trnh khng cn c thng tin v cc DSN trn my Client, tuy nhin
thng tin v ngun c s d liu li kt cht vi chng trnh bin dch.
kt ni vi c s d liu Access, ta dng trnh cung cp Jet vi chui kt ni l
ng dn n tp tin .mdb
Dim cn As ADODB.Connection
Set cn = New ADODB.Connection
cn.Provider = "MicroSoft.Jet.OLEDB.4.0"
cn.ConnectionString = "d:\data\baigiang.mdb"

Trang 128

Visual Basic
cn.Open

i vi c s d liu SQL Server, ta c th dng trnh cung cp SQLOLEDB.1,


trong trng hp ny, chui kt ni tng t nh trng hp kt ni dng trnh cung
cp ODBC khng c DSN, tuy nhin ta khng cn xc nh gi tr ca DRIVER:
Dim cn as ADODB.Connection
Set cn = New ADODB.Connection
cn.Provider = SQLOLEDB.1
cn.ConnectionString = DATABASE=DBHH; & _
SERVER=www;UID=user;PWD=user
cn.Open

M v ng ni kt ngun d liu
pht cc yu cu n ngun d liu s dng ADO, ta cn m kt ni n
ngun d liu bng phng thc Open ca i tng Connection. C php y
nh sau:
connection.Open [connect], [userid], [password]
Tt c cc tham s ca phng thc Open u l ty chn, nu nh cc thng s
ny c xc nh thng qua cc thuc tnh khc ca i tng Connection th ta
khng cn m t chng y.
Khi hon thnh tt c cc thao tc lin quan n ni kt ny, ta cn phi ng
ni kt mt cch tng minh thng qua phng thc Close ca i tng Connection.
connection.Close
ng ni kt mt cch tng minh s m bo rng tt c cc ti nguyn lin
quan n ni kt ny trn Server cng nh Client u c gii phng mt cch hp
l.
Xc nh v tr con tr
Con tr (Cursor): mt tp cc mu tin c tr v cho chng trnh. V tr con
tr c xc nh nh thuc tnh CursorLocation (c c i tng Recordset). C 2
gi tr c th ch nh:
9 adUseClient: con tr pha Client.
9 adUseServer: con tr pha Server (mc nh).
Thc thi cc cu truy vn hnh ng
Cc cu truy vn hnh ng (Insert, Update, Delete) c thc hin nh phng
thc Execute ca i tng Connection; ngoi ra phng thc ny cng c th c s
dng thc thi cc th tc lu tr sn trong c s d liu hay cc cu SELECT. C
php phng thc ny nh sau:
Nu khng c kt qu tr v:
connection.Execute CommandText, RecordsAffected, Options
C kt qu tr v:
Set recordset = connection.Execute (CommandText, RecordsAffected, Options)
Trong :
- connection: i tng Connection.
- recordset: i tng Recordset l kt qu tr v ca phng thc Execute, tuy
nhin, ngi ta thng t khi s dng cch ny. Thay vo , ngi ta thng s dng
phng thc Open ca i tng Recordset.
Trang 129

Visual Basic

- CommandText: l mt chui xc nh cu truy vn hnh ng, SELECT, th


tc lu tr sn hay tn mt bng trong c s d liu.
- RecordEffected: Ty chn, l mt s nguyn di (Long) xc nh trnh cung
cp tr v bao nhiu mu tin tha iu kin.
- Options: Ty chn, l mt s nguyn di (Long) xc nh trnh cung cp s
nh gi cc i s ca CommandText nh th no.
Thuc tnh Mode: Xc nh trnh cung cp c th hn ch truy cp n c s
d liu khi c mt recordset ang m. Cc gi tr c th l:
Hng s

Gi tr

ngha

adModeUnknown

Mc nh, ch nh quyn hn cha thit lp hay


khng th xc nh

adModeRead

M Recordset vi quyn ch c

adModeWrite

M Recordset vi quyn ch ghi

adModeReadWrite

M Recordset vi quyn c/ghi

adModeShareDenyRead

Ngn ngi khc m kt ni vi quyn ch c

adModeShareDenyWrite

Ngn ngi khc m kt ni vi quyn ch ghi

adModeShareExclusive

12

Ngn ngi khc m kt ni

adModeShareDenyNone

16

Ngn ngi khc m kt ni vi bt c quyn


no

III.2 i tng Recordset


c th khi to mt i tng Recordset ta c th thc hin mt trong hai
cch:
o Phng thc Execute ca i tng Connection. Tuy nhin cch ny ta ch
to c cc Recordset ch c v ch c th di chuyn ti.
o Xc lp cc thng s thch hp cho i tng Recordset ri thc thi phung
thc Open ca i tng Recordset. iu ny c thc hin nh cc bc:
9 Sau khi khi to i tng Connection, ch nh Recordset l ca i
tng Connection trn.
9 Thit lp cc thuc tnh thch hp ca Recordset (Source, LockType).
9 Thc thi cu truy vn ni kt nh phng thc Open.
III.2.1 Thuc tnh CursorType (loi con tr)
Xc nh loi con tr c tr v t c s d liu. Cc gi tr c th nhn:
Hng
Gi tr
M t
adOpenForwardOnly
0
Ch c th di chuyn pha trc
adOpenKeyset
1
Khng th thy cc mu tin do ngi dng
khc thm vo nhng khi h xa hay sa i
mu tin s lm nh hng n cc mu tin ta
ang lm vic.
adOpenDynamic
2
C th thy ton b s thay i do ngi
Trang 130

Visual Basic

adOpenStatic

dng khc tc ng.


Bn sao tnh ca tp mu tin. Mi s thay
i ca ngi dng khc ta khng thy c

III.2.2 Thuc tnh LockType (kha mu tin)


Xc nh cch thc kha mu tin trong Recordset. Dng tnh nng ny khi
mun kim sot cch thc cp nht mu tin vi nhiu ngi dng trong c s d liu.
Hng

M t

Gi
tr

adLockReadOnly
adLockPessimistic

1
2

adLockOptimistic

adLockBatchOptimistic

Mc nh - Ch c.
Kha trang bi quan. Mu tin trong
RecordSet b kha khi bt u sa i &
tip tc kha cho n khi thi hnh phng
thc Update hay di chuyn sang mu tin
khc.
Kha trang lc quan. Mu tin ch b kha
ngay lc thi hnh phng thc Update
hay di chuyn sang mu tin khc.
Kha trang lc quan hng lot. H tr cp
nht nhiu mu tin cng mt lc.

III.2.3 Thuc tnh Source


y l mt chui xc nh cu truy vn ly d liu, c th l tn ca bng
hay tn ca th tc lu tr sn.
III.2.4 Thuc tnh ActiveConnection
y l mt thuc tnh i tng xc nh Recordset l ca ni kt no trong
chng trnh.
III.2.5 V d s dng i tng Recordset trong chng trnh
i tng Recordset c th c s dng l i tng ngun d liu
(DataSource) ca iu khin li: Microsoft DataGrid Control 6.0 (OLEDB). Nh iu
khin li ny ta c th hin th d liu t mt Recordset theo dng hng v ct.
Chng hn ta c th hin th trn li thng tin v cc mt hng cng vi m
loi hng ca n:
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Private Sub Form_Load()
Set cn = New ADODB.Connection
cn.Provider = "Microsoft.Jet.OLEDB.3.51"
cn.ConnectionString = "F:\Data\DBHH.mdb"
cn.Open

Set rs = New ADODB.Recordset


rs.Source = "SELECT MaHang, TenHang, DVTinh & _

TenLoai FROM THangHoa, TLoaiHang WHERE & _


THangHoa.MaLoai = TLoaiHang.MaLoai"

Set rs.ActiveConnection = cn
rs.CursorLocation = adUseClient

Trang 131

Visual Basic
rs.Open
Set grdHH.DataSource = rs
End Sub

Kt qu thc thi ca chng trnh ny nh sau:

Hnh 11.4: S dng Datagrid hin th d liu t Recordset

*: Microsoft DataGrid Control 6.0 (OLEDB): Name: grdHH.


III.2.6 Cp nht v thm mi mu tin

Thm mi mu tin
- M Recordset
- Thi hnh phng thc AddNew
- Gn gi tr cho cc trng trong mu tin ca Recordset
- Lu li mu tin bng cch thi hnh phng thc Update (hay UpdateBatch).
Cp nht mu tin
- M Recordset
- Thc hin cu lnh truy vn nhn v cc mu tin thch hp.
- Di chuyn n mu tin cn cp nht li gi tr.
- Gn li gi tr cho cc trng.
- Thi hnh phng thc Update (hay UpdateBatch ty thuc vo LockType).
Lu :Ch kha mu tin mc nh trong ADO l ch c, v vy ta phi i
thuc tnh LockType ca i tng Recordset sang ch son tho trc khi thi hnh
cp nht hay thm mi mu tin.
III.2.7 Thuc tnh CursorLocation
Xc nh tp mu tin tr v t c s d liu c lu u (Server hay Client,
Server l mc nh). Thuc tnh cng ging thuc tnh CursorLocation ca i tng
Connection.
III.2.8 Recordset ngt kt ni
Khi chng ta dng con tr pha Client, ta c kh nng ngt kt ni vi Server c
s d liu m vn tip tc lm vic vi d liu. Cch ny cho php ng dng tr nn
Trang 132

Visual Basic

linh hot hn bi v nhiu ngi dng c th lm vic vi cng mt d liu ti mt


thi im nu nh h khng c ni kt vi server.
ngt ni kt vi Server, ta quy nh thuc tnh ActiveConnection ca i
tng Recordset l Nothing.
V d:
Dim cn As ADODB.Connection
Private Sub Form_Load()
Set cn = New ADODB.Connection
cn.Provider = "Microsoft.Jet.OLEDB.3.51"
cn.ConnectionString = "F:\Data\GiangDay.mdb"
cn.Open
End Sub
Public Function GetList (strState As String) _
As ADODB.Recordset
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
Set rs.ActiveConnection = cn
rs.CursorLocation = adUseClient
rs.LockType = adLockBatchOptimistic
rs.CursorType = adOpenKeyset
rs.Open strState
Set rs.ActiveConnection = Nothing
Set GetList = rs
Set rs = Nothing
End Function

thi hnh cng mt hnh ng trn mt mu tin, ta sa i li cc thuc tnh


ca i tng Recordset.
rs.LockType = adLockBatchOptimistic
rs.CursorType = adOpenKeyset

Chng ta thit lp gi tr cc thuc tnh li nh trn xc nhn rng Recordset


c th ni kt li cp nht v sau.
Sau , ta s thit lp mt hm nhn Recordset ngt kt ni lm tham bin
to mt i tng Recordset khc cp nht d liu.
Public Sub WriteData(rsDis As ADODB.Recordset)
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
Set rs.ActiveConnection = cn
rs.Open rsDis, cn
rs.UpdateBatch
End Sub

Gi thc thi th tc WriteData:


Private Sub cmdWrite_Click()
WriteData GetList("Select * From THanghoa")
End Sub

Trang 133

Visual Basic

III.3 i tng Command


y l i tng c ngi lp trnh s dng khi mun thi hnh cc th tc lu
tr sn hay nhng cu truy vn c tham s.
Vi i tng Command ta c th thi hnh mt s cng vic nh sau:
- S dng thuc tnh CommandText nh ngha cc on Text thi hnh c.
Thng thng thuc tnh ny dng thit lp mt cu lnh SQL hoc mt li gi th
tc lu tr sn, hay nhng dng khc m trnh cung cp h tr
- Xy dng chui cc i s ca cu truy vn cng nh cc tham s ca cc th
tc lu tr sn thng qua i tng Parameter hoc tp hp Parameters.
- Thc hin mt cu truy vn v tr v i tng Recordset thng qua phng
thc Execute.
- Xc nh kiu ca i tng Command nng cao hiu qu thng qua thuc
tnh CommandType.
- Xc nh s giy m trnh cung cp phi ch khi thi hnh mt i tng
Command thng qua thuc tnh CommandTimeOut.
Cc kiu ca i tng Command c trnh by trong bng di y:
Hng

ngha

adCmdText

nh gi thuc tnh CommandText di dng Text ca


mt cu lnh hoc mt li gi th tc lu tr sn.

adCmdTable

nh gi thuc tnh CommandText nh l tn ca mt


bng khi tt c cc trng ca bng s c tr v bi
cu lnh truy vn ni ti.

adCmdTableDirect

nh gi thuc tnh CommandText nh l tn ca mt


bng khi m tt c cc trng ca bng s c tr v.

adCmdStoredProc

nh gi thuc tnh CommandText nh l tn ca mt


th tc lu tr sn.

adExecuteNoRecords

Ch nh rng thuc tnh CommandText l mt cu lnh


hoc mt th tc lu tr sn khng tr v bt k dng
no (v d nh lnh thm mi d liu ). Cu trc ny
lun bao hm adCmdText, adCmdStoredProc.

Thuc tnh Parameter c xc lp thng qua hai phng thc


CreateParameter v Append
Set parameter = command.CreateParameter (Name, Type, _
Direction, Size, Value)
9 Name: ty chn, chui xc nh tn ca i tng Parameter.
9 Type, Direction: gi tr xc n kiu ca i tng Parameter

Trang 134

Visual Basic

9 Size: gi tr xc nh di ti a ca gi tr i tng Parameter bng


k t hoc Byte.
9 Value: bin xc nh gi tr ca Parameter truyn.
Nhng gi tr c th ca thuc tnh Direction:
Hng

M t

adParamUnknown

Khng bit chiu ca Parameter.

adParamInput

Mc nh, xc nh y l tham s u vo.

adParamOutput

Tham s u ra.

adParamInputOutput

Va l tham s u vo va l tham s u ra.

adParamReturnValue

y l gi tr tr v.

Phng thc Append dng a i tng Parameter va to vo tp hp. Chng ta


s xt qua v d dau y:
Public Sub ActiveConnectionX()
Dim cnn1 As ADODB.Connection
Dim cmdByRoyalty As ADODB.Command
Dim prmByRoyalty As ADODB.Parameter
Dim rstByRoyalty As ADODB.Recordset
Dim rstAuthors As ADODB.Recordset
Dim intRoyalty As Integer
Dim strAuthorID As String
Dim strCnn As String
' nh ngha 1 i tng command cho mt th tc lu tr sn
Set cnn1 = New ADODB.Connection
cnn1.Provider = "SQLOLEDB.1"
cnn1.ConnectionString = "DATABASE=Pubs;" & _
"SERVER=(local);UID=user;PWD=user;"
cnn1.Open
Set cmdByRoyalty = New ADODB.Command
Set cmdByRoyalty.ActiveConnection = cnn1
cmdByRoyalty.CommandText = "byroyalty"
cmdByRoyalty.CommandType = adCmdStoredProc
cmdByRoyalty.CommandTimeout = 15
' nh ngha i s u vo cho th tc lu tr
intRoyalty = Trim(InputBox( "Enter royalty:"))
Set prmByRoyalty = New ADODB.Parameter

Trang 135

Visual Basic
prmByRoyalty.Type = adInteger
prmByRoyalty.Size = 3
prmByRoyalty.Direction = adParamInput
prmByRoyalty.Value = intRoyalty
cmdByRoyalty.Parameters.Append prmByRoyalty
' To mt recordset bng cch thi hnh i tng Command.
Set rstByRoyalty = cmdByRoyalty.Execute()
' M bng Authors ly tn hin th
Set rstAuthors = New ADODB.Recordset
rstAuthors.Open "authors", cnn1, , , adCmdTable
Debug.Print "Authors with " & intRoyalty & _
" percent royalty"
Do While Not rstByRoyalty.EOF
strAuthorID = rstByRoyalty!au_id
Debug.Print , rstByRoyalty!au_id & ", ";
rstAuthors.Filter = "au_id = '" & _
strAuthorID & "'"
Debug.Print rstAuthors!au_fname & - & _
rstAuthors!au_lname
rstByRoyalty.MoveNext
Loop
rstByRoyalty.Close
rstAuthors.Close
cnn1.Close
End Sub

III.4 i tng Field


Dng i tng Field v tp hp Fields khi ta mun truy cp gi tr ca mt
trng ca mt Recordset no , k thut ny tng t nh i vi DAO.

IV. Dch v d liu t xa ca ADO


y l k thut s dng th vin Remote Data Service (RDS) vn chuyn
ADO Recordset t server n my tnh client Recordset kt qu c lu my client
v chng c ngt kt ni n server.
RDS l mt phn ca Microsoft Data Access Components (MDAC). Cc thng
tin v RDS c th tm thy trang http://www.microsoft.com/data/. RDS gm 2 phn
chnh:
- RDS 1.5 server: i km khi ci t Internet Information Server (IIS) 4.0.
- RDS 1.5 client i km khi ci t Internet Explorer (IE) 4.0.
Th vin ADODB gm cc thnh phn hot ng ch yu pha server (server
side) nh cc i tng Connection, Command, Error, Parameters ... S tht hiu qu
nu s dng cc thnh phn ny giao tip vi c s d liu. Tuy nhin trong trng
hp s dng cc chc nng cn phi c pha client th ta cn phi phn phi km theo
Trang 136

Visual Basic

mt s tp tin v s dng ODBC cho mi my client. i tng ADODB Recordset


khng th phn phi vi cc thnh phn ca RDS Client. Thay vo th vin i
tng Microsoft ActiveX Data Objects RecordSet (ADOR) c s dng. Th vin
ny gm cc thnh phn hon ton nm pha client v cho php ta c cc thao tc
trn mt recordset tht s pha client. ADOR khng c cc i tng Connection,
Command, Error, hay Parameters. ADOR c cc chc nng cho php phn phi
recordset vi cc thnh phn RDS client.
Mt ADO Recordset khng th vn chuyn thng qua giao thc http. Thay
vo RDS c s dng nhn v tng tc d liu t xa thng qua http. Mt
proxy RDS c s dng kim sot t xa mt ADOR Recordset ngt kt ni truyn
thng qua giao thc http. Nh vy RDS l vt cha (container) cho php lu tr v
truy cp t xa cc ADOR Recordset.
Ta c th dng i tng DataControl ca RDS nhn v i tng Recordset
ca ADO t Internet.
c th s dng k thut ny, ta cn tham kho cc thuc tnh ch yu ca i
tng DataControl.
- Thuc tnh Connect:
DataControl.Connect = "DSN=DSNName;UID=usr;PWD=pw;"
- Thuc tnh Server: Xc nh my ch Web cha ngun d liu bao gm tn v
giao thc ni kt.
- Thuc tnh SQL: L cu lnh truy vn nhn v i tng Recordset
DataControl.SQL = "QueryString"
- Thuc tnh ExecuteOptions: xc nh vic thi hnh cc cu lnh truy vn mt
cch ng b hay khng, cc gi tr l mt trong hai gi tr sau y:
Hng
adcExecSync

M t
Thi hnh ng b

adcExecAsync Mc nh, Thi hnh khng ng b.


- Thuc tnh ReadyState: Xc nh trng thi ca iu khin.
Gi tr

M t

adcReadyStateLoaded

Cu truy vn hin hnh vn ang cn thc hin v


cha c mt dng no c tr v. i tng
Recordset ca RDS.DataControl cha th s dng.

adcReadyStateInteractive

Tp hp dng ban u c tr v v cha trong


i tng Recordset, cc dng tip theo vn ang
c tr v.

adcReadyStateComplete

Tt c cc dng u c cha trong i tng


Recordset.

- Phng thc Refresh: thi hnh cu truy vn.


- Thuc tnh Recordset: tr v Recordset kt qu.
Trang 137

Visual Basic

Recordset = DataControl.Recordset
- Phng thc DoEvents: y l hm ca VB, n s tr iu khin cho h iu
hnh thc hin cc qu trnh khc.

Trang 138

Visual Basic

Chng 12: MI TRNG D LIU


(DATA ENVIRONMENT)
Mc tiu:
Chng ny gii thiu cch thc s dng mi trng d liu (Data
Environment), cch thc to cc ng dng tng tc vi c s d liu cch
nhanh chng trong VB 6.0.
Hc xong chng ny, sinh vin c th:
- S dng thnh tho mi trng d liu ca VB 6.0 to cc biu
mu nhp liu.
- S dng thnh tho mi trng d liu thit k cc cu truy vn d
liu cch trc quan, iu ny lm cho vic thit k ng dng c tin li hn.
Kin thc c lin quan:
- Th vin i tng ADO.
- Cu lnh SQL truy vn d liu.
Ti liu tham kho:
- T hc Lp trnh c s d liu vi Visual Basic 6.0 trong 21 ngy
(T1) Chng 9, trang 395 - Nguyn nh T (ch bin) - Nh xut bn
Gio dc - 2001.

Trang 139

Visual Basic

I) GII THIU V TRNH DATA ENVIRONMENT


DESIGNER (DED)
Gii thiu
Cng c DED l mt giao din trc quan rt mnh ca Visual Basic xy
dng cc form rng buc d liu. DED cho php ta thao tc vi mt vi hp thoi
to kt ni n ngun d liu (c s d liu) & cc ngun record (dataset hay
recordset) mt cch nhanh chng.
Cu trc chi tit ca DED
Giao din DED ActiveX Designer
DED s dng mt lp cc i tng Visual Basic gi l ActiveX
Designers. ActiveX Designers c np vo mi trng son tho VB cng nh cc
mc khc nh Menu, Form, Modul Tuy nhin cch thc thao tc trn n khc vi
cc mc ny. Khi thao tc vi DED ta s dng cc mc trn menu ca trnh son tho
DED xy dng mt tp hon chnh cc kt ni (Connection) & cc lnh d liu
(Command) s dng trong chng trnh.
Trong lc thao tc vi DED, ta c s dng 2 i tng khc nhau:
i tng kt ni d liu (Connection): i tng ny nh ngha mt
kt ni gia chng trnh ca ta & ngun d liu.
i tng lnh d liu (Command): nh ngha mt tp cc record ly
ra t kt ni d liu trn.
Khi xc nh i tng Command, ta cn ch nh i tng Command
ny ly d liu t u trong c s d liu bng vic xc lp ngun d liu (Data of
Source). Ngun d liu ny xc lp cch thc ly d liu t c s d liu: ly thng
qua mt TABLE, VIEW, STORED PROCEDURE, SQL
Mi khi mt i tng Command c to ra & c gi thc thi, mt
RecordSet ca i tng Command ny cng c kch hot. Lc ny tn ca
RecordSet tng ng l:
rs + Tn Command
V d: Ta to mt i tng Command c tn l comHH, lc tn
RecordSet tng ng l: rscomHH.
Khi i tng Command c to ra, lc ny nu mun thao tc trn i
tng Command ny, ta s thao tc trn RecordSet tng ng ca n.
Thit k cc Form rng buc d liu khng cn m lnh:
DED cho php ta thit k cc Form rng buc d liu khng cn m lnh.
V d: Vi CSDL HangHoa.MDB; ta thit k mt Form cho Table
HANGHOA bng cch s dng trnh DED nh sau:
Bc 1: To ni kt n c s d liu HangHoa.MDB:
Nu mc Data Environment khng c sn trong Project Explorer, ta
chn Project\Components, nh du vo mc Data Environment trong
ty chn Designers, nhp OK. Chn Project\More ActiveX Designers
thm Data Environment vo mi trng son tho.
Trong i tng Connection1, chn Properties, mt ca s hin ln:
Trang 140

Visual Basic

Hnh 12.1: Thit lp ni kt d liu


Chn Microsoft Jet 4.0 OLE DB Provider; chn Next. Chn c s
d liu ta mun thao tc trong mc Select or Enter a Database Name Box; y ta
chn CSDL HANGHOA.MDB (gi s nm trong ng dn D:\DED\HangHoa.Mdb).
Nhp nt Test Connection kim tra ni kt vi CSDL c b li hay khng? Ta s
nhp OK nu ni kt ny thnh cng (nu khng ta phi kim tra li).
Bc 2: Thm i tng Command vo DED:
Nhp chut phi vo Connection1 v chn ADD COMMAND trn
menu, mt i tng command c to ra vi tn l Command1 trong Data
Environment. Nhp chut phi vo i tng mi to ny, chn Properties chn
cch thc thao tc i vi i tng Command ny.
Trong , mc Database Object: Table; ObjectName:
THANGHOA.
Bc 3: DED cho php ta ko mt tp cc trng (Field) t mt i
tng d liu trong DED vo 1 Form chun trong Windows v th n ti mt ni no
.

Trang 141

Visual Basic

Hnh 12.2: Dng DED to Form rng buc d liu


Bc 4: Lc ny khi chy chng trnh, ta thy Form ny hot
ng; tuy nhin ta khng th thy cc nt nhn iu khin vic di chuyn cc record
(u, Cui, Trc, Sau); hay cc nt nhn hnh ng (Cp nht, Thm, Xa); ta cn t
b sung.
Cc thun li ca DED:
Xy dng cc Form rng buc d liu cch d dng.
C nhiu ty chn nh ngha kt ni v cc lnh d liu.
Ta c mt giao din thn thin hn thao tc cc kt ni & lnh.
DED s dng ActiveX Data Objects (ADO) truy cp d liu.

II) S DNG TRNH DATA ENVIRONMENT


DESIGNER
Qu trnh xy dng mt chng trnh thao tc CSDL vi VB thng qua DED
bao gm 3 bc:
- Chn mt trnh cung cp d liu (ODBC hay OLE DB).
- To mt kt ni d liu (file MDB, SQL Server)
- To mt lnh d liu (i tng Command).
Trang 142

Visual Basic

1) Cc trnh cung cp d liu (Data Provider)


- Data Provider l mt thnh phn iu khin s tng tc ca chng trnh ca
ta & ngun d liu. Mt trnh cung cp rt quen thuc l trnh cung cp ODBC (Open
Database Connectivity: kt ni c s d liu m). Giao din ny da trn tng l
mi ngun d liu c th c thao tc vi ngn ng SQL.
- Mt giao din mi c a ra bi Microsoft: giao din OLE DB. Giao din
ny khng yu cu ngun d liu phi nhm vo vic s dng ngn ng truy vn SQL;
thay vo , giao din OLE DB cho php trnh cung cp d liu chp nhn ngn ng
truy vn no m h mun h tr. Do vy cc ngun d liu c m rng ra t cc
CSDL truyn thng: dBase, SQL Server; n cc ngun d liu khc nh cc tp tin,
th mc ca h iu hnh
- VB 6 gi km vi cc trnh cung cp d liu nh sau:
9 Microsoft Jet 3.51 OLE DB Provider.
9 Microsoft Jet 4.0 OLE DB Provider.
9 Microsoft OLE DB Provider for SQL Server.
9 Microsoft OLE DB Provider for Oracle.
9 Microsoft OLE DB Provider for ODBC Drivers.

2) To mt kt ni d liu vi DED
o To mt d n mi; b sung Data Enviroment vo d n ca ta nh chn
Project/Add Data Environment. Khi la chn mc ny, mi trng DED s hin th; s
dng ca s Properties thit lp thuc tnh Name l: datHH. y, ta s s dng
DED kt ni vi CSDL HANGHOA.MDB.
o Sa li thuc tnh Name ca Connection1 l conHH; sau chut phi ln
conHH, chn Properties.
hp thoi u tin, ta phi chn mt trnh cung cp d liu, y chn
Microsoft Jet 4.0 OLE DB Provider, nhn Next tip tc.
Tip theo ta cn nhp chnh xc ng dn n tp tin CSDL, chng hn
y l: H:\Visual Basic\HangHoa.Mdb.
Cui cng, nhn nt Test Connection kim tra vic ni kt d liu
chnh xc hay khng?

Trang 143

Visual Basic

Hnh 12.3: i tng Connection

3) To i tng Command:
o Xy dng mt i tng Command kt ni trc tip vi Table (bng)
THANGHOA trong file d liu HangHoa.mdb.
o Nhp chut phi trn kt ni d liu conHH & chn Add Command; sa
Command Name l: comHH; chn Table t Combo Box Database Object, chn
THANGHOA t Combo Box Object Name.
o Trc khi ng hp thoi ny, ta chuyn qua nhn Advanced & thit lp
LockType l 3 Optimistic (mc nhin l 1 Read Only); Cursor Location: Use
client-side cursor. Nh vy ta mi c th cp nht Record Set t chng trnh ca ta.
o Tr li giao din DED, ta c:

Hnh 12.4: i tng Command


Trang 144

Visual Basic

4) To mt ng dng nhp liu vi DED


o mi trng DED, ta ko cc trng ca Command comHH vo Form1,
chnh sa li cho thch hp.
o y ta c s dng mt li hin th d liu; do vy ta chn
Project\Component; chn Microsoft DataGrid Control 6.0 (OLE DB); sau ko iu
khin ny vo Form, thit lp cc thuc tnh cho thch hp.
Name: grdHH.
DataSource: datHH
DataMember: comHH
o Nhp chut phi ln iu khin DataGrid, chn Retrieve Structure. Sau ,
lu d n & chy chng trnh ta c:

Hnh 12.5: Form hin th table THangHoa


o Thm cc nt hnh ng (Thm, Sa, Xa,). Chng hn cc s kin
cmd_Them_Click, cmdXoa_Click, cmdLuu_Click, cmdHuy_Click c x l:

Trang 145

Visual Basic

Hnh 12.6: Form nhp hon chnh cho table THangHoa


Private Sub cmdThem_Click()
With datHH.rscomHH
.AddNew
End With
End Sub
Private Sub cmdXoa_Click()
With datHH.rscomHH
.Delete
.Update
Me.Refresh
End With
End Sub
Private Sub cmdHuy_Click()
With datHH.rscomHH
.CancelUpdate
Me.Refresh
End With
End Sub
Private Sub cmdLuu_Click()
On Error GoTo Xuly
With datHH.rscomHH
.Update
End With
Me.Refresh
Trang 146

Visual Basic

Exit Sub
Xuly:
MsgBox Err.Description, vbCritical + vbSystemModal,
"Error"
End Sub
Nh vy, ta thit k xong mt Form cho php hin th thng tin cc hng ha,
Form ny cho php sa i, thm mi cc mu tin trong bng THANGHOA ca
CSDL HANGHOA.MDB.

5) i tng Command s dng cu lnh SQL


o Ta c th thit k cc cu lnh SQL cch nhanh chng nh s dng trnh SQL
Builder.
o Vi trnh DataEnvironment trn, ta thm mt i tng Command na;
nhng i tng Command ny ly d liu t cu lnh SQL. y, ta cn hin th
thng tin v cc loi hng ha & tn loi hng tng ng.
o Sau khi thm mt i tng Command vo, ta sa cc thuc tnh nh sau:
Name: comHH_Loai
Source of Data
: SQL Statement.
o Sau chn SQL Builder trong ca s thuc tnh; mt ca s hin ra. Ko
bng THangHoa & TLoaiHang trong ca s DataView vo khung Diagram ca trnh
SQL Builder. Check chn cc trng tng ng (MaHang, TenHang, DVTinh,
TenLoai). Ta c kt qu sau (hnh di).
o ng ca s ny li; ta c mt i tng Command mi.

Trang 147

Visual Basic

Diagram

SQL

Hnh 12.7: Ca s SQL Builder

Trang 148

Visual Basic

Chng 13:

THIT LP BO CO

Mc tiu:
Chng ny gii thiu cch thc to bo co bao gm hin th d
liu cng nh sp xp v phn nhm d liu.
Hc xong chng ny, sinh vin c th:
o S dng tnh nng Report ca Microsoft Access trong cc ng dng
nh.
o S dng Data Report to bo biu.
o S dng Crystal Report, cng c mnh to bo biu.
Kin thc cn thit:
- Th vin i tng ActiveX Data Objects (ADO).
- Mi trng d liu Data Environment.
Ti liu tham kho:
Visual Basic 6.0 v Lp trnh c s d liu - Chng 21, trang 637 Nguyn Th Ngc Mai (ch bin) Nh xut bn Gio dc - 2001.

Trang 149

Visual Basic

I. S DNG MICROSOFT ACCESS LP BO CO


C hai k thut thi hnh mt bo co Access t ng dng VB:
- S dng Automation phng mt th hin (instance) ca Microsoft Access, thi
hnh bo co trc tip t trong ng dng. Automation l mt k thut cho php giao
tip gia cc ng dng trn Windows. y Microsoft Access s lm Automation
Server.
- Dng VSREPORTS ca VideoSoft cho php ngi s dng VB thi hnh bo co
ca Microsoft Access bt k my ca h c ci t Microsoft Access hay l khng.
y l mt iu khin ActiveX chuyn i bo co t tp tin MDB thnh mt nh
dng m ta c th cung cp cng ng dng.
Trong bi ging ny, chng ti ch trnh by cch th nht mc d cch ny c
nhiu hn ch. i vi cch th hai, c th thc hin c ta cn phi ci t mt
s th vin lin kt ng (DLL). Cc th vin ny tng i kh tm v nht l chng
i hi bn quyn.
Bt li ca k thut dng Automation l buc ngi dng phi chy mt th hin
(instance) ca Microsoft Access cng nh phi ci t Microsoft Access trn my.
lp trnh theo k thut ny, ta tin hnh theo cc bc sau:
- Tham chiu n Microsoft Access bng cch t menu Project chn
Preferences -> Microsoft Access 9.0 Object Library.
- Sau ta to mt i tng nh l i tng ng dng ca Access nh
sau:
Dim MSAccess As Access.Application
- Sau ta cn to mi i tng ny cng nh to mt tham
chiu n c s d liu cha bo co:
Set MSAccess = New Access.Application
MSAccess.OpenCurrentDatabase(Database Name)
- S dng thuc tnh DoCmd thi hnh bo co:
MSAccess.DoCmd.OpenReport "Report Name",acViewNormal
- ng c s d liu:
MSAccess.CloseCurrentDatabase
Lu : Trnh dng rng buc tr vi Automation
Phin bn c ca Automation l OLE Automation, dng trong VB 3.0 v
Microsoft Access 2.0.
Trong VB 3.0, ta c th vit chng trnh nh sau:
Dim MSAccess As Object
Set MSAccess = CreateObject(Access.Application)
on chng trnh trn hot ng tt i vi VB 3.0 nhng c mt cch
khc tt hn. Thay v dng kiu Object, ta nn ch r kiu d liu i tng
m Automation Server cung cp (chng hn Access.Aplication nu l Access).
Bi v khi , VB khng cn thi hnh cu truy vn trn Automation Server mi
Trang 150

Visual Basic

khi ta truy cp n xc nh kiu i tng cn to. K thut ny gi l rng


buc tr, gi y ch ph hp vi 2 tnh hung:
- Ta khng bit trc kiu i tng Automation Server.
- Ta ang s dng mt mi trng pht trin ng dng khng h
tr rng buc sm, nh VBScript hay ASP.

II. S DNG THIT K DATA REPORT


Thit k bo co dng DataReport l im mi trong VB6, y l mt cng c
c h tr bi VB6, cung cp mt cch trc quan v thit k bo co v c u dim
l rt d dng.

II.1 Thit k vi DataReport


- Chn Project -> Components.
- Chn Tab Designers, nh du chn Data Report.

Hnh 13.1 a thit k bo co v n


Cc thnh phn ca mt bo co nh sau:
-

Report Header: Hin th mt ln u bo co.


- Report Footer: Hin th mt ln cui bo co.
- Page Header: Hin th ti u mi trang.
- Page Footer: Hin th ti cui mi trang.

- Detail Section: Hin th cc dng d liu.


- Mt hoc nhiu nhm u cui hin th ti u v cui mi phn nhm.
Cc iu khin ca thit k Data Report nh sau:
- iu khin nhn (Rpt Label).
- iu khin hp vn bn (Rpt Textbox).
- iu khin nh (Rpt Image).
- iu khin hnh dng (Rpt Shape).

Trang 151

Visual Basic

- iu khin cc hm tnh ton (Report Function: rptFuncSum, rptFuncAve,


rptFuncMin, rptFuncMax).

Hnh 13.2 Ca s Data Report


Cc iu khin ca Data Report cng ging nh l cc iu khin chun trn
biu mu, chng c th rng buc vi ngun d liu. Tuy nhin, ta c mt cch thc
khc d dng hn l s dng mi trng d liu (c gii thiu chng trc).
S dng DataEnvironment trong vic to DataReport:
Qu trnh thc hin tri qua cc bc sau:
- To i tng Command.
- Ko th cc trng ca i tng Command ny vo thit k ca Report.
- Thm cc tiu u trang & cui trang.
V d: To bo co v cc sinh vin trong bng STUDENT thuc c s d liu
Student.
- Bc 1: To mt
CSDL Student trong
Environment, thm mt
Command cho php ly d
Student.

ni kt n
trnh Data
i tng
liu t bng

- Bc 2: Ko th cc trng cn
hin th vo bo co ti mc Detail, ch
gi li trng lin quan n thng tin d
liu (t trong phn Detail Section). Thit
Hnh 13.3 Thit lp Data Environment
Trang 152

Visual Basic

lp tn trng di dng ting Vit ti phn Page Header.


- Bc 3: Cung cp cc thng tin cho php DataReport nhn d liu t u bng
cch xc lp: DataSource: DataEnvironment1, DataMember: Student.

Hnh 13.4: Report khi ko th cc trng


Thit k bo biu c phn nhm d liu
- Chn i tng Command ca trnh DataEnvironment cn nhm c s d
liu.
- Hin th trang thuc tnh, chn Tab
Grouping.
- Chn ty chn Group Command
Object.
- t tn cho nhm cng nh chn cc
trng tham gia vo nhm d liu.
- t li gi tr cho thuc tnh Data
Member ch n ni kt mi nhm d
liu.
- Chn bo co thit k, n chut phi,
chn Insert Group Header/Footer.
- Chn tn trng nhm d liu a
Hnh 13.4: Nhm d liu
vo on Group Header.
Khi bo co c thit k nh sau:

Trang 153

Visual Basic

II.2 Xem v xut Data Report


Ta c th xem thng tin v in bo co trn mt ca s ring bit s dng ch
Print Preview bng cch thi hnh phng thc Show.
Khi bo co s c hin th nh sau:

Hnh 13.6: Thi hnh


bo co trong VB

Khi ngi s dng c th duyt qua cc trang nu nh bo co c nhiu trang,


cng nh chn mt trang bo co no in.
Ngoi ra ngi dng c th chn Export bo co ca mnh ra tp tin c nh dng
khc, cc loi nh dng y c th l tp tin vn bn, tp tin HTML. Ta c th chn
la xut mt s trang c th no hoc ton b bo co.

Hnh 13.7: Hp thoi xut bo co

Trang 154

Visual Basic

III. S DNG CRYSTAL REPORT LP BO CO


Crystal Report cho php to bo co c s d liu trong ng dng vit bng VB.
N gm 2 phn ch yu:
- Trnh thit k bo co xc nh d liu s a vo bo co v cch th
hin ca bo co.
- Mt iu khin ActiveX cho php thi hnh, hin th, iu khin v in bo
co khi thi hnh ng dng.
Crystal Report khng c sn khi ci VB6, ta cn ci t thm. Chng trnh ci t
Crystal Report ch c trn bn Professional. Chy tp tin Crystl32.exe trong th mc
\COMMON\TOOLS\VB\CRYSREPT.
III.1 Thit k bo co
Mt im khc bit khi dng Crystal Report l ta khng thit lp bo co i i vi
ng dng c th. Ta s xy dng bo co trc v sau s gi thi hnh bo co t
pha ng dng, bo co khng phi l mt b phn thuc ng dng. Ca s thit k
Crystal Report nh hnh bn di:

Hnh 13.8 Ca s Crystal Report


Khi ta chn to mt bo co mi, Crystal Report trnh by mt hp thoi cho
php la chn mt trong nhiu nhng khun mu bo co nh sn.

Hnh 13.9 Hp thoi chn cc mu


Trang 155

Visual Basic

Kiu bo co
Standard
Listing
Cross-Tab
Mail label
Summary
Graph
Top N
Drill Down
Another

M t
Bo co sp xp thng tin theo dng v ct, cho php nhm
d liu.
Bo co l danh sch d liu lin tc khng c tng kt hay
trng tng cng..
Sp xp d liu theo hai chiu.
Bo co c thit k in d liu theo ct cho nhn th.
Bo co ch hin th thng tin tng qut, khng cha d liu
chi tit.
Bo co th hin d liu mt cch trc quan bng biu
Bo co cho php ch hin th mt s mu tin c chn
Bo co cho php nhn p chut ln d liu tng qut
hin th d liu chi tit.
Cc bo co c khun mu do ngi dng nh ngha trc
.

Chng ta xt qua mt v d s dng Crystal Report lp bo co


- Khi ng Crystal Report v chn New, chn kiu bo co l Standard.
- Tip theo chn Data File.
- Trong hp thoi chn tp tin c s d liu, ta ch n mt tp tin c s d liu,
sau n nt Done. Ta s thy cc bng cng nh cc quan h gia cc bng c
hin th.

Hnh 13.10 Hp thoi quan h gia cc bng

Quan h gia cc bng c xc nh mc thit k c s d liu nn ta


khng cn phi thay i nhng mi lin kt ny.
- Nhn nt Next qua bc tip theo, ta s chn nhng trng tham gia vo bo
co.
- Bc k tip ta chn qua Tab Sort thc hin vic sp xp d liu.
- Tab Style cho php chn cc dng khc nhau ca bo co.
- Sau khi thit k xong, ta n Save lu li bo co.
Trang 156

Visual Basic

Khi m li bo co thit k, ta thy Crystal Report hin th bo co hai mc,


thit k v duyt trc.

Hnh 13.11: Ca s xem trc bo co v thit k bo co


III.2. Thi hnh bo co trong ng dng thng qua iu khin ActiveX ca
Crystal Report
Bc u tin c th thi hnh bo co Crystal Report, ta cn tham kho n
iu khin ActiveX ca Crystal Report bng cch thm cng c Crystal Report vo
n ca chng ta.
Chn cng c Crystal Report v a vo ng dng, biu tng trn hp cng c
nh sau. Trong s kin Click ca mt nt lnh, ta vit on m sau:
Private Sub Command1_Click()
CrystalReport1.ReportFileName = "d:\VB\bc.rpt"
CrystalReport1.PrintReport
End Sub
Thuc tnh ReportFileName xc nh ng dn cng nh tn tp tin bo co.
Vic thi hnh bo co c thc hin nh vo thuc tnh PrintReport. Ngoi ra,
bo co c th thi hnh bng cch hin th trn mt ca s khc hoc l xut ra thng
trn my in, Ta thit t thuc tnh qua hp thoi thuc tnh.

Hnh 13.11 Hp thoi xc lp thuc tnh


Trang 157

Visual Basic

Bo co thi hnh trn mt ca s ring bit, ta c th la chn nhiu cng vic


nh xem qua cc trang, in n bo co, phng to thu nh

Hnh 13.12: Bo co Crystal Report

LI KT
Chng Thit lp bo co cng l chng kt thc ca gio
trnh Visual Basic. Tuy nhin lp trnh s kin v lp trnh c s d
liu vi VB ch l mt phn trong nhng kh nng m VB mang li.
Hy vng chng ti s gp li bn c trong nhng chuyn khc
ca VB.

Trang 158

You might also like