You are on page 1of 114

TT.

Visual Basic

Chng 1 THIT K BIU MU DNG CC


IU KHIN
Mc tiu:
Chng ny gm cc bi tp nhm rn luyn cho sinh vin cc thao tc
cn thit cho php thit k cc ng dng n gin trong mi trng lp trnh
Visual Basic cng nh mt s k nng lp trnh c bn khi lm vic vi Visual
Basic.
Hc xong chng ny, sinh vin phi nm bt c cc vn sau:
- S dng cc iu khin thit k giao din trong Visual Basic.
- Vn dng cc cu trc lp trnh trong Visual Basic vit m lnh.
- S dng mt s cu trc d liu trong Visual Basic.
Kin thc c lin quan:
- Gio trnh Visual Basic; Chng 1, 2, 3, 4, 5.
Ti liu tham kho:
- Visual Basic 6 Certification Exam Guide - Chapter 1, Page 1;
Chapter 2, Page 41; Chapter 4, Page 89 - Dan Mezick & Scot Hillier McGraw-Hill - 1998.

Trang 1

TT. Visual Basic

I. S DNG MT S IU KHIN
I.1 Bi tp c hng dn
Bi tp 1I-1

THAO TC TRN LISTBOX


Bc 1: To th mc Basic\Bt1-1. To mt d n mi kiu Standard EXE, lu vo
trong th mc trn.
Bc 2: Thm 2 List Box v mt Button vo form (hnh 1). Nhn p ln form m
ra ca s Code, nhp cc on m sau trong s kin Form_Load:
Form1.List1.AddItem Thing 3
Form1.List1.AddItem Thing 2
Form1.List1.AddItem Thing 1

90
Hnh 1.1: Thao tc vi List Box
Bc 3: Chy ng dng bng cch chn Run/Start. List1 hin th 3 phn t va thm
vo bc 2. Chm dt chng trnh bng cch chn Run/End trn menu tr v
mi trng son tho.
Bc 4: Nhp p ln Button Command1 hin th s kin Click ca Command1.
Bc 5: Mc ch ca Command1 l chuyn nhng phn t c chn t List1 sang
List2. Thm on m sau vo th tc s kin Click ca Command1:
' Kiem tra neu mot phan tu duoc chon
If Form1.List1.ListIndex = -1 Then Exit Sub
' Chep cac phan tu duoc chon tu List1 sang List2
Form1.List2.AddItem Form1.List1.List(Form1.List1.ListIndex)
Bc 6: Chy ng dng. Nhp phn t th nht ca List1, sau nhp Command1.
iu g xy ra? Phn t c chn ca List1 phi c hin th bn List2. Chm dt
ng dng v tr v mi trng son tho.
Bc 7: Tm trong phn tr gip cc thuc tnh sau ca ListBox:
o ListCount
o List
Trang 2

TT. Visual Basic


o ListIndex
Bc 8: Tm trong phn tr gip cc hm sau ca ListBox:
o AddItem
o RemoveItem
o Clear
Bc 9: Tm tr gip cho lnh VB:
Exit Sub
Bc 10: on m trong th tc Command1_Click thc hin thao tc chp phn t t
mt ListBox sang mt ListBox khc. By gi ta lm ngc li: loi b phn t trong
List1. lm iu ny ta nhp p ln Command1 v thm dng code sau vo cui
th tc:
' Xoa phan tu duoc chon trong List1
Form1.List1.RemoveItem Form1.List1.ListIndex
Bc 11: Chy chng trnh v chn phn t th nht trong List1. iu g xy ra?
Bc 12: Nu khng chn phn t no trong List1, nhp Command1. iu g xy ra?
Ti sao?
Bc 13: Ta c mt button dng chuyn cc phn t c la chn t tri sang
phi (List1 sang List2), vi button cn li ta s dng chuyn cc phn t c chn
t phi sang tri (List2 sang List1).
Bc 14: Vi Command2 ta s copy on m t Command1 vi 1 vi thay i nh.
Bc 15: Command2 thc hin cc thao tc ging vi Command1, nhng c nhim
v di chuyn phn t c la chn t List2 sang List1. on m trong Command1 s
c s dng li vi mt vi thay i nh. Nhp p ln Command1, chn cc m
lnh thm vo cc bc trc. Chn Edit/Copy trn menu.
Bc 16: ng ca s Code v nhp p ln Command2. S kin Command2_Click
s hin th trong ca s Code. Nhp bt k bn trong th tc s kin v chn
Edit/Paste trn menu. Nh vy ta chp on m t Command1 sang Command2.
Bc 17: Sa li cc m lnh va c chp. Thay i cc ch thch cho thch hp;
i List1 thnh List2 v ngc li. Nhng sa i ny gip Command2 c th thc
hin thao tc chuyn cc phn t c chn t List2 sang List1.
Lu cc cng vic thc hin bng cch chn File/Save Project.
Bc 18: Chy chng trnh. Chn phn t th nht trong List1 v chn Command1
chuyn n sang List2. By gi chn phn t th nht trong List2, v nhp
Command2. Nu Command2 khng thc thi, tr li mi trng son tho. Kim tra li
on m lnh trong th tc Command2_Click ta va chp bc trn.
Bc 19: Lu rng cc phn t c 2 ListBox khng c sp th t; nu mun sp
th t, ta nhp List1 v i thuc tnh Sorted thnh True, tng t i vi List2.
Bc 20: Lu d n li v chy chng trnh. Tt c cc phn t phi c hin th
theo th t trong c 2 ListBox, bt chp th t chng c thm vo trong ListBox.

Bi tp 1I-2

THAO TC VI SPINCONTROL

Trang 3

TT. Visual Basic


Mt SpinControl l s kt hp ca TextBox v Slider. Slider to mt min gi
tr s c hin th trong TextBox. Cc gi tr ny c th c thay i bng cch
nhp trc tip vo trong TextBox.
Bc 1: To th mc Basic\Bt1-2. To d n mi trong th mc trn.
Bc 2: Trong Form1, thm mt TextBox v Horizontal Scroll Bar nh hnh 2. Thit
lp cc thuc tnh sau cho mi Control:

Hnh I.2: Spin Control

Item1: TextBox
Name: Text1
Text: <blank>
Item2: Horizontal Scroll Bar
Name: Hscroll1
LargeChange: 10
Max: 100
Bc 3: Nhp p ln scrollbar nhp m lnh, y l s kin Change ca Scroll
Bar gi l hm HScroll1_Change. Thm on m sau hin th gi tr hin thi ca
scroll bar trong TextBox.
Text1.Text = HScroll1.Value
Bc 4: Chy ng dng bng cch chn Run/Start trn menu. By gi nhp cc mi
tn tri v phi ca scroll bar. Gi tr trong TextBox phi thay i.
Bc 5: By gi thm m thay i gi tr bng cch nhp trc tip gi tr trong
TextBox. Nhp p vo TextBox v thm on m sau thit lp gi tr cho scroll
bar khi TextBox thay i:
HScroll1.Value = Text1.Text
Bc 6: Chy chng trnh v nhp 50 vo TextBox. Vch ca scroll bar thay i
theo. Thay i vch ca scroll bar, gi tr trong TextBox cng thay i.
Bc 7: Trong khi chy chng trnh, nhp k t A vo TextBox. iu g xy ra?
Nguyn nhn v scroll bar ch nhn cc gi tr l s ch khng phi k t.
Bc 8: ngn chn nhng k t khng mong mun c nhp vo TextBox, ta s
dng s kin KeyPress. S kin ny xy ra khi c mt phm trn bn phm c nhn,
nhng trc khi gi tr thc s c hin th trn TextBox. S kin ny nhn mt gi
tr s nguyn ca phm c nhn, gi l ASCII. Mi k t trn bn phm c i
din bng mt m ASCII duy nht. Do ta c th kim tra phm no c nhn v b
qua n nu ta thy khng cn thit.
Bc 9: Thm on m sau vo s kin Text1_KeyPress ngn chn cc gi tr
khng phi l s.
' Loai bo ky tu khong can thiet
Trang 4

TT. Visual Basic


If KeyAscii = vbKeyBack Then Exit Sub
If KeyAscii < vbKey0 Or KeyAscii > vbKey9 Then
KeyAscii = 0
End If
Bc 10: Lu d n li v chy chng trnh.

Bi tp 1I-3

THAO TC VI DRIVELISTBOX, DIRLISTBOX, FILELISTBOX


Trong v d ny ta phi to 5 i tng, trong c 4 iu khin:
o Mt Form.
o Mt iu khin DriveListBox
o Mt iu khin DirListBox
o Mt iu khin FileListBox
o Mt iu khin ImageBox
Bc 1: To giao din ngi dng. Ta ch cn nhp v v ng v tr tng iu khin
trn Form.
1
4

Hnh I.3: Giao din la chn tp tin hnh nh hin th


1:
2:
3:
4:

DriveListBox
Name: drvSource
DirListBox
Name: dirSource
FileListBox
Name: filSource
Pattern: *.bmp;*.wmf;*.ico;*.jpg
ImageBox
Name: ImgSource
Stretch: TRUE
Trang 5

TT. Visual Basic


Bc 2: Vit m trao i thng tin gia cc i tng:
Trong ca s thit k Form, nhp p vo DriveListBox, ca s Code hin ra,
x l s kin sau:
Private Sub drvSource_Change()
dirSource.Path = drvSource.Drive
End Sub
Tng t cho DirListBox & FileListBox
Private Sub dirSource_Change()
filSource.Path = dirSource.Path
End Sub
Private Sub filSource_Click()
imgSource.Picture = LoadPicture(filSource.Path & "\" & filSource.FileName)
End Sub
Bc 3: Lu d n li vo th mc Basic\Bt1-3. Chy chng trnh nh phm F5.

Hnh I.4: Kt qu thc thi

Bi tp 1I-4

IU KHIN OLE
Bc 1: To d n mi, trong ta c s dng OLE.
Hp thoi Insert Object hin ra ta la chn, y chn kch hot Create
New, Object Type l Bitmap Image; nh du chn Display as Icon.

Trang 6

TT. Visual Basic


Hnh I.5: S dng OLE Control
Bc 2: Nhp OK, VB s gi trnh ng dng Paint & ta v hnh trn ca s Paint. Sau
chn Exit & Return trong ca s Form, ta c:

Hnh I.6: Kt qu thc thi ng dng


Bc 3: Lu d n vo th mc Basic\Bt1I-4 v chy chng trnh; nhp p vo
biu tng Bitmap Image,VB s khi ng Paint ta hiu chnh hnh v u.

I.2 Bi tp t lm
1) Thit k chng trnh nh sau:

Hnh I.7 Cc php tnh


c bn

Nhp vo 2 gi tr A, B; sau chn mt php ton (+,-,*,/). Nhp chn nt


nhn Thc hin, kt qu s hin th trong iu khin nhn Kt qu.
Trang 7

TT. Visual Basic


2) Thit k chng trnh nhp vo ta ca hai im (x1,y1); (x2,y2) v cho
php:
a) Tnh h s gc ca ng thng i qua hai im theo cng thc:
H s gc = (y2 - y1) /(x2 - x1)
b) Tnh khong cch gia hai im theo cng thc:
khong cch = (x2 - x1) 2 + (y2 - y1)2
Giao din chng trnh c th nh sau:

Hnh I.8: Ta cc
im

3) Vit chng trnh cho php nhp vo bn knh r ca mt hnh trn. Tnh chu vi v
din tch ca hnh trn theo cng thc :
Chu vi
CV = 2*Pi*r
Din tch
Dt = Pi*r*r
Hin th cc kt qu ln mn hnh.
4) Thit k chng trnh c giao din nh hnh di v thc hin cc chc nng sau:

Trang 8

TT. Visual Basic


Hnh I.9: La chn tn
o Mi khi ngi s dng chng trnh nhp thng tin vo 2 TextBox, sau
nhp chn nt Thm, gi tr ca M s c a vo ComboBox, cn gi tr ca
H v tn c a vo ListBox.
o Mi khi h chn mt m s no trong ComboBox, gi tr h v tn tng
ng cng s c chn trong ListBox; ng thi chng s c hin th ln trn cc
iu khin TextBox tng ng (nh hnh). (X l s kin Combo1_Click &
List1_Click)
o i vi m s v h tn ca mt ngi, ta c th sa i gi tr ca chng
trong cc nhp TextBox, sau chn nt Sa, gi tr ca chng trong ComboBox &
ListBox cng sa i theo.
o Khi ngi dng chn mt m s (hay h tn) trn ComboBox (hoc ListBox),
sau h chn Xa, cc thng tin ny c xa ra khi ComboBox & ListBox.

II. CC CU TRC LP TRNH TRONG VB


II.1 Bi tp c hng dn
Bi tp 1II-1

S DNG SELECT CASE


To th mc Basic\Bt1II-1. Thit k chng trnh c giao din & lu trong th mc
trn:

Hnh I.10: Select Case

y, ngi s dng chng trnh nhp vo mt tui no trong nhp tui,


sau h nhp nt Nhn xt, mt nhn xt s xut hin ng vi tui m h nhp t
bn phm.
Lc ny ta s dng ton t so snh (=, <, <=, >, >=, <>) cng vi cc t kha Is
v To trong biu thc.
Is: so snh bin vi biu thc c lit k sau t kha Is.
To: nh ngha phm vi ca gi tr.
S kin Command1_Click():
Dim Age As Integer
Age = Val(Text1.Text)
Trang 9

TT. Visual Basic


Select Case Age
Case Is < 18
Label2.Caption = "Ban con thieu nien, ban phai hoc
thoi!"

Case 18 To 30
Label2.Caption = "Ban da truong thanh, lap gia dinh
thoi!"

Case 31 To 60
Label2.Caption = "Lua tuoi trung nien roi!"
Case Else
Label2.Caption = "Ban co con chau day dan roi
nhe!"
End Select
Bi tp 1II-2

BIN V CU TRC
Bc 1: To th mc Basic\Bt1II-2. To d n mi (VB Standard EXE) trong th
mc trn; thm mt modul vo d n, trong modul nay thm vo on m sau:
Public Const tieude As String = "Quan ly hanh chinh"
Public Const sohieu As String = "1.0"
Thm on m sau vo hm x l s kin Form_Load ca Form1:
Form1.Caption = tieude & " phien ban " & sohieu
Chy ng dng, ta thy tiu ca Form: Quan ly hanh chinh phien ban 1.0.
By gi, m Modul1 v thay Public bng Private. Chy chng trnh. iu g
xy ra?
Bc 2: i cc khai bo trn thnh Public, thm dng sau y vo u th tc
Form_Load:
tieude = Loi xuat hien & Hang so khong the thay doi duoc.
Chy chng trnh, iu g xy ra?
Bc 3: Thm dng sau trong hm x l s kin Form_Resize:
MsgBox FORM RESIZE
Bc 4: Chy chng trnh, khi Form bt u c hin th (s kin Form_Load), s
kin Resize ca Form c thc hin. Ch c hm x l s kin Resize mi cho bit
chc rng hm Form_Load c thc thi. kim chng ta to mt bin trn form v
trong hm Form_Load ta thit lp gi tr ca n. Sau , hm Form_Resize c th
kim tra bin v x l trn bin ny.
Bc 5: Khai bo mt bin Private trong Form1 tn sukienLoad:
Private sukienLoad As Boolean
Trong hm Form_Load, t gi tr True cho bin trn:
sukienLoad = True
By gi ta kim tra gi tr ca bin trong hm Form_Resize. Thm vo on m
sau trong hm Form_Resize:
If sukienLoad = True Then
SukienLoad =False
Exit Sub
End If
MsgBox Form Resize
Trang 10

TT. Visual Basic


Chy ng dng, khi Form bt u c hin th, ta khng thy xut hin cu
thng bo, nhng khi ta thay i kch thc ca Form (nhn cc nt _, ca form),
cu thng bo li xut hin. y ta s dng mt bin lm trung gian cho s giao
tip gia s kin Form_Load v s kin Form_Resize. Bi v c 2 hm ny nm trong
Form1, nn ta c khai bo Private cho chng, cc ng dng khc khng th truy xut
n cc bin ny.
CHNG TRNH CON
Bc 6: Ta vit mt chng trnh con x l chui. u vo ca chng trnh con l
mt chui, kt qu ca chng trnh con l chui nhng cc t u c vit hoa
k t u tin. Bi tp ny gip ta khai bo (nh ngha) mt chng trnh con v gi
thc thi chng trnh con trong chng trnh ng dng ca mnh.
Chn Modul1 trong ca s son tho chng trnh, sau nhp chn
Tools\Add Procedure. nh ngha mt hm public tn Doihoa() nh sau:
Public Function Doihoa(s As String) As String
Dim s1 As String
Dim s2 As String
Do While InStr(s, " ") <> 0
s1 = Left(s, InStr(s, " "))
s = Right(s, Len(s) - InStr(s, " "))
' Doi chu hoa
s1 = UCase(Left(s1, 1)) & Right(s1, Len(s1) - 1)
s2 = s2 & s1
Loop
' Tra ket qua
Doihoa = s2 & " " & s
End Function
' Ham nay khong viet hoa tu cuoi cung.
Bc 7: Hm Doihoa c nhim v nhn vo mt chui v i k t u tin ca cc t
trong chui thnh ch hoa. By gi ta kim tra hm ny nh sau: Thm mt TextBox
v mt nt nhn (Button) ln Form1. Nhp vo Button, ta thm on m sau vo hm
x l s kin Command1_Click:
Form1.Caption = Doihoa(Text1.Text)
Chy ng dng, nhp mt chui vo Text1, nhp Command1. Chui ch hoa s
xut hin trn tiu ca Form1.
Bc 8: Sa li sao cho c th vit hoa k t u tin ca tt cc t.

Bi tp 1II-3

LA CHN VI LISTBOX
Bc 1: To th mc Basic\Bt1II-3. To d n mi VB Standard EXE trong th mc
trn, sau to Form c dng sau:
Trang 11

TT. Visual Basic

Hnh I.11: La chn vi ListBox


Ta c 2 ListBox v cc nt nhn (Button); trong :
Nt > chuyn mt phn t t tri sang phi
Nt < chuyn mt phn t t phi sang tri.
Nt >> chuyn tt c cc phn t t tri sang phi.
Nt << chuyn tt c cc phn t t phi sang tri.
Thm 2 ListBox v 4 Button vo Form1. Trong hm x l s kin Form_Load
thm vo on m:
List1.AddItem "Thing 1"
List1.AddItem "Thing 2"
List1.AddItem "Thing 3"
List1.AddItem "Thing 4"
List1.AddItem "Thing 5"
List1.AddItem "Thing 6"
Chy chng trnh.
Bc 2: Thm hm x l s kin Click cho nt nhn 1 (>) Command1_Click:
' Kiem tra co chon hay khong?
If Form1.List1.ListIndex = -1 Then Exit Sub
' Chep tu trai sang phai
Form1.List2.AddItem Form1.List1.List(Form1.List1.ListIndex)
' Xoa ben trai
Form1.List1.RemoveItem Form1.List1.ListIndex
Bc 3: Chy chng trnh, chn phn t trong List1 v nhp nt >, phn t
chuyn sang List2. By gi ta lm ngc li: chuyn phn t c chn t List2 sang
List1. Tr v ca s son tho; chn on m va nhp trong List1, chn Edit\Copy
trong menu ca VB. Nhp ln Button <, chn Edit\Paste. By gi ta sa li on m
sau trong hm x l s kin Command2_Click:
' Kiem tra co chon hay khong?
If Form1.List2.ListIndex = -1 Then Exit Sub
Trang 12

TT. Visual Basic


' Chep tu phai sang trai
Form1.List1.AddItem Form1.List2.List(Form1.List2.ListIndex)
' Xoa ben phai
Form1.List2.RemoveItem Form1.List2.ListIndex
Bc 4: Lu d n v chy chng trnh.
Ta nhn thy 2 on m lnh trn (cho Button < v >) l nh nhau (ch i ch
List1 cho List2 v ngc li). Do ta s vit mt chng trnh con chuyn d liu
t ListBox ny sang ListBox kia, v trong hm x l s kin ca 2 Button ta ch cn
gi chng trnh con ny chuyn d liu.
Thm mt Modul mi vo d n tn Modul1, chn Tool\Add Procedure
thm mt chng trnh con vo tn Chuyendulieu()
Vo Modul1, sa i li th tc chuyn d liu nh sau:
Public Sub Chuyendulieu(L1 As ListBox, L2 As ListBox)
' Kiem tra co chon hay khong?
If L1.ListIndex = -1 Then Exit Sub
' Chep
L2.AddItem L1.List(L1.ListIndex)
' Xoa ben trai
L1.RemoveItem L1.ListIndex
End Sub
By gi hm x l s kin ca Command1 (Command1_Click) ta sa li nh
sau:
Call Chuyendulieu(Form1.List1, Form1.List2)
Hm Command2_Click:
Call Chuyendulieu(Form1.List2, Form1.List1)
Lu d n v chy chng trnh. Kim tra kt qu.

Bi tp 1I -4

TRUYN THEO A CH V TRUYN THEO GI TR


Bc 1: Tham s a vo chng trnh con c truyn theo mt trong 2 cch: theo
a ch v theo gi tr. By gi ta to d n mi trong th mc Basic\Bt2-4 kim tra
chng.
Bc 2: To Form1 nh sau:

Trang 13

TT. Visual Basic

Hnh I.12: Truyn


tham s

2
3

Button 1: Name: cmdTTri; Caption: Truyen tri


Button 2: Name: cmdTChieu; Caption: Tham chieu
TextBox: Name: Text1
Label 1: Name: lblTruoc
Label 2: Name: lblTrong
Label 3: Name: lblSau
Bc 3: Thm 1 Modul vo d n tn l Modul1, chn Tools\Add Procedure thm th
tc Thamchieu nh sau:
Name: Thamchieu
Type: Sub
Scope: Public
Bc 4: Thm on m sau trong th tc Thamchieu
Public Sub Thamchieu(so As Integer)
so = so + 2
Form1.lblTrong.Caption = Str(so)
End Sub
Bc 5: Chn Tool\Add Procedure thm th tc Truyentri nh sau:
Name: Truyentri
Type: Sub
Scope: Public
Bc 6: Thm on m sau trong th tc Truyentri
Public Sub Truyentri(ByVal so As Integer)
so = so + 2
Form1.lblTrong.Caption = Str(so)
End Sub
Bc 7: S khc nhau gia 2 th tc trn l t kha ByVal trong th tc Truyentri.
By gi ta thm th tc x l bin c Click ca Button cmdTTri. Thm on m sau:
Private Sub cmdTTri_Click()
Dim n As Integer
n = Val(Text1.Text)
lblTruoc.Caption = Str(n)
Call Truyentri(n)
lblSau.Caption = Str(n)
End Sub
Bc 9: Thm hm x l bin c cmdTChieu_Click cho Button cmdTChieu:
Trang 14

TT. Visual Basic


Private Sub cmdTChieu_Click()
Dim n As Integer
n = Val(Text1.Text)
lblTruoc.Caption = Str(n)
Call Thamchieu(n)
lblSau.Caption = Str(n)
End Sub
Bc 10: Lu d n, chy chng trnh. Nhp s bt k vo TextBox ri nhp nt
Truyen tri, sau nhp nt Tham chieu. Kim tra kt qu. Gii thch.

Bi tp 1II-5

THAM S TY CHN
Bc 1: To th mc tn Basic\Bt1II-5. To d n mi trong th mc ny.
Bc 2: To Form nh sau:

Hnh I.13: Ly thi


gian

Trong :
Label: Name: lblTg
Button 1: Name: cmdGioPhut
Button 2: Name: cmdGioPhutGiay
Bc 3: Thm modul mi vo d n tn Modul1. Chn Tool\ Add Procedure to th
tc:
Name: Laythoigian
Type: Sub
Scope: Public
Bc 3: Thm on m sau vo th tc trn:
Public Sub Laythoigian(gio As String, phut As String, Optional giay As String)
' Tham so thu 3 co tu khoa Optional, nghia la ta
' co the goi thu tuc co the co tham so nay hay khong co deu duoc
Trang 15

TT. Visual Basic


' Ham IsMissing kiem tra xem tham so nay co hay khong
If IsMissing(giay) Then giay = ""
Dim hientai
hientai = Now
gio = Format$(hientai, "hh")
phut = Format$(hientai, "nn")
giay = Format$(hientai, "ss")
End Sub
Bc 4: Thm th tc x l s kin cho Button cmdGiophutgiay, trong th tc ny
chn on m sau:
Private Sub cmdGiophutgiay_Click()
Dim gioht As String
Dim phutht As String
Dim giayht As String
Call Laythoigian(gioht, phutht, giayht)
lblTg.Caption = gioht & ":" & phutht & ":" & giayht
End Sub
Bc 5: Thm th tc x l s kin cho Button cmdGiophut, trong th tc ny chn
on m sau:
Private Sub cmdGiophut_Click()
Dim gioht As String
Dim phutht As String
' Khong su dung tham so thu ba
Call Laythoigian(gioht, phutht)
lblTg.Caption = gioht & ":" & phutht
End Sub
Bc 6: Lu d n li v chy chng trnh. Kim tra kt qu.
Bi tp 1II-6

PARAM ARRAY
Bc 1: To th mc Basic\Bt1II-6. To d n mi trong th mc ny.
Bc 2: To Form nh hnh sau:

Hnh I.14: Param Array

Trang 16

TT. Visual Basic


Trong :
ListBox: Name: lstTen
Button: Name: cmdds; Caption: Them vao danh sach
Bc 3: Chn modul mi vo d n tn Modul1. Sau , chn Tool\Add Procedure
chn th tc sau:
Name: Diends
Type: Sub
Scope: Public
Bc 3: Chn on m sau vo th tc Diends
Public Sub Diends(ParamArray Ten() As Variant)
' Su dung ParamArray thi mang phai kieu Variant va
' mang nay la tham so cuoi cung cua thu tuc
Dim hten As Variant
For Each hten In Ten()
Form1.lstTen.AddItem hten
Next
End Sub
Bc 4: ParamArray cho php khng cn xc nh s lng cc i s trong mt
chng trnh con. By gi, thm hm x l s kin cho nt cmdds: cmdds_Click:
Private Sub cmdds_Click()
Call Diends("Huynh Xuan Hiep", "Nguyen Van Linh", "Lam Hoai
Bao")
Call Diends
Call Diends("Phan Huy Cuong")
End Sub
Bc 5: Lu d n li v chy chng trnh. Kim tra kt qu (hnh bn di). Lu
n li gi th tc trong s kin cmdds_Click (s lng i s khc nhau)

Hnh I.15: Kt qu Param


Array

Trang 17

TT. Visual Basic


Bi tp 1II-7

X L CHUI
Bc 1: To d n mi trong th mc Basic\Bt2-7 vi giao din nh sau:
1
2
3
4

Hnh I.16: X l
chui

1: Form: Name: frmMain; MinButton: False; MaxButton: False; Font: VNI-Times.


2: Label: Name: lblTen.
3: TextBox: Name: txtTen.
4: CommandButton: Name: cmdTen; Caption: Tch tn.
5: CommandButton: Name: cmdCKT; Caption: Ct khong trng.
Bc 2: To mt hm ct khong trng nh sau:
Private Function ATrim(ByVal Name As String) As String
Name = LTrim(RTrim(Name))
Do While InStr(Name, "99") <> 0
Name = Replace(Name, "99", "9")
Loop
ATrim = Name
End Function
Bc 3: Trong ca s thit k Form; nhp p vo Tch tn, ta x l on m cho s
kin ny:
Private Sub cmdTen_Click()
Dim sName As String, Name As String
sName = ATrim(StrConv(txtTen.Text, vbProperCase))
Dim i As Long
i = InStrRev(sName, "9")
Name = Right(sName, Len(sName) - i)
MsgBox Name & ": " & Str(Len(Name))
End Sub
Bc 4: Sau , tr li ca s thit k, nhp p vo Ct khong trng, ta x l:
Private Sub cmdCKT_Click()
Dim sName As String
sName = ATrim(StrConv(txtTen.Text, vbProperCase))
Trang 18

TT. Visual Basic


MsgBox sName, , "Kieu du lieu chuoi"
End Sub
Bc 5: Lu d n v chy chng trnh.

Bi tp 1II-8

X L LI
Bc 1: To mt d n mi. Dng Tools\Add Procedure thm mt th tc mi tn
GoiThuTuc vo Form1 vi ni dung nh sau:
Public Sub GoiThuTuc()
Dim bien As Integer
MsgBox "Truoc khi gan tri cho bien"
bien = "Bien nguyen khong nhan gia tri la chuoi"
MsgBox "Sau khi gan tri cho bien: " & "Bien = " & Format(bien)
End Sub
Bc 2: Th tc x l s kin Form_Load c ni dung nh sau:
Private Sub Form_Load()
MsgBox "Truoc khi goi thu tuc"
Call GoiThuTuc
MsgBox "Sau khi goi thu tuc"
End Sub
Lu d n vo th mc Basic\Bt1II-8:
Form: tn l form1
Project: Debug
Bc 3: Chy chng trnh. VB a ra hp thoi bt li (debug) chng trnh. Ta
chn End tr v ca s son tho.
To tp tin thc thi tn Debug.exe bng cch chn File\Make Debug.exe. Chy
tp tin Debug.exe t Windows Explorer ta nhn c hp thoi bo li v chng
trnh t ng chm dt.
Nhn xt kt qu khi thc hin chng trnh.
Bc 4: By gi ta thm vo on m x l li trong th tc ca s kin Form_Load:
Private Sub Form_Load()
On Error GoTo Xulyloi
MsgBox "Truoc khi goi thu tuc"
Call GoiThuTuc
MsgBox "Sau khi goi thu tuc"
Thoat:
Exit Sub
Xulyloi:
Trang 19

TT. Visual Basic


MsgBox "Su kien Form_Load - Loi xay ra: " & Err.Description
Resume Thoat
End Sub
Bc 5: Lu d n v chy chng trnh. Nhn thy, thay v ta nhn c cu thng
bo li t VB, mt hp thoi bo li do ta a vo xut hin. Lu , nhng li c
bt trong th tc Form_Load (ch khng phi trong GoiThuTuc()). Nguyn nhn v
th tc GoiThuTuc() c gi bi th tc x l s kin Form_Load.
Bc 6: Bin dch li thnh tp tin Debug.exe, chy n. Nhn xt kt qu.
Bc 7: Cc kt qu trn cho ta bit c cc li trong s kin Form_Load c x l
bi cc thao tc bt li trong th tc Form_Load. Nhng nu th tc GoiThuTuc()
cng c cc thao tc bt li chng trnh th sao? n gin gi s mt li xut hin
trong GoiThuTuc(). B phn x l li ca GoiThuTuc (do ta thm vo bt li
chng trnh) s thc thi thay v on lnh bt li ca s kin Form_Load c thc
hin. Khi GoiThuTuc chm dt, quyn x l li mi trao li cho s kin Form_Load.
Sa li th tc GoiThuTuc nh sau:
Public Sub GoiThuTuc()
Dim bien As Integer
On Error GoTo Xulyloicucbo
MsgBox "Truoc khi gan tri cho bien"
bien = "Bien nguyen khong nhan gia tri la chuoi"
MsgBox "Sau khi gan tri cho bien: " & "Bien = " & Format(bien)
Thoatthutuc:
Exit Sub
Xulyloicucbo:
MsgBox "GoiThuTuc() - Loi xay ra: " & Err.Description
Resume Thoatthutuc
End Sub
Bc 8: Lu d n v chy chng trnh. Thay on m Resume Thoatthutuc bng
Resume v chy chng trnh. Mt vng lp v tn xy ra do chng trnh s quay li
on m b li v c gng thc thi n; thot chng trnh ta phi bm t hp phm
Ctrl + Break.
By gi thay Resume bng Resume Next v chy li chng trnh. Nhn xt kt
qu. Gii thch.

II.2 Bi tp t lm
1) Thit k chng trnh cho php nhp vo cc h s a, b ca phng trnh bc 1
dng: ax+b=0; sau gii phng trnh ny. Giao din chng trnh c th nh sau:

Trang 20

TT. Visual Basic

Hnh I.17: Phng trnh


bc 1

2) Thit k chng trnh cho php nhp vo cc h s a, b, c ca phng trnh bc 2


dng: ax2 + bx + c=0; sau gii phng trnh ny.
3) Thit k chng trnh cho php nhp vo mt k t, sau kim tra xem k t
thuc tp hp no trong cc tp k t sau:
Cc k t ch hoa: 'A' ...'Z'
Cc k t ch thng: 'a' ... 'z'
Cc k t ch s : '0' ... '9'
Cc k t khc.
4) Gii phng trnh bc 1 bng cch s dng cu trc Select Case
5) To mt chng trnh hin th mt danh sch chn la cho ngi dng trong mt
ListBox, sau x l vi cu trc quyt nh Select Case.
Mc ch ca iu khin s kin ny l hin thi mt danh sch cc quc gia, sau
hin th mt thng ip cho mng bng ngn ng bn x khi ngi dng chn
quc gia ca h.

Hnh I.18: Li cho cc nc


Chng hn: Ting Anh: Hello, programmer
Ting c: Hallo, programmierer
Ting Ty Ban Nha: Hola, programador
Ting : Ciao, programmatori
6) S dng vng lp For.. Next
S dng For.. Next thay i ln k t trn mt Form bng cch thay i
thuc tnh FontSize ca Form.
Thit k Form c giao din:
Trang 21

TT. Visual Basic

Hnh I.19: ForNext


S kin Command1_Click()
Dim i As Integer
For i = 1 To 10
Form1.FontSize = 10 + i
Print "Line "; i
Next
Chy chng trnh.
7) Thit k chng trnh cho php tnh N! (N! = 1*2*3**N). Giao din ngh:

Hnh I.20: Tnh N!


8) Thit k chng trnh cho php nhp vo mt s nguyn N; sau tnh cc tng
sau:
a. S=1 + 2 + ... + n
b. S=1/2 + 2/3 + ... +n/(n+1)
c. S= - 1 +2 - 3 +4 - ... + (-1)nn
9) Thit k chng trnh cho php nhp vo s nguyn dng N; sau tm s
nguyn dng k nh nht sao cho

2
3
k
+
+ ... +
N.
1* 3 2 * 4
(k 1) * (k + 1)

10) Thit k chng trnh cho php nhp vo 2 s nguyn A, B; sau tm UCLN v
BCNN ca hai s a v b theo thut ton sau ( K hiu UCLN ca a, b l (a,b)
cn BCNN l [a,b])
- Nu a chia ht cho b th (a,b) = b
- Nu a = b*q + r th (a,b) = (b,r)
- [a,b] = a*b/(b,r)
Trang 22

TT. Visual Basic


11) Thit k chng trnh cho php nhp vo s nguyn N; sau vit 1 hm tnh N!;
cui cng hin th kt qu gi tr N!.
12) Thit k chng trnh cho php nhp vo 2 s nguyn N, K; s dng hm tnh N!
trn, vit mt hm tnh gi tr t hp chp K ca N phn t theo cng thc
C NK =

N!
.
K !*( N K )!

13) Thit k chng trnh cho php nhp vo s thc X v s nguyn N; sau vit
cc hm tnh cc tng sau ri hin th kt qu:
- S= 1 + x +x2 + x3 + ... + xn
- S= 1 - x +x2 - x3 + ... (-1)n xn
- S= 1 + x/1! +x2/2! + x3/3! + ... + xn/n!
14) S dng vng lp Do While Loop thit k chng trnh cho php nhp vo mt
s nguyn, sau thng bo kt qu xem s c phi l s nguyn t hay khng?
on chng trnh kim tra s nguyn N c nguyn t hay khng:
i=2
Do While (i < N) And (N Mod i <> 0)
i=i+1
Loop
If i = N Then N l s nguyn t
Else N khng l nguyn t
15) Lm li bi tp 11 (tnh N!) nhng s dng vng lp Do While Loop.
16) Lm li bi tp 15 (kim tra s nguyn t) nhng bng cch s dng Do Until
Loop.
17) Lm li bi tp 11 (tnh N!) nhng s dng vng lp Do Until Loop.
18) Thit k chng trnh cho php nhp vo mt s nguyn N; sau phn tch s
nguyn ny ra tha s nguyn t. Giao din chng trnh c th nh sau:

Hnh I.21: Tha s nguyn t


19) S dng iu khin nh thi (Timer).
To mt chng trnh cho php ngi dng 15 giy nhp mt khu trong
mt TextBox.
Nu ngi dng khng nhp mt khu ng trong thi gian ni trn, chng
trnh hin th thng bo Time Expired (Ht thi gian) v ng chng trnh.
Thi gian lm bi tp: 30 pht.
Giao din ngh:
Trang 23

TT. Visual Basic

Hnh I.22: Giao


di
Nhp vo mt khu cn thit (gi s mt khu l: Secret)
Nu nhp ng mt khu, ri nhp nt Nhp, mt hp thng bo xut hin
vi ni dng: Ban dang nhap thanh cong.

Hnh I.23: Li ng nhp


-

Nu nhp mt khu sai, ri nhp nt Nhp, mt thng bo xut hin vi ni


dung: Xin loi, chung toi khong biet ban!

Hnh I.24: Li ng nhp


Sau nhp nt OK trn hp thng bo ny th chng trnh cho bn
nhp li mt khu.
- Nu thi gian qu 15 giy m ngi dng cha nhp ng mt khu th mt
thng bo s hin ln Xin loi, thoi gian da het; sau chng trnh s kt
thc.

Hnh I.25: Bo ht gi
20) Thit k chng trnh tng t nh ng dng Canculator ca Windows.

Trang 24

TT. Visual Basic

Chng 2 LP TRNH S KIN NNG CAO


& HA TRONG VISUAL BASIC
Mc tiu:
Chng ny gm cc bi tp nhm mc ch rn luyn sinh vin cc k
nng lp trnh s kin nng cao nh cc thao tc x l chut, bn phm
cng nh gip cho sinh vin c ci nhn s lc v cch thc x l ha
trong Visual Basic.
Hc xong chng ny, sinh vin phi nm bt c cc vn sau:
- Cch thc s dng menu trong thit k giao din.
- Cch x l cc s kin chut v bn phm.
- Cc phng thc ha c bn.
Kin thc c lin quan:
Gio trnh Visual Basic, Chng 6.
Ti liu tham kho:
Visual Basic 6 Certification Exam Guide - Chapter 3, Page 69 - Dan
Mezick & Scot Hillier - McGraw-Hill - 1998.
http://www.vovisoft.com/VisualBasic/VB6Chapter12C.htm

Trang 25

TT. Visual Basic

I. HNG DN
Bi tp 2-1
XY DNG MENU V HP THOI C BN
Bc 1: To d n mi tn Bt2-1 trong th mc Basic\Bt2-1. Ch thng xuyn lu
d n li.
Bc 2: Bt u vi Menu Editor. Nhp chut phi ln Form1. Chn Menu Editor.
Lc ny ca s Menu Editor s hin ra.

Hnh II.1: To menu


Bc 3: To menu File bng cch thit lp cc thuc tnh sau:
Trang 26

TT. Visual Basic


Caption: &File
Name: mnuFile
Bc 4: nh ngha cc phn t ca menu File, cc phn t ny s xut hin khi ta
nhp vo File. Ta nhp nt Next, vt sng s di chuyn xung 1 hng, ta s in cc
thng tin vo.
Bc 5: Cc phn t ca menu File phi c t trong cng mt cp: Bng cch
nhp chn mi tn phi, ta xc nh cc phn t ny thuc menu File.
Bc 6: nh ngha cc thuc tnh sau cho phn t ca menu sau:
Caption: &New Project
Name: mnuFileNew
Bc 7: Chn nt OK ca Menu Editor, sau thc thi d n. Khi nhp chut vo
menu File ta s thy x xung phn t New Project ca Menu File. By gi tr li mn
hnh son tho.
Bc 8: Tr li ca s Menu Editor v thm cc phn t tip theo; nh kim tra th t
ca cp m phn t cn thm vo (phi nm trong menu File). Mi ln thm mt phn
t ca menu (sau khi in Caption v Name), cn chn nt Next nh ngha mt
phn t mi. Cn lu cc phn t ca menu File phi cng mt cp.
Bc 9: nh ngha cc phn t sau:
Caption: &Open Project
Name: mnuFileOpen
Caption: A&dd Project
Name: mnuFileAdd
Caption: Sa&ve Project
Name: mnuFileSave
Caption: Sav&e Project As
Name: mnuFileSaveAs
Bc 10: Phn t k tip ca menu s l ng phn cch, ng phn cch ny cng
phi c mt tn, ta khng th nhp chut trn n thc thi cng vic. ng phn
cch c Caption l du -. By gi ta thm ng phn cch v sau thm mc Exit
l hon tt.
Bc 11: Nhp nt Next, thm ng phn cch:
Caption: Name: mnuSeparator1
Bc 12: Nhp Next, thm mc Exit
Caption: E&xit
Name: mnuFileExit
Bc 13: Cu trc ca h thng menu ca ta nh sau:
&File
&New Project
&Open Project
A&dd Project
Sa&ve Project
Sav&e Project As
E&xit
T y ta c th chn phn t bt k vo menu ( cc bc trn ta ch chn
sau).
Bc 14: Mun chn thm mt phn t, nhp vo phn t di v tr m phn t mi
mun t ti . Chng hn, mun chn mt phn t trc mc Save Project, nhp vo
Save Project sau chn nt Insert. Mt phn t trng mi s xut hin v ta in
thng tin vo.
Bc 15: nh ngha mc mi:
Caption: &Remove Project
Name: mnuFileRemove
Trang 27

TT. Visual Basic


Nu mc Name l khong trng th ta s nhn c mt thng bo li: Menu
Control must have a name. Ta phi nhp Name vo.
Bc 16: Gn phm tt. Phm tt cho php ta s dng bn phm truy xut n cc
mc ca Menu. Chng hn mun cho mc Open Project c phm tt l Ctrl + O, ta
chn mc Open Project trong hp thoi Menu Editor.
Bc 17: Nhp OK. Lu d n v thc thi chng trnh. Nhp chn mc bt k trong
menu, ta thy khng tc dng. Do ta phi cung cp hm x l s kin khi nhp vo
cc mc ca menu.
Bc 18: ng ca s Menu Editor, nhp File\Exit; ca s Code xut hin. Thm
on m sau cho s kin Click ca mnuFileExit:
MsgBox Dong ung dung
End
Bc 19: Chy ng dng, chn File\Exit. iu g xy ra?
Bc 20: Tr v ca s son tho; nhp chut vo File\Open Project m ca s
son tho m lnh cho hm x l s kin mnuFileOpen_Click. Thm on m sau:
MsgBox Ban da nhap vao muc File\Open Project
Bc 21: Chy ng dng. Nhp vo File, ri Open Project; mt thng bo hin ra.
ng thng bo li
Bc 22: Ta c th dng phm tt chn Open Project; gi phm Alt, bm phm f ri
o.
Bc 23: Mt cch khc chn File\Open Project l bm phm Ctrl + O. Nh vy, ta
thy c 3 cch chn File\Open Project.
Bc 24: Trong nhiu ng dng c s dng menu, sau khi chn 1 mc trn menu, ta
thy xut hin mt hp hi thoi gm cc nt OK v Cancel, trn c nhiu ty chn
hay yu cu m ngi s dng c th chp nhn hay hy b. y cng vy, ta s m
mt hp thoi tng t nh trn.
Bc 25: Nhp chut vo Project\Components. Mt danh sch cc iu khin m ta
c th thm vo d n ca mnh. Chn Microsoft Common Dialog 6.0 bng cch
nh du vo checkbox v chn OK. Lc ny VB s t ng thm iu khin mi ny
vo ToolBox.
Bc 26: iu khin Common Dialog s xut hin trn ToolBox, nhp p trn n v
t n vo v tr bt k trn Form1.
Bc 27: Nhp chut vo mc File\Open Project, ca s son tho m lnh hin ra,
thm vo on m sau trong hm x l s kin mnuFileOpen_Click:
Form1.CommonDialog1.ShowOpen
MsgBox Bn da chon tap tin: & Form1.CommonDialog1.FileName
Bc 28: Trong lnh MsgBox trn ta c s dng php ton ni 2 chui li vi nhau:
chui Ban da chon tap tin: v chui Form1.CommonDialog1.FileName. Lu , ta
phi s dng php ton & ni chui li.
Bc 29: m hp hi thoi (Common Dialog) ta phi c mt li gi hm:
ShowOpen chng hn. Lc ny hp thoi mi hin ra.
Bc 30: Lu d n v chy chng trnh. Chn File\Open Project, hp thoi hin ra.
Chn tp tin no , iu g xy ra tip theo?
Bc 31: Tm hiu cc lnh ShowOpen, ShowSave, ShowPrinter, ShowColor. Ta c
th gi chng bng cch thm hm x l s kin cho mt mc ca menu, chng hn
cho mnuFileSave_Click:
Form1.CommonDialog1.ShowSave
Trang 28

TT. Visual Basic

Bi tp 2-2
HA VI BASIC
Bc 1: To mt d n mi trong th mc Basic\Bt2-2.
Bc 2: Trong Form1 ta to Menu c dng:

Hnh II.2: Menu v giao din

Trang 29

TT. Visual Basic

Vi cc thuc tnh nh sau:


TT
1
2
3
4
5
6
7
8

Caption
Ve hinh
&Pixel
&Tam giac
&Den
D&o
&Hinh vuong
Hinh khac

Name
MnuVe
MnuPixel
MnuTg
MnuTgDen
mnuTgDo
MnuGach1
mnuHV
MnuKhac

TT
9
10
11
12
13
14
15
16

Caption
Duong Tron
&Cung tron
&Bau duc
Bieu &do
&Xoa man hinh
&Thoat

Name
MnuTron
MnuCung
MnuBauduc
MnuBieudo
MnuGach2
MnuXoa
MnuGach3
MnuThoat

HM PAINTPICTURE
Bc 3: Hm PaintPicture cho php ta copy rt nhanh mt khi d liu ha, ni
nm na l mt khu vc trong mt hnh ha trn form, PictureBox n mt ni khc.
Th d ta copy mt hnh t ch ny n ch khc trong form, hay t form/PictureBox
ra i tng Printer sau ta in n ra.
Ta nhp p ln PictureBox Icon trong ToolBox t mt PictureBox ln
form vi cc thuc tnh sau:
Name: picDohoa.
Visible: False ( ta khng thy n lc chy chng trnh).
Bc 4: By gi ta load mt hnh vo thuc tnh Picture ca picDohoa bng cch chn
mt tp tin hnh nh t ca s Properties. y ta chn INTL_NO.BMP t folder
\Program Files\Microsoft Visual Studio\Common\Graphics\Bitmaps\Assorted

Trang 30

Hnh II.3: La chn


tp tin nh

TT. Visual Basic


Trong chng trnh ny ta mun h khi nt tri ca Mouse xung v di
chuyn chut th khi con tr chut i n u, hnh INTL_NO c v n .
Bc 5: Ta s dng mt bin nh du nt-tri-ca-Mouse-Down, t tn l
IsMousedown. Khi nhn c s kin MouseDown ta t IsMouseDown thnh True,
v khi nhn c s kin MouseUp ta t li IsMouseDown thnh False. Mi ln
nhn c s kin MouseMove th nu IsMouseDown l True ta s v hnh
INTL_NO.
Trong phn [General]\[Declaration], khai bo bin sau:
Dim IsMouseDown As Boolean
Bc 6: u tin bin ny phi c khi to l False trong s kin Form_Load:
Private Sub Form_Load()
IsMouseDown = False
End Sub
Bc 7: Ta x l cc s kin MouseUp, MouseDown, MouseMove ca Form nh sau:
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y
As Single)
IsMouseDown = True
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y
As Single)
If IsMouseDown Then
' V hnh ti v tr X, Y
PaintPicture picDohoa.Picture, X, Y, picDohoa.Width, picDohoa.Height
End If
End Sub
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As
Single)
IsMouseDown = False
End Sub
Bc 8: Chn Form1 trong ca s Project Explorer, ta s x l s kin khi ta nhp
chn mc Xoa man hinh trn menu nh sau:
Private Sub mnuXoa_Click()
Cls
End Sub
Bc 9: Khi ta nhp chn mc Thoat trn menu, chng trnh t ng ng li s
kin mnuThoat_Click c x l:
Private Sub mnuThoat_Click()
End
End Sub
Bc 10: Lu d n li, chy chng trnh, th ko chut trn Form. Quan st kt
qu.
Trang 31

TT. Visual Basic


HM PSET
Bc 11: Ta dng hm PSet (Point Set) v mt pixel ln form. Ta cn cho bit
PSet u v vi mu g, tc l ta cho n ta X,Y ca pixel v mt mu c tnh
t hm RGB.
Di y l on m v pixels mu ln form mt cch bt chng
(randomly) v v tr v mu sc khi ngi dng chn mc Pixel trn menu:
Private Sub mnuPixel_Click()
Dim i As Integer
' Ta v (X, Y)
Dim iXCoord As Integer
Dim iYCoord As Integer
' Mu c bn
Dim iRed As Integer
Dim iGreen As Integer
Dim iBlue As Integer
' Sinh cc s ngu nhin
Randomize
' V 2000 im ngu nhin
For i = 1 To 2000
' Ly ta X (ngu nhin)
' Note that Rnd(1) returns a real number between 0 and 1, eg: 0.384
iXCoord = Int(Rnd(1) * ScaleWidth)
' Ly ta Y (ngu nhin)
iYCoord = Int(Rnd(1) * ScaleHeight)
' Ly gi tr ngu nhin t 0 254 cho mi mu c bn
iRed = Int(Rnd(1) * 255)
iGreen = Int(Rnd(1) * 255)
iBlue = Int(Rnd(1) * 255)
' V 1 pixel ti ta iXCoord, iYCoord
PSet (iXCoord, iYCoord), RGB(iRed, iGreen, iBlue)
Next
MsgBox ("Ve xong!")
End Sub
Trong th d trn ta dng hm Randomize sinh sn trong b nh cc s thc
bt chng t 0 n 0.999. Sau mi ln ta gi hm Rnd(1) l n s tr v mt s
thc bt k t b s do hm Randomize sinh ra. Do , Rnd(1) * ScaleWidth s cho
ta mt s thc c tr s t 0 n ScaleWidth. Mun i s thc ra s nguyn, ta
dng hm Int.
Bc 12: Lu d n li, chy chng trnh. Nhp chn Pixel trn menu.
HM LINE
Hm Line v mt ng thng t mt ta ny n mt ta khc trong
mu do ta ch nh. Vi hai hm PSet v Line ta c th lm c rt nhiu chuyn. Th
Trang 32

TT. Visual Basic


d mun cho mt vt di ng, ta xa vt y bng cch v li n vi cng mu ca
BackColor ca form, ri v vt y v tr mi. Mun v mt a gic nh tam gic hay
ch nht ta rp nhiu ng thng li vi nhau, u ca mi ng thng l cui ca
ng thng va mi c v trc. Mun v hnh dng bn trong mt hnh ch nht
ta dng PSet
C ba cch ch nh ta ca hai u ca mt ng thng ta mun v:
9 Cho bit ta ca u v cui ng thng: V d: Line (50, 100)-(3000,
4000). Khi ng ny c v xong th v tr ca con tr ha (Graphic Cursor) c
ta l v tr ca cui ng, tc l CurrentX=3000 v CurrentY=4000 trong trng
hp ny.
9 Ch cho bit ta cui ng thng: V d: Line -(3600, 4500),
vbMagenta. Trong trng hp ny v tr ca Graphic Cursor (CurrentX, CurrentY)
c ly lm ta ca u ng thng khi v. Tc l nu trc khi thc thi dng
m ny CurrentX=3000 v CurrentY=4000 th dng m trn tng ng vi:
Line (3000,4000)-(3600,4500), vbMagenta
9 Dng ch Step ni s khc bit t CurrentX v CurrentY: V d: Line
Step(400, 600)-Step(800, -500), vbGreen. Nu trc khi thc thi dng m ny
CurrentX=3600 v CurrentY=4500 th dng m trn tng ng vi:
Line (4000,5100)-(4800,4600), vbGreen
Bc 13: Ta s v cng mt hnh tam gic nhng vi 2 mu khc nhau: v en. Ta
s x l s kin khi chn mc Den trn menu nh sau:
Private Sub mnuTgDen_Click()
' V tam gic vi mu en
Line (700, 500)-(2800, 2400)
Line (2800, 2400)-(1800, 900)
Line (1800, 900)-(700, 500)
End Sub
Bc 14: V tam gic vi mu cng ta trn. S kin mnuTgDo_Click:
Private Sub mnuTgDo_Click()
' V tam gic mu
Line (700, 500)-(2800, 2400), vbRed
Line -(1800, 900), vbRed
Line -(700, 500), vbRed
End Sub
Bc 15: Ta c th v mt hnh ch nht vi 4 gc trn nh sau:
Chn Tools\Add Procedure thm mt th tc vo:
Name: HcnTron
Type: Sub
Scope: Private
Private Sub HcnTron(ByVal X1 As Integer, ByVal Y1 As Integer, _
ByVal X2 As Integer, ByVal Y2 As Integer)
Const Delta = 50
' V hcn vi 4 gc trn
Line (X1 + Delta, Y1)-(X2 - Delta, Y1)
Trang 33

TT. Visual Basic


Line -Step(Delta, Delta)
Line -(X2, Y2 - Delta)
Line -Step(-Delta, Delta)
Line -(X1 + Delta, Y2)
Line -Step(-Delta, -Delta)
Line -(X1, Y1 + Delta)
Line -Step(Delta, -Delta)
End Sub
Bc 16: Ta cng c th to bng bn trong hnh ch nht bng cch dng hm PSet
chm cc m cch nhau chng 50 pixels nh sau:
Private Sub TaoBong(ByVal X1 As Integer, ByVal Y1 As Integer, _
ByVal X2 As Integer, ByVal Y2 As Integer)
Const Delta = 50
Dim i As Integer
Dim j As Integer
' Kiem tra X1 < X2 ?
' i gi tr X1, X2 nu X1 > X2
If X2 < X1 Then
Temp = X1
X1 = X2
X2 = Temp
End If
' Kim tra Y1 < Y2
' i gi tr Y1, Y2 nu Y1 > Y2
If Y2 < Y1 Then
Temp = Y1
Y1 = Y2
Y2 = Temp
End If
' V cc chm trong hcn, mi chm cch nhau 50 pixel
For i = X1 + Delta To X2 - Delta Step 50
For j = Y1 + Delta To Y2 - Delta Step 50
PSet (i, j)
Next
Next
End Sub
Bc 17: By gi phi hp cch v hnh ch nht vi th tc TaoBong ni trn v
hm Print ta c th vit ch bn trong mt khung mu nht khi ta x l s kin
mnuHcn_Click:
Private Sub mnuHV_Click()
Dim X1 As Integer
Dim Y1 As Integer
Dim X2 As Integer
Dim Y2 As Integer
Trang 34

TT. Visual Basic


' Khi to ta u
X1 = 4200: Y1 = 1000
X2 = 6200: Y2 = 2000
' V hcn
HcnTron X1, Y1, X2, Y2
' To bng
TaoBong X1, Y1, X2, Y2
' V tr xut ch ln mn hnh
CurrentX = X1 + 50
CurrentY = Y1 + 50
' Kch thc ch
Font.Size = 18
' Hin th ra mn hnh
Print "Xin chao!"
End Sub
HM CIRCLE
Bc 18: Dng hm Circle v hnh trn, hnh bu dc v cung trn, vi bn trong
khng mu hay c ph bng mt mu ta ch nh. v, ta phi cho bit ta ca
tm ca ng trn v bn knh ca n.
Ta x l cho s kin mnuTron_Click nh sau:
Private Sub mnuTron_Click()
' V ng trn tm 2000,1500 bn knh 800
Circle (2000, 1500), 800
' V ng thng ngang t tm
Line (2000, 1500)-Step(0, 800)
' V ng thng ng t tm
Line (2000, 1500)-Step(800, 0)
End Sub
Bc 19: By gi, thay v v nguyn mt ng trn, ta s ch v mt cung trn vi
mu . ch nh rng ta s v t v tr no trn ng trn n v tr no khc, th
d t 45 n 230 , ta cn phi i ra n v Radian bng cch dng hm Rads
nh sau:
Chn Tools\Add Procedure thm mt hm tn Rads vi cc gi tr sau:
Name: Rads
Type: Function
Scope: Private
Private Function Rads(ByVal Degree As Single) As Single
' i sang Radian
Const PI = 22 / 7
Rads = Degree / 180 * PI
End Function

Trang 35

TT. Visual Basic


Bc 20: Cung trn lun lun c v ngc chiu kim ng h. Di y l on
m ca s kin mnuCung_Click v mt cung trn mu bn knh 800, tm (4000,
2000), t 45 n 230 :
Private Sub mnuCung_Click()
Circle (4000, 2000), 800, vbRed, Rads(45), Rads(230)
End Sub
Bc 21: Ta c th cho t mu bn trong cc hnh trn, hay Pie Slice (mt phn ca
hnh trn) bng cch t thuc tnh FillStyle bng 0 v ch nh mu FillColor. Mt
Pie Slice l mt vng cung ng knh bi hai ng thng bn knh hai u. Mun
v mt Pie Slice ta nh thm du tr ("-") trc hai tr s Radian, tc l dng Rads(45), -Rads(230) thay v Rads(45), Rads(230).
Di y l m lnh v hai Pie Slices, c tm lch nhau mt cht, ng thi
thm ch thch 87.5% v 12.5%. Hnh v ny tng t nh cc biu dn s, din
tch S kin mnuBieudo_Click:
Private Sub mnuBieudo_Click()
FillStyle = 0 ' Cho php t mu
FillColor = vbYellow
' V mt Pie Slice t 90 n 45 mu vng
Circle (3000, 4000), 800, , -Rads(90), -Rads(45)
' V tr hin th vn bn
CurrentX = 2800: CurrentY = 4400
Print "87.5%"
FillColor = vbBlue
' V mt Pie Slice t 45 n 90 mu xanh
Circle (3050, 3900), 800, , -Rads(45), -Rads(90)
' V tr hin th vn bn
CurrentX = 3400: CurrentY = 3000
Print "12.5%"
FillStyle = 1 ' Khng cho php t mu
End Sub
Bc 22: Hm Circle cn c dng v cc hnh bu dc (Elip). V hnh bu dc
ging nh v mt hnh trn nhng ta cn cho thm mt tham s gi l Aspect. Aspect
l s lin h gia bn knh ngang (chiu ngang) v bn knh dc (chiu cao). Th d
nu Aspect=2 th chiu cao ca hnh bu dc gp i chiu ngang, ngc li, nu
Aspect=0.5 th chiu ngang s gp i chiu cao.
Di y l on m ta dng v hai hnh bu dc cng kch thc, mt nm
thng ng v mt nm ngang S kin mnuBauduc_Click c x l:
Private Sub mnuBauduc_Click()
Circle (1400, 3000), 800, vbMagenta, , , 2
Circle (1400, 3000), 800, vbBlue, , , 0.5
End Sub
Bc 23: Lu d n v chy chng trnh.
Trang 36

TT. Visual Basic

II. BI TP T LM
Bi 1: Thit k chng trnh c giao din nh sau:

Hnh II.4: S dng


Common Dialog

o Mi khi ngi dng chn mc Font, mt hp thoi chn Font m ra cho php
chn la cc Font, sau khi h chn c Font, Font ch tng ng ca TextBox cng
thay i theo. (Hng dn: S dng thuc tnh Font ca i tng TextBox).
o Khi ngi dng chn Color, hp thoi chn mu hin th cho php ngi dng
thay i mu ch ca TextBox theo mu chn (Hng dn: S dng thuc tnh
ForeColor ca i tng TextBox).
Bi 2: TR CHI PUZZLE (SP S)
M T
Khng gian chi gm 16 s, c xp trn 4 hng, mi hng gm 4 ct. Trong
c 15 c gi tr t 1 n 15 c phn b theo th t ngu nhin v 1 trng
(Hnh II.5)

Hnh II 5

Ngi chi phi tin hnh sp li cc s ny theo th t c kt qu nh


hnh II.6 th tr chi kt thc. Chng trnh hin th cu chc mng: Chuc mung! Ban
da thanh cong!!! & tng thi gian chi.

Trang 37

TT. Visual Basic

Hnh II 6

Ngi chi c th thc hin chi li bng cch chn File\New. Chng trnh s t
ng xo li cc cha s & trng theo th t ngu nhin.
Vic sp xp li cc s c thc hin bng cch s dng trng. Ngi dng
c th chuyn mt s t cc ln cn n trng bng cch nhp chut ln s .
Chng hn trn hnh 1 ngi dng c th nhp cha s 2 chuyn n n trng
bn di & khi cha s 2 c s thnh trng mi.
Ch rng ngi dng ch c th di chuyn cc s thuc nhng ln cn trng.
Chng hn cc ln cn trng trong hnh 1 l nhng 2, 4, 11, 15.
Hnh II.7 l mt v d khc v cc ln cn trng. Trong trng hp ny l cc
cha s 9, 2 & 12. rng hai cha s 3 & 1 khng c xem l ln cn.

Hnh II.7

CC THUT TON X L
Xc nh mt c phi l ln cn ca trng hin hnh hay khng?
nh s th t cc t 0 n 15 theo th t t phi qua tri & t trn xung
di.
Xc nh cc ln cn cho tng .
rng cc c th t 0 (hng 1 ct 1), 3 (hng 1 ct 4), 12 (hng 4
ct 1) & 15 (hng 4 ct 4) c s ln cn l 2.
8 c th t 1 (hng 1 ct 2), 2 (hng 1 ct 3), 4 (hng 2 ct 1), 7 (hng
2 ct 4), 8 (hng 3 ct 1), 11 (hng 3 ct 4), 13 (hng 4 ct 1), 14 (hng 4
ct 3) c s ln cn l 3.
4 cn li c th t 5, 6, 9, 10 c s ln cn l 4.
Trang 38

TT. Visual Basic


V d: Trong hnh 3:
c th t 6 (cha s 2), c s ln cn l 4, l cc c th t 2
(cha s 3), 5 (khng cha s), 7 (cha s 15), 10 (cha s 1).
c th t 16 (cha s 7), c s ln cn l 2, l cc c th t 12
(cha s 14), 15 (cha s 13).
Ta c nhn xt rng, c tt c 16 mi c ti a 4 ln cn. Nh vy
ta c th s dng mt mng 2 chiu lu tr gi tr cc ln cn.
Dim Neibors(0 To 15, 0 To 3) As Integer
V d: c th t 0:
Neibors(0,1) = 1 Ln cn th 1 ca 0 l th 1
Neibors(0,2) = 4 Ln cn th 2 ca 0 l th 4
Neibors(0,3) = -1 Khng c ln cn 3
Neibors(0,4) = -1 Khng c ln cn 4
Nu mt trong cc ln cn ca c Click c gi tr trng ( trng) th
hon i ni dung c Click vi trng, ngc li khng lm g c.
Thut ton xo s
o Xem khng gian chi c 16 u trng.
o Chn ngu nhin 1 trong 16 s (t 0 n 15) t vo trng u tin.
o Sau tip tc chn cc s cn li (15 s cha c chn) t vo th
2.
o V c tip tc cho n cui cng, sao cho m bo nguyn tc cc s
c chn s khng c chn li. iu ny trnh c tnh trng c 2 hay
nhiu c cng gi tr s.
o Xa trng ni dung cha s 0 to trng.
S dng th tc Randomize & hm Rnd, th ngh xem cch thc kim
tra xem mt s c s dng ri hay cha? Vit mt chng trnh con xo
s ring.
Di chuyn s n trng
Thc cht l hon v ni dung c Click & trng.
o Gn ni dung c Click cho trng.
o Xa trng ni dung c Click.
Kim tra tr chi kt thc
Tr chi khi t n trng thi hnh 2 l kt thc. Vit hm kim tra.
m thi gian chng trnh thc thi
S dng b nh thi gian m thi gian thc thi ca chng trnh.

Trang 39

TT. Visual Basic

Chng 3 TP TIN
Mc tiu:
Chng ny nhm mc ch rn luyn sinh vin cc k nng thao tc
vi h thng tp tin ca Windows trong VB. Bn cnh , vic h thng li cc
kin thc ca cc chng trc cng l mt mc tiu quan trng ca chng.
Hc xong chng ny, sinh vin phi nm c cc vn sau:
- S dng m hnh h thng tp tin.
- Cch thc truy cp tp tin tun t.
- Cch thc truy cp tp tin truy xut ngu nhin.
Kin thc c lin quan:
Gio trnh Visual Basic, Chng 7.
Ti liu tham kho:
- Visual Basic 6 Certification Exam Guide - Chapter 7, Page 191;
Chapter 13, Page 377 - Dan Mezick & Scot Hillier - McGraw-Hill - 1998.

Trang 40

TT. Visual Basic

I. BI TP HNG DN
Bi tp 3-1:
XUT NHP TP TIN VN BN
Bc 1: To Project mi tn Bt3-1 trong th mc Basic\Bt3-1. To giao din c dng
sau:

Hnh III.1: Tp tin vn bn


Item 1 TextBox
Name
Text1
Height
2220
Width
6630
Multiline
True
ScrollBars Both
Item 2 CommandButton
Name
Command1
Caption
New
Item 3 CommandButton
Name
Command2
Caption
Open
Item 4 CommandButton
Name
Command3
Caption
Save
Item 5 CommandButton
Name
Command4
Caption
Print
Item 6 CommandButton
Name
Command5
Caption
Copy
Bc 2: Nt New c nhim v xa vn bn trong TextBox ta c th khi to mt
ti liu mi. Do , trong hm s kin Command1_Click, thm vo on m:
Text1.Text =
Trang 41

TT. Visual Basic


GHI CHUI LN TP TIN
Bc 3: y ta nhp vo on vn bn ri ghi ln tp tin. n gin ta c v ghi
t mt tp tin vn bn duy nht tn l vidu.txt nm trong th mc ca d n ca mnh
( y l th mc Bt5-1). ghi ln tp tin, trong hm s kin Command3_Click,
thm on m sau:
' Ghi len tap tin
Open App.Path & "\vidu.txt" For Output As #1
' Ghi du lieu
Print #1, Text1.Text
' Dong tap tin
Close #1
MsgBox "Van ban da duoc luu"
Bc 4: Vic thao tc trn tp tin c thc hin nh th tp tin. Thc cht y l mt
s nguyn ch bi VB mt lin kt n mt tp tin xc nh xut hay nhp vo tp
tin . y l s dng #1. Cu lnh Print s dng th tp tin ghi vn bn ln tp
tin. Khi vic ghi hon tt, th tp tin c ng li nh cu lnh Close.
Bc 5: Chy ng dng, nhp nt Command3. Nu chng trnh thc thi tt, ta c th
m tp tin vidu.txt trong Notepad xem.
C T TP TIN VN BN
Bc 6: c tp tin t a tng t nh ghi tp tin. Chn on m sau trong hm x l
s kin Command2_Click
Text1.Text = ""
Close #1
' Mo tap tin
Open App.Path & "\vidu.txt" For Input As #1
Dim filetext As String ' Bien chuoi luu van ban
Do While Not EOF(1)
Input #1, filetext ' Doc tung dong
' Hien thi trong TextBox, chu y them vao ky tu xuong dong
Text1.Text = Text1.Text & filetext & vbCrLf
Loop
Close #1
Bc 7: Chy ng dng. Nhp nt Command2 c t tp tin vidu.txt vo TextBox.
y ta c nh ngha mt bin trong lnh
Dim filetext as String
y, mi ln ta c tng dng trong tp tin vidu.txt; mi ln c nh
vy ta lu vo bin kiu chui filetext; sau ta ni chui filetext vo sau chui
Text1.Text (hin th trong TextBox). Qu trnh trn c thc hin lin tc n khi
c ht ni dung tp tin nh vo vng lp:
Do While Not EOF(1)
EOF l mt hm c nh ngha sn trong VB, hm ny c nhim v
kim tra xem c t n cui tp tin hay khng? Nu ni dung tp tin vn cha c
c ht, qu trnh c vn tip tc n khi EOF l True.
Trang 42

TT. Visual Basic


Input #1
c mt chui t tp tin cho n khi gp k t xung dng. K t xung
dng ny c b qua trong lnh Input; do nu mun hin th thnh nhiu dng trn
TextBox, ta phi thm vo k t xung dng cho mi dng ta c c t tp tin sau
ta mi hin th trn TextBox. Hng s vbCrLf l s lin kt 2 k t xung dng v
v u dng.
IN VN BN RA MY IN
Bc 8: Nu my in c ni vo, my in phi c kch hot. Ta c th kim tra
chng bng cch in th vi dng vn bn trong Word hay trong Notepad.
Bc 9: i tng Printer s ch n my in mc nh. Trong hm x l s kin
Command4_Click chn thm on m:
Printer.Print Text1.Text
Cu lnh ny dng in ni dung trong TextBox ra my in. Tuy nhin ni dung
ca TextBox ch c in khi chng trnh chm dt. in ngay lp tc, ta cn phi
thm dng sau:
Printer.EndDoc
CHP D LIU VO CLIPBOARD
Bc 10: Trong nhiu ng dng, nhiu khi ta cn s dng d liu qua li vi nhau.
Chng hn, ngi dng c th s dng d liu c hin th trn form hin th ca
chng trnh chng ta sang chng trnh x l vn bn Microsoft Word. Lc ny, mt
cch hiu qu nht l s dng i tng Clipboard, i tng ny cho php c v ghi
ln Windows Clipboard t chng trnh ng dng:
Thm on m sau vo hm s kin Command5_Click:
Clipboard.Clear
Clipboard.SetText Text1.Text
ng ca s m lnh li v chy chng trnh ng dng. Nhp mt on vn
bn, sau nhp Command5. T Microsoft Word, s dng menu Edit\Paste ly d
liu t Clipboard hin th.

Bi tp 3-2
THAO TC VI RESOURCE FILE
Mc tiu: Gip lm quen vi tp tin resource ca VB, nht l cng c cc thao
tc trn tp tin.
Bc 1: To th mc Basic\Bt3-2. To mt d n mi trong th mc ny.
Bc 2: To giao din nh hnh sau:

Trang 43

TT. Visual Basic

1
2

7
8

10

Trong :
Item 1: Caption: Thong tin nguoi su dung
BorderStyle: 3-Fixed Dialog
StartUpPosition: 2-Center Screen
Item 2: Label
Name: lblHelp
Index: 0
Item 3: Label
Name: lblHelp
Index: 1
Item 4: Label
Name: lblHelp
Index: 2
Item 5: TextBox
Name: txtHelp
Index: 0
Item 6: TextBox
Name: txtHelp
Index: 1
Item 7: TextBox
Name: txtHelp
Index: 2
Item 8: CommandButton
Name: cmdHelp
Index: 0
Item 9: CommandButton
Name: cmdHelp
Index: 1
Item 10: CommandButton
Name: cmdHelp
Index: 2
Trang 44

Hnh III.2: Tp tin


resource

TT. Visual Basic


Bc 3: Ta nhn thy cc iu khin c cng mt tn hin th (Thong tin). Mc tiu
ca ta l s dng tp tin resource (ti nguyn) thay i tn hin th trn cc iu
khin. to tp tin ti nguyn, ta vo mc ADD-IN\ADD-IN MANAGER trn
menu ca VB. Trong cc mc ca ADD-IN MANAGER nhp p vo resource editor
v ng mc ADD-IN MANAGER li.
Bc 4: Chn Tools\Resource Editor trn menu. M String Table Editor bng cch
nhp chut ln biu tng abc ca Resource Editor. Ca s son tho cho tp tin ti
nguyn s m ra. Ta nhp cc hng nh sau:
ID
RESOURCE
ID
RESOURCE
STRING
STRING
1
Ten
7
So dt
2
Ho
8
So CMND
3
Ma nv
9
T. trang hn
4
Huy bo
10
Huy bo
5
Vo hieu hoa
11
Ve truoc
6
Ke
12
Hoan tat
Bc 5: Lu tp tin ti nguyn li.
Bc 6: M ca s son tho m lnh. To kiu do ngi dng nh ngha lu d
liu cn nhp vo. Thm on m sau:
Private Type yeucau
ho As String
ten As String
manv As String
sodt As String
socmnd As String
tinhtranghn As String
End Type
Bc 7: Ta thm 2 bin na; mt bin lu thng tin v ngi s dng (theo kiu
trn), mt bin lu th t cc bc m ngi s dng nhp thng tin ca mnh vo.
Private chisobuoc As Integer
Private cacyeucau As yeucau
Bc 8: Trong chng trnh ny, ngi s dng phi nhp thng tin ca mnh vo
thng qua cc bc nhp, trong cc iu khin c s dng nh mt mng cc
iu khin. tn dng chng ta cn khai bo cc hng s bit hin thi ngi
dng ang bc th my ca qu trnh nhp thng tin cng nh bit c mnh
nhp vo nt nhn no trong qu trnh trn. Do , ta thm on khai bo sau:
' cac hang so
Private Enum buoc
buoc1 = 1
buoc2 = 2
buoc3 = 3
End Enum
Private Enum nhannut
nuttrai
nutgiua
nutphai
Trang 45

TT. Visual Basic


End Enum
Bc 9: Chng trnh ny th hin trn mt form duy nht v s dng mng cc iu
khin to cc bc ngi dng nhp thng tin vo. Do ta s dng tp tin ti
nguyn hin th cc tn ca iu khin nhm hin th cho chnh xc. V th ta cn c
mt hm (th tc) cp nht thng tin nhp vo da vo cc bc ca ngi dung
khi nhp thng tin vo. Vo Tools\Add Procedure thm th tc sau:
Public Sub Hienthi()
Dim i As Integer
' Kiem tra cac buoc
Debug.Assert chisobuoc = 1 Or chisobuoc = 2
For i = 0 To 2
Nhan
lblHelp(i).Caption = LoadResString((chisobuoc - 1) * 6 + (i + 1))
' Nut
cmdHelp(i).Caption = LoadResString((chisobuoc - 1) * 6 + (i + 4))
If UCase(cmdHelp(i).Caption) = "VO HIEU HOA" Then
cmdHelp(i).Visible = False
Else
cmdHelp(i).Visible = True
End If
txtHelp(i).Text = ""
Next
End Sub
Bc 10: Khi chng trnh thc hin, ta phi bc th nht ca qu trnh nhp liu
Thm on m sau trong th tc x l s kin Form_Load:
chisobuoc = 1
Hienthi
Bc 11: Mi khi c mt nt nhn c nhp, qu trnh nhp liu chuyn sang bc
k tip; ngi s dng c th i n bc k tip hay tr v bc trc trong qu
trnh ny. V cc nt nhn (button) l mt mng iu khin (control array) nn chng
c cng mt s kin Click tc ng vo gi l cmdHelp_Click. Hm x l ny c tham
s l mt ch s kiu Integer nhn bit nt nhn no c nhp. y, ta thm
on m sau trong hm x l s kin ny.
Private Sub cmdHelp_Click(Index As Integer)
Select Case chisobuoc
Case buoc1
cacyeucau.ten = txtHelp(0).Text
cacyeucau.ho = txtHelp(1).Text
cacyeucau.manv = txtHelp(2).Text
Case buoc2
cacyeucau.sodt = txtHelp(0).Text
cacyeucau.socmnd = txtHelp(1).Text
cacyeucau.tinhtranghn = txtHelp(2).Text
End Select
Trang 46

TT. Visual Basic


' Cac nut nhan
Select Case Index
Case nuttrai
' Huy bo
End
Case nutgiua
' ve truoc
chisobuoc = buoc1
Hienthi
Case nutphai
' di toi
chisobuoc = chisobuoc + 1
If chisobuoc = buoc2 Then
Hienthi
Else
Guiyeucau
End If
End Select
End Sub
Bc 12: Khi qu trnh nhp thng tin kt thc, thng tin ny c lu vo trong mt
tp tin vn bn, nh th tc Guiyeucau. Thm th tc Guiyeucau vo nh mc
Tools\Add Procedure v nhp on m sau:
Public Sub Guiyeucau()
On Error GoTo Guiloi
' Lay the tap tin
Dim intFile As Integer
intFile = FreeFile()
' Viet len tap tin
Open App.Path & "\yeucau.txt" For Output As #intFile
Print #1, "ho: " & cacyeucau.ho
Print #1, "ten: " & cacyeucau.ten
Print #1, "manv: " & cacyeucau.manv
Print #1, "sodt: " & cacyeucau.sodt
Print #1, "socmnd: " & cacyeucau.socmnd
Print #1, "tinhtranghn: " & cacyeucau.tinhtranghn
Close #intFile
MsgBox "Yeu cau cua ban da duoc goi di", vbOKOnly + vbInformation,
_
"Goi yeu cau"
End
Exit Sub
Guiloi:
MsgBox Err.Description, vbOKOnly + vbExclamation, "Goi yeu cau"
Trang 47

TT. Visual Basic


Exit Sub
End Sub
Bc 13: Lu v thc thi chng trnh.

Bi tp 3-3
CHNG TRNH X L VN BN N GIN
GIAO DIN A TI LIU
Bc 1: To mt d n lu trong th mc Basic\Bt3-3.
Giao din a ti liu (MDI Form) gm mt ca s cha cha nhiu ca s con
(chng hn nh cc chng trnh Microsoft Word, Excel c t chc theo dng ny).
thm vo d n, ta chn mc Project\Add MDI Form t menu ca VB.
Bc 2: Ta cho Form1 tr thnh mt ca s con ca MDI Form bng cch chn thuc
tnh MDIChild = True.
HM MAIN (SUB MAIN)
Bc 3: Trong chng trnh ta cn iu khin mi th k t khi cc ca s con ca
MDI Form xut hin, do ta cn phi bt u thc thi chng trnh ca ta t hm
Main (Sub Main). Ta chn mc Project\ Add Module thm mt Modul vo d n
ca mnh, sau ta chn Tools\Add Procedure thm hm Main vo (Public Sub
Main); hm ny ta dng bt u gi thc thi chng trnh ca mnh. chn thc
thi chng trnh t hm Main, chn Project\Properties; chn Start up Object l Sub
Main.
Bc 4: Thm dng lnh sau vo hm Main:
MDIForm1.Show
Bc 5: Chng trnh cn c mt h thng menu gi thc thi. Do , chn MDI
Form, sau chn Tools\Menu Editor to menu sau:
Menu Name
Menu Caption
mnuFile
&File
mnuFileNew
&New
mnuFileOpen
&Open
muFileSave
&Save
mnuFileBar
mnuFileExit
E&xit
Bc 6: Ta x l s kin mnuFileExit_Click nh on m sau:
Private Sub mnuFileExit_Click()
Dim f As Form
' Thoat cac cua so con
For Each f In Forms
If TypeOf f Is Form1 Then
Unload f
Set f = Nothing
End If
Trang 48

TT. Visual Basic


Next
' Thoat cua so cha
Unload Me
End Sub
Bc 7: to ra mt ti liu trng cho chng trnh x l vn bn, ta cn phi c
mt TextBox trong Form1. Ngi s dng nh ni dung vo TextBox, do ta thm
mt TextBox vo Form1 vi cc thuc tnh sau:
MultiLine: True
ScrollBars: 2-Vertical
Ta x l s kin Form_Resize ca Form1 nh sau:
Private Sub Form_Resize()
Text1.Height = Me.ScaleHeight
Text1.Width = Me.ScaleWidth
Text1.Left = 0
Text1.Top = 0
End Sub
Bc 8: Mi ln chn mc New trn ca s chng trnh ng dng, mt khung ca s
trng hin ra ta nhp vn bn vo. Do , thm on m sau trong th tc x l s
kin mnuFileNew_Click:
Private Sub mnuFileNew_Click()
Dim f As Form1
Static n As Integer
Set f = New Form1
f.Text1.Text = ""
n=n+1
f.Caption = "Document " & Format(n)
f.Show
End Sub
THAO TC TRN TP TIN
Bc 9: Ta cn phi c hp thoi nhm chn tp tin lu (hay m tp tin) trong
chng trnh x l vn bn. Do ta cn thm mt Dialog Control vo chng trnh.
nh du vo mc chn Microsoft Common Dialog Control 6.0 (SP3). Sau ta thm
Dialog Control t ToolBox vo MDIForm1. Ta x l s kin mnuFileSave_Click nh
on m sau:
Private Sub menuFileSave_Click()
Dim tenfile As String
CommonDialog1.ShowSave
tenfile = CommonDialog1.FileName
Open tenfile For Output As #1
Print #1, MDIForm1.ActiveForm.Text1.Text
Close #1
End Sub
Trang 49

TT. Visual Basic


Bc 10: Khi mc Open ca menu c chn, hp thoi Open File c m ra s
kin mnuFileOpen_Click c x l nh sau:
Private Sub mnuFileOpen_Click()
Dim tenfile As String, s As String
CommonDialog1.ShowOpen
tenfile = CommonDialog1.FileName
If UCase(Right(tenfile, 3)) <> "TXT" Then Exit Sub
Call mnuFileNew_Click
Open tenfile For Input As #1
Do Until EOF(1)
Line Input #1, s
Me.ActiveForm.Text1.Text = Me.ActiveForm.Text1.Text & s & vbCrLf
Loop
Close #1
End Sub
Bc 11: Lu d n v chy chng trnh. To mi, lu, m mt s ti liu. Nhn xt
kt qu.

Bi tp 3-4
THAO TC VI I TNG WORD
Mc ch: Windows c sn mt s i tng khi ta ci t Windows hay khi ci mt
s phn mm. Bi tp ny gip ta tm hiu cch thc truy xut cc i tng c sn
ny t Visual Basic.
THAM CHIU I TNG
Bc 1: To th mc Basic\Bt3-4. Khi ng mt d n mi trong th mc ny.
Bc 2: Trong bi tp ny ta c tham chiu n i tng Word ca Microsoft Word;
do ta phi c thao tc tham chiu n i tng ny trong mn hnh son tho VB
bng cch: Chn Project\References trn menu. Trong ca s References, thit lp
tham chiu n: Microsoft Word 9.0 Object Library v Microsoft Office 9.0
Library. Sau ng ca s References li.
Bc 3: Ta c th kim tra cc i tng trn c c a vo hay cha nh thao tc:
Chn View\Object Browser.
XY DNG NG DNG
Bc 4: To giao din chng trnh c dng sau:

Trang 50

TT. Visual Basic


2
1

3
Hnh III.3: Thao tc
vi i tng Word

4
5
6

Trong :
1: TextBox
Name: txtWord
Multiline: True
ScrollBar: 2-Vertical
2: CommandButton
Name: cmdLuu
Caption: Lu
3: CommandButton
Name: cmdTruoc
Caption: Trc khi in
4: CommandButton
Name: cmdCTa
Caption: Kim li.
5: CommandButton
Name: cmdThoat
Caption: Thot
6: CommandButton
Name: cmdGiup
Caption: Tr gip
Bc 5: s dng c m hnh, ta phi khai bo mt s bin i tng ca Word.
Trong phn [General]\ [Declarations], khai bo nhng bin sau:
Public ungdung As Word.Application
Public tailieu As Word.Document
Public trogiup As Office.Assistant
Bc 6: Khi chng trnh thc hin, iu ta mun l mt ti liu mi ca Word c
to ra ta c th thao tc trn chng mt cch gin tip thng qua chng trnh VB
ca mnh. To mt ti liu Word mi tng ng vi vic to ra mt th hin ca i
tng Document. V th, chn on m sau vo th tc Form_Load to ra mt ti
liu Word mi t chng trnh VB.
Set ungdung = CreateObject("Word.Application")
Set tailieu = ungdung.Documents.Add
Set trogiup = ungdung.Assistant
Trang 51

TT. Visual Basic


Bc 7: Nt Lu c nhim v ghi tt c nhng g trn TextBox vo i tng Word
mi to ra. Do , ta x l s kin cmdLuu_Click nh sau:
' Ghi tai lieu moi
tailieu.Content.Text = txtWord.Text
MsgBox "Van ban duoc luu trong Word", vbOKOnly, "Word"
Bc 8: Nt Trc khi in c nhim v hin th ti liu Word ging nh khi chng
c in ra giy; v th s kin cmdTruoc_Click c x l nh sau:
tailieu.PrintPreview
ungdung.Visible = True
ungdung.Activate
Bc 9: Nt Kim li thc hin thao tc kim li chnh t cho ti liu Word, thao tc
ny c x l trong th tc cmdCTa_Click:
tailieu.CheckSpelling
txtWord.Text = tailieu.Content.Text
Bc 10: Nt Thot s ng ca s cha ti liu Word li. Chn on m sau trong
th tc cmdThoat_Click ng Word li:
ungdung.Quit SaveChanges = False
Bc 11: Khi ta nhp vo nt Tr gip th ca s Help ca Office hin ra. Do ,
thm on m sau trong th tc cmdGiup_Click m ca s Help ca Office:
ungdung.Visible = True
ungdung.Activate
trogiup.Help
Bc 12: Lu d n v chy chng trnh. Nhp vi dng vn bn vo TextBox v
nhp nt Lu. Mi khi vn bn c lu, ta nhp nt Trc khi in xem ti liu
trc khi. Khi vn bn c hin th, nhp nt Kim li. Sau th nhp nt Tr gip
xem phn gip ca Office. Cui cng nhp nt Thot thot khi Word.

II. BI TP T LM
1) Thit k chng trnh nh ng dng Notepad ca Windows.
o Thit k giao din

Trang 52

TT. Visual Basic

Hnh III.5: Giao


din Notepad

o X l cc s kin
9 Mi khi Form thay i kch thc, TextBox cng thay i theo cho ph hp
vi Form
9 New
9 Open, Save, Save As: m hp thoi Common Dialog cho php chn tp tin
m hay lu. S dng i tng FileSystemObject thao tc vi tp tin vn bn.
9 Exit
9 Font Setting: M ra hp thoi chn Font, thit lp Font ca TextBox chnh l
Font c chn trong hp thoi.
o X l m rng:
9 Khi ngi dng lu tp tin ri, ln th hai bm vo Save th khng m hp
thoi Common Dialog na m s lu vi tn tp tin chn trong ln Save u tin.
9 Mi khi ngi dng thay i ni dung ca mt tp tin, sau h chn Exit
ng ng dng li; mt hp thng ip (Message Box) s m ra hi c lu tp tin hay
khng?
2) i l Minh Thnh ca cng ty Unilever Vit Nam ti Cn Th cn qun l thng
tin v cc mt hng m i l nhn t cng ty. Cc thng tin cn qun l gm: M mt
hng, tn mt hng, n v tnh, gi ca mt hng . Cc thng tin ny c m t
nh sau:
Trang 53

TT. Visual Basic


Type HangHoa
MaHang As String*5
TenHang As String*40
DVTinh As String*15
Gia As Double
End Type
Da vo thng tin m t trn, Anh (Ch) hy:
a. To d n mi v vit cc khai bo thch hp.
b. Thit k Form chnh nh sau:

Hnh III.6: Giao din chnh


c. Khi ngi dng chn mc Thot, ri nhp chn Thc hin, chng trnh chm
dt. Vit m lnh x l i vi trng hp ny.
d. Khi ngi dng nhp chn Nhp liu, ri Thc hin, mt Form s m ra cho
php nhp thng tin hng ha vo. Hy thit k Form ny vi cc chc nng
nh hnh di:

Hnh III.7: Form nhp liu


e. Mi khi ngi dng nhp thng tin vo cc TextBox, ri chn nt nhn
Nhp, nhng thng tin s c lu ln li hin th. Khi chn Ghi tp tin,
mt hp thoi (Common Dialog) lu tp tin hin ra cho php chn ng dn
Trang 54

TT. Visual Basic


v tn tp tin, sau ghi nhng thng tin trn li vo tp tin chn (vi cu
trc tp tin c m t phn u). Nt nhn Thot s ng Form ny li, tr
v Form chnh ban u. Vit cc on x l thch hp.
f. Form chnh ban u (hnh III.6), khi ngi dng chn Hin th thng tin
hng ha, mt hp thoi m tp tin (CommonDialog) hin ra cho php chn
tn tp tin cha d liu v hng ha c to ra cu e. Sau c d liu
t tp tin ri hin thi trn li:

Hnh III.8: c t tp tin


Hy thit k Form v vit m lnh x l cc s kin thch hp.

Trang 55

TT. Visual Basic


C S D LIU S DNG
Cc chng k tip l phn lp trnh Visual Basic truy xut c s d
liu (CSDL). Trong cc bi tp trn CSDL, ta c s dng CSDL
HangHoa.MDB ca Access. C s d liu ny c sn, sinh vin c th lin
h cn b ging dy ly v. Thng tin cc bng (Table) ca CSDL ny nh
sau:
TLOAIHANG(MaLoai, TenLoai): Mi loi hng ha c m loi v tn loi.
THANGHOA(MaHang, TenHang, DVTinh, MaLoai). Mi hng ha c m
hng ha, tn hng ha, n v tnh v ch thuc 1 loi hng ha no .
TNHANVIEN(MaNV, HoTen, Phai, Diachi, Ngaysinh, Luong, Ghichu): Mi
nhn vin c m nhn vin, h tn, phi, a ch nhn vin, ngy sinh, lng ca nhn
vin l bao nhiu v c th c mt vi ghi ch v nhn vin .
TPHATSINH(SOTT, Ngay, Loai, Fieu, Hten, Lydo, MaHang, Solg, Dgia,
MaNV): Mi mt pht sinh c ghi nhn thnh mt chng t c SoTT, ngy pht
sinh chng t, loi pht sinh l nhp (hay xut), s phiu, h tn khch hng, l do
pht sinh ng vi hng ha no (m hng), s lng v n gi l bao nhiu, nhn vin
ph trch pht sinh l g (MaNV).
Bng quan h gia cc Table ny nh sau:

Cc mi quan h ca CSDL HangHoa.mdb

Trang 56

TT. Visual Basic

Chng 4 CC I TNG TRUY CP


D LIU

Mc tiu:
Chng ny gm cc bi tp nhm rn luyn sinh vin cch thc lp
trnh c s d liu s dng th vin i tng Data Access Objects (DAO).
y l cch thc lp trnh ph bin i vi cc ng dng chy trn my n.
Hc xong chng ny, sinh vin phi nm bt c cc vn sau:
- S dng iu khin d liu truy xut c s d liu.
- S dng th vin i tng DAO lp trnh c s d liu.
Kin thc c lin quan:
- Gio trnh Visual Basic, chng 9.
Ti liu tham kho:
Visual Basic 6 Certification Exam Guide - Chapter 5, Page 139 - Dan
Mezick & Scot Hillier - McGraw-Hill - 1998.
http://www.vovisoft.com/VisualBasic/VB6Chapter14.htm
http://www.vovisoft.com/VisualBasic/VB6Chapter15.htm

Trang 57

TT. Visual Basic

I. HNG DN
Bi tp 4-1

S DNG DATA CONTROL


Bc 1: To mt d n mi tn DataControl trong th mc Basic\Bt4-1.
Bc 2: Nhp p ln Icon ca Control Data trong Toolbox. Mt Control Data tn
Data1 s hin ra trn Form. Mun cho n nm bn di Form, hy t thuc tnh
Align ca n trong Properties Window thnh 2 - Align Bottom.
Nhp bn phi hng property DatabaseName, k click ln nt la chn c
ba chm chn mt file c s d liu Access t hp thoi cho Data1. y ta chn
E:\Program Files\Microsoft Visual Studio\VB98\BIBLIO.MDB (ty my tnh c
th l C hay a D)

Hnh IV.1: Xc
lp thuc tnh cho
Data Control

Bc 3: Trong chng trnh ny ta lm vic vi table Titles ca c s d liu


BIBLIO.MDB, xem v sa i cc records. thuc tnh DefaultType ca
Data1 c tr s 2- UseJet, tc l dng k thut DAO, thay v dng k thut ODBC.

Hnh IV.2: Recordset Type

Trang 58

TT. Visual Basic


Khi ta nhp chut ln thuc tnh Recordsource ca Data1, ri nhp ln tam gic nh
bn phi, mt ComboBox s m ra cho ta thy danh sch cc tables trong c s d
liu, chn Titles. thuc tnh RecordsetType ca Data1 c tr s l 0 - Table:
Bc 4: Mt t mi m ta s dng thng xuyn khi truy cp d liu trong VB6 l
Recordset (b records). Recordset l mt Set of records, n c th cha mt s
records hay khng c record no c. Mt record trong Recordset c th l mt record
ly t mt Table. Trong trng hp y c th ta ly v tt c records trong table hay
ch nhng records tha ng mt iu kin, th d nh ta ch mun ly cc records ca
nhng sch xut bn trc nm 1990 (Year Published < 1990).
To Form c dng nh sau:

Hnh IV.3: Giao din ban u


4 labels vi caption ca chng: Title, Year Published, ISBN v Publisher ID.
K cho thm 4 textboxes tng ng v t tn chng l txtTitle,
txtYearPublished, txtISBN v txtPublisherID.
Bc 5: Chn textbox txtTitle, ri t thuc tnh Datasource ca n trong Properties
Window thnh Data1. Khi click ln property Datafield ca txtTitle v m
ComboBox ra ta s thy lit k tn cc trng trong table Titles. l v Data1 c
coi nh trung gian ly table Titles t c s d liu. y ta s chn ct Title.
Tng t cho 3 textboxes cn li, v chn cc ct Year Published (nm xut
bn), ISBN (s l lch trong th vin quc t), v PubID (s l lch nh xut bn) lm
Datafield cho chng.
Bc 6: Lu d n v chy chng trnh. Ta s thy giao din nh sau:

Trang 59

TT. Visual Basic

Hnh IV.4: Kt qu thc thi


ng dng

Nhn xt:
9 Ta c th bm cc nt di chuyn Navigator Buttons i n cc record u
(first), trc (previous), k (next) v cui (last). Mi ln ta di chuyn n mt record
mi l chi tit ca record y s hin th. Nu khng dng cc Navigator Buttons, ta
cng c th vit on m lm cng tc tng ng bng cch gi cc hm trn
Recordset l MoveFirst, MovePrevious, MoveNext v MoveLast.
9 Khi record cui ca Recordset ang hin th, nu ta gi hm MoveLast th
thuc tnh EOF (End-Of-File) ca Recordset tr thnh True. Tng t nh vy, khi
record th nht ca Recordset ang hin th, nu ta gi hm MovePrevious th thuc
tnh BOF (Begin-Of-File) ca Recordset tr thnh True. Nu mt Recordset khng c
cha mt record no c th c hai thuc tnh EOF v BOF u l True.
9 Khi record u tin ang hin th, nu ta sa Year Published i t 1985
thnh 1983 ri nhp Navigator button Next hin th record th nh, k click
Navigator button Previous hin th li record u tin th ta s thy l trng Year
Published ca record u tin tht s c thay i (updated) thnh 1983.
iu ny c ngha rng khi di chuyn t record ny n record khc th nu
record ny c s thay i do ngi s dng, n lu tr s thay i trc khi di
chuyn. Cha chc l ta mun iu ny, do , nu ta khng mun ngi s dng tnh
c sa i mt record th ta c th t thuc tnh Locked ca cc textboxes y thnh
True ngi s dng khng th sa i cc textboxes nh trong hnh di y:

Trang 60

TT. Visual Basic

Hnh IV.5: Kha (lock) Textbox

CH NH V TR C S D LIU LC CHY CHNG TRNH


Bc 7: Cch ch nh tn c s d liu trong giai on thit k (at design time) ta
dng trc y tuy tin li nhng hi nguy him, v khi ta ci chng trnh ny ln
my tnh khc, cha chc tp tin c s d liu y nm trong mt th mc c cng tn.
V d trn my tnh ny th c s d liu nm trong th mc E:\Program
Files\Microsoft Visual Studio\VB98, nhng trn my tnh khc th c s d liu nm
trong th mc D:\Basic\Bt4-1 chng hn. Do , khi chng trnh khi ng ta nn
xc nh li v tr ca c s d liu. Chng hn ta mun c s d liu trong cng
mt th mc vi chng trnh ang chy, ta c th dng thuc tnh Path ca
Application Object App.
Khai bo mt bin tn duongdan trong phn [General]\[Declaration] ca
Form1:
Dim duongdan As String
Bc 8: Ta x l s kin Form_Load nh sau:
Private Sub Form_Load()
duongdan = App.Path
If Right(duongdan, 1) <> "\" Then duongdan = duongdan & "\"
Data1.DatabaseName = duongdan & "BIBLIO.MDB"
End Sub
THM BT CC RECORDS
Bc 9: Chng trnh n y tm n, nhng n khng cho ta cng c thm (add),
bt (delete) cc records. By gi hy t vo Form 5 buttons tn: cmdEdit, cmdNew,
cmdDelete, cmdUpdate v cmdCancel.

Trang 61

TT. Visual Basic


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

Hnh IV.7: Kt qu thc thi

Bc 12: Th tc SetControls c gi trong Sub Form_Load khi chng trnh khi


ng v s kin CmdEdit_Click c x l nh sau:
Private Sub Form_Load()
duongdan = App.Path
If Right(duongdan, 1) <> "\" Then duongdan = duongdan & "\"
Data1.DatabaseName = duongdan & "BIBLIO.MDB"
SetControls (False)
End Sub
Private Sub CmdEdit_Click()
Trang 62

TT. Visual Basic


SetControls (True)
End Sub
Bc 13: Khi ta xa mt record trong recordset, v tr ca record hin ti (current
record) vn khng thay i. Do , sau khi xa mt record ta phi MoveNext. Tuy
nhin, nu ta va xa record cui ca Recordset th sau khi MoveNext, thuc tnh
EOF ca Recordset s thnh True. Thnh ra ta phi kim tra iu , nu ng vy th
li phi MoveLast hin th record cui ca Recordset nh trong on m ca Sub
cmdDelete_Click di y:
Private Sub CmdDelete_Click()
On Error GoTo DeleteErr
With Data1.Recordset
' Xoa record
.Delete
' Nhay den record ke
.MoveNext
If .EOF Then .MoveLast
Exit Sub
End With
DeleteErr:
MsgBox Err.Description
Exit Sub
End Sub
Bc 14: Ta c th Update (cp nht) mt record trong Recordset bng hm Update.
Nhng ta ch c th gi hm Update ca mt Recordset khi Recordset ang trong
Edit hay AddNew mode. Ta t mt Recordset vo Edit mode bng cch gi hm
Edit ca Recordset, th d nh Data1.Recordset.Edit. Tng t nh vy, ta t mt
Recordset vo AddNew mode bng cch gi hm AddNew ca Recordset, th d nh
Data1.Recordset.AddNew.
Private Sub cmdNew_Click()
Data1.Recordset.AddNew
SetControls (True)
End Sub
Private Sub cmdUpdate_Click()
Data1.Recordset.Edit
Data1.Recordset.Update
SetControls (False)
End Sub
Bc 15: Lu d n v chy chng trnh.

Trang 63

TT. Visual Basic

Bi tp 4-2
CC I TNG C BN CA DAO
Bc 1: To th mc Basic\Bt4-2. To giao din cho chng trnh nh sau:

Hnh IV.8: Giao din ban u


Cc tn ca thnh phn menu ln lt l: mnuFile, mnuOpen, mnuExit.
Sau vo Project\References, nh du vo Microsoft DAO 3.51 Object
Library; chn OK.
Bc 2: Thm mt Common Dialog vo Form1, tn l dlgDatabase.
Bc 3: Thm mt DBGrid vo form bng cch chn: Project\Components, nh
du Microsoft Data Bound Grid Control 5.0 (SP3); ri chn DBGrid trn ToolBox.
Sau thm mt TextBox v mt Data Control vo form1. Ta c cc tn ca iu
khin l: DBGrid1, Text1, Data1 vi cc thuc tnh nh sau:
Item 1: TextBox
Name: Text1
Multiline: True
ScrollBars = 3
Item 2: DBGrid
Name: DBGrid1
DataSource = Data1
Ta c hnh dng ca form1 nh sau:

Trang 64

TT. Visual Basic

Hnh IV.9: Giao din


y

Sau , thm on m sau trong th tc x l s kin mnuOpen_Click:


CommonDialog1.FileName = "*.mdb"
CommonDialog1.Filter = "Access DBs (*.mdb)|*.mdb"
CommonDialog1.ShowOpen
Data1.DatabaseName = CommonDialog1.FileName
Bc 4: Thm mt nt nhn (Button) nh hnh trn, Caption l Run query. Nt ny c
mc ch l thc thi cu lnh SQL m ngi dng nhp vo Text1. thc thi c
lnh SQL ny, ta phi gn thuc tnh Recordsource ca Data Control Data1 nh trong
th tc x l s kin Command1_Click:
Private Sub Command1_Click()
Data1.RecordSource = Text1.Text
Data1.Refresh
End Sub
Bc 5: Trong hm x l s kin mnuExit_Click thm dng m sau:
End
Chy chng trnh, trong mc File\Open ca menu chn tp tin C:\Program
Files\Microsoft Visual Studio\VB98\Biblio.mdb. Sau ta g cu lnh SQL sau vo
Text Box:
Select * from Publishers
Nhp chut vo nt nhn Run query. Quan st kt qu hin th.
Ta to mt chng trnh cho php ngi s dng m mt CSDL v chy
cu SQL trn CSDL . By gi, i vi CSDL c m trn, tm xem cc bng ca
n l g nhm mc ch xy dng cc cu truy vn cho ph hp.
Bc 6: Thm on m sau vo phn khai bo ca Form1:
Private db As DAO.Database
Private td As DAO.TableDef
Private qd As DAO.QueryDef
Private fld As DAO.Field

Trang 65

TT. Visual Basic


Bc 7: Trong hm x l s kin mnuOpen_Click ta cn kim tra xem tp tin c
chn c phi l tp tin CSDL ca Access hay khng (*.mdb)? Sau dng cc bin
c khai bo trn thao tc Sa th tc mnuOpen_Click nh di y:
Private Sub mnuOpen_Click()
CommonDialog1.FileName = "*.mdb"
CommonDialog1.Filter = "Access DBs (*.mdb)|*.mdb"
CommonDialog1.ShowOpen
If UCase(Right(CommonDialog1.FileName, 3)) <> "MDB" Then
MsgBox "Khong phai la tap tin cua Microsoft Access"
Else
On Error Resume Next
db.Close
On Error GoTo 0
Screen.MousePointer = vbHourglass
' Mo CSDL
Set db = _
DBEngine.Workspaces(0).OpenDatabase(CommonDialog1.FileN
ame)
Form1.Caption = "Cau SQL: Chon " & CommonDialog1.FileName
Screen.MousePointer = vbDefault
Data1.DatabaseName = CommonDialog1.FileName
End If
End Sub
Bc 8: Ta m c CSDL, by gi ta dng mt List Box hin th tt c cc
bng ca CSDL c m trn.
Thm mt ListBox vo Form tn List1, trong hm x l s kin mnuOpen,
thm on m sau trc lnh End If:
' Them vao ListBox
List1.Clear
For Each td In db.TableDefs
List1.AddItem td.Name
Next
Chy chng trnh, ListBox s hin th tt c cc bng ca CSDL trn.
Bc 9: Thm mt ListBox na vo Form, tn List2. Thm on m sau trong hm x
l s kin List1_Click:
Private Sub List1_Click()
' Tim bang duoc chon trong CSDL
Set td = New TableDef
For Each td In db.TableDefs
If td.Name = Me.List1.List(Me.List1.ListIndex) Then
Exit For
End If
Next
Trang 66

TT. Visual Basic


' Hien thi cac truong cua bang duoc chon
For Each fld In td.Fields
List2.AddItem fld.Name
Next
End Sub
Bc 10: Chy chng trnh, chn File\Open chn tp tin CSDL, lc List1 s
hin th cc bng ca CSDL. Nhp chn mt bng trong List1, List2 s hin th tn cc
trng ca bng . By gi ta tin thm mt bc na l hin th tt c cc cu truy
vn (SQL) c lu trong CSDL trn bng cch:
Thm mt ListBox na vo Form1 tn l List3, sau thm vo on
m sau trong hm x l s kin mnuOpen trc lnh End If:
List2.Clear
List3.Clear
Text1.Text = ""
For Each qd In db.QueryDefs
List3.AddItem qd.Name
Next
Bc 11: Chy chng trnh, kim tra xem iu g xy ra trn List3.
ng chng trnh li, thm on m sau trong hm x l s kin List3_Click:
Private Sub List3_Click()
For Each qd In db.QueryDefs
If qd.Name = List3.List(List3.ListIndex) Then
Text1.Text = qd.SQL
End If
Next
End Sub
Chy chng trnh, m BIBLIO.MDB, nhp vo List3. Quan st kt qu.
Bc 12: Chng ta lu cu SQL nhp t bn phm vo trong CSDL trn vi mt tn
cho trc. tng chnh l ta kim tra cu SQL c nhp , nu n khng c li ta
s lu vo CSDL.
Thm mt nt nhn (Button) vo Form1 vi Name: Command2, Caption: Save
Query. Sau x l s kin Command2_Click nh sau:
Private Sub Command2_Click()
' Luu cau SQL
Set qd = New QueryDef
qd.SQL = Trim$(Text1.Text)
MsgBox "Cau SQL duoc luu la: " & qd.SQL
' Nhap ten cua cau SQL
qd.Name = InputBox("Nhap ten cau SQL: ")
db.QueryDefs.Append qd
End Sub

Trang 67

TT. Visual Basic


Bc 13: Chy chng trnh, m BIBLIO.MDB, chn cu mt query, chy n (Run
query); sau nhp vo nt Save Query lu li vi tn ta phi nhp vo t bn
phm. kim tra, hy m li tp tin trn (File\Open): cu query trn c hin th
trong List3.
Hnh bn di hin th kt qu khi thc thi chng trnh.

Hnh IV.10: Kt qu thc thi ng dng

Trang 68

TT. Visual Basic

Bi tp 4-3
M HNH DAO

Bc 1: Trong bi ny ta s tm hiu nhng cch lp trnh cn bn vi c s d liu


MS Access qua k thut DAO m khng cn dng n Control Data nh bi tp 4-1.
Ta s cn n cc i tng (Object) trong th vin DAO, do nu bn m mt d
n VB mi th hy dng Menu Command Project | References... chn Microsoft
DAO 3.51 Object Library bng cch click checkbox bn tri nh trong hnh di
y.

Hnh IV.11: Tham


chiu n th vin
DAO

Bc 2: Sau trong ca s son tho m lnh ca Form chnh ta s khai bo bin


myDatabase kiu DAO database v bin myRS cho mt DAO recordset. y ta
ni r Database v Recordset l thuc loi DAO phn bit vi Database v
Recordset thuc loi ADO (ActiveX Data Object) sau ny.

Hnh IV.12: Khai bo bin


Trang 69

TT. Visual Basic


Bc 3: By gi hy t ln Form chnh, tn frmDAO, 4 labels vi captions: Title,
Year Published, ISBN v Publisher ID. K cho thm 4 textboxes tng ng v
t tn chng l txtTitle, txtYearPublished, txtISBN v txtPublisherID.
iu ta mun lm l khi Form mi c thc thi, n s ly v t c s d liu
mt Recordset cha tt c records trong table Titles theo th t abc ca field (trng)
Title v hin th record u tin.
DNG T KHA SET
Bc 4: Trc ht l m mt c s d liu da vo tn tp tin ca Access database:
Set myDB = OpenDatabase(AppFolder & "BIBLIO.MDB")
t kha Set trong on m trn. l v myDB l mt Pointer (con tr)
ch n mt Object (i tng). Mc d t y v sau ta s dng myDB nh mt
Database (c s d liu) theo cch ging nh bt c mt bin thuc kiu d liu no
khc, nhng khi ch nh ln u l n t u n th ta dng ch Set, ni rng tht
ra myDB khng phi l Object Database, nhng l Pointer n Object Database.
Nguyn nhn l VB dnh ra mt phn trong b nh (memory) cha i
tng Database khi ta nhn c n khi hm OpenDatabase thc thi. D v tr ch
cha i tng Database trong b nh khng nht nh, nhng v ta nm cn ch n
v tr y nn ta vn c th lm vic vi n mt cch bnh thng. Ci cn y l tr s
ca bin myDB. V tr s ny khng phi l Object (i tng), nhng n cha
memory address (a ch trong b nh) ch n (point to) i tng Database, nn ta
gi n l Pointer (con tr).
Tng t nh vy, v Recordset l mt Pointer ch n mt i tng, ta cng
dng Set khi ch nh mt DAO Recordset ly v t hm OpenRecordset ca
database myDB.
Set myRS = myDB.OpenRecordset("Select * from Titles ORDER BY Title")
Tham s kiu String ta dng cho hm OpenRecordset l mt cu lnh SQL. N
ch nh cho c s d liu ly tt c mi trng ca mi mu tin t Table Titles lm
mt Recordset v sp xp cc mu tin trong Recordset y theo th t abc ca trng
Title (ORDER BY Title).
l Recordset ny cng ging nh thuc tnh Recordset ca mt Data
Control m ta dng trong bi 7-1. By gi c Recordset ri, ta c th hin th chi tit
ca record u tin nu Recordset y c t nht mt record. Ta kim tra iu y da
vo thuc tnh RecordCount ca Recordset nh trong on m di y ca s kin
Form_Load:
Private Sub Form_Load()
AppFolder = App.Path
If Right(AppFolder, 1) <> "\" Then AppFolder = AppFolder & "\"
Set myDB = OpenDatabase(AppFolder & "BIBLIO.MDB")
Set myRS = myDB.OpenRecordset("Select * from Titles ORDER BY Title")
If myRS.RecordCount > 0 Then
myRS.MoveFirst
Displayrecord
End If
End Sub
Trang 70

TT. Visual Basic


Bc 5: Sau khi dng hm MoveFirst ca Recordset nh v mu tin hin thi l
mu tin u tin, ta hin th tr s cc trng ca mu tin bng cch gn chng vo cc
textboxes ca Form nh sau:
Private Sub Displayrecord()
With myRS
txtTitle.Text = .Fields("Title")
txtYearPublished.Text = .Fields("[Year Published]")
txtISBN.Text = .Fields("ISBN")
txtPublisherID.Text = .Fields("PubID")
End With
End Sub
v trng Year Published gm c hai t nn ta phi t tn ca trng y gia
hai du ngoc vung ([]). trnh b phin phc nh trong trng hp ny, khi t tn
cc trng tca table trong lc thit k c s d liu hy dn dnh cc ch li vi nhau,
ng ri ra. Th d nh dng YearPublished thay v Year Published.
CC NT DI CHUYN
Bc 6: Mun c cc nt Navigators ging nh ca mt Control Data, ta hy t ln
Form 4 buttons mang tn CmdFirst, CmdPrevious, CmNext v CmdLast vi
captions: <<, <, >, >>.
Bc 7: M lnh cho cc nt ny cng n gin, nhng ta phi coi chng khi ngi
dng mun di chuyn qu mu tin cui cng hay mu tin u tin. Ta phi kim tra
xem EOF c tr thnh True khi ngi dng nhp CmdNext, hay BOF c tr thnh
True khi ngi dng nhp CmdPrevious.
Cc s kin ny c x l nh sau:
Private Sub CmdNext_Click()
myRS.MoveNext
If Not myRS.EOF Then
Displayrecord
Else
myRS.MoveLast
End If
End Sub
Private Sub CmdPrevious_Click()
myRS.MovePrevious
If Not myRS.BOF Then
Displayrecord
Else
myRS.MoveFirst
End If
End Sub
Private Sub CmdFirst_Click()
myRS.MoveFirst
Displayrecord
End Sub
Trang 71

TT. Visual Basic


Private Sub CmdLast_Click()
myRS.MoveLast
Displayrecord
End Sub
Bc 7: Chy chng trnh. Khi chy chng trnh ta s thy n hin th chi tit ca
mu tin u tin khc vi cc bi trc y v cc mu tin c sp xp.
Ta hy th dng cc nt di chuyn <, <<, >, >> xem chng lm vic c ng
khng.
Ti y, ta nhn thy rng d ngi dng c v tnh sa i mt chi tit no
trong cc textboxes, khng c mu tin no b cp nht ha trong c s d liu khi
ngi dng di chuyn t mu tin ny n mu tin khc. L do l cc Texboxes khng
c rng buc d liu (Data Bound) vi cc trng ca Recordset.
THM BT CC RECORDS
Bc 8: Ging nh chng trnh trong bi ri, ta s thm cng c thm (add), bt
(delete) cc mu tin. Hy thm vo Form 5 buttons tn: cmdEdit, cmdNew,
cmdDelete, cmdUpdate v cmdCancel.
Bc 9: Ch no trong chng trnh 4-1 ta dng Data1.Recordset th by gi ta dng
myRS.
Ta s dng li Sub SetControls vi tham s Editing c tr s False hay True
ty theo ngi dng ang xem (Browse) hay sa i (Edit). Trong Browse mode, cc
Textboxes b Locked (kha) v cc nt cmdUpdate v cmdCancel b v hiu lc.
Trong Edit mode, cc Textboxes c unlocked (m kha) v cc nt cmdNew,
cmdDelete v cmdEdit b v hiu lc.
Do ta ch cn nh l khi ngi dng ang sa i mt mu tin hin hnh hay
thm mt mu tin mi. Ta cha tr s Boolean y trong bin AddNewRecord. Nu
user sp thm mt record mi th AddNewRecord = True, nu User sp Edit mt
record hin hu th AddNewRecord = False.
Ngoi ra, khi ngi dng sp thm mt mu tin mi bng cch nhp nt New
th ta phi t xa ht cc textboxes bng cch gn chui rng cho cc TextBox .
Ta c cc on m sau:
Dim AddNewRecord As Boolean
Private Sub ClearAllFields()
txtTitle.Text = ""
txtYearPublished.Text = ""
txtISBN.Text = ""
txtPublisherID.Text = ""
End Sub
Private Sub cmdNew_Click()
Trang 72

TT. Visual Basic


AddNewRecord = True
ClearAllFields
SetControls (True)
End Sub
Private Sub CmdEdit_Click()
SetControls (True)
AddNewRecord = False
End Sub
Bc 10: Khi ngi dng nhp Cancel trong khi ang sa i cc textboxes, ta khng
cn gi hm v Recordset cha b t vo AddNew hay Edit mode. y ta ch cn
hin th li chi tit ca mu tin hin hnh, tc l hy b nhng g ngi dng ang
nh vo:
Private Sub CmdCancel_Click()
SetControls (False)
Displayrecord
End Sub
Bc 11: Lc ngi dng nhp Update, ta s kim tra d liu xem c trng no b b
trng (nht l kha chnh ISBN bt buc phi c tr s) hay c g khng hp l bng
cch gi hm GoodData. Nu GoodData tr li mt tr s False th ta khng xc tin
vi vic Update. Nu GoodData tr v tr s True th ta t Recordset vo AddNew
hay Edit mode ty theo tr s ca bin AddNewRecord l True hay False.
Ging nh khi hin th chi tit ca mt Record ta phi gn tng trng vo
textbox, th by gi khi Update ta phi lm ngc li, tc l gn ni dung ca tng
textbox vo cc trng tng ng. Sau cng ta gi hm Update ca recordset v cho
cc iu khin tr li Browse mode:
Private Function GoodData() As Boolean
GoodData = True
End Function
Private Sub CmdUpdate_Click()
If Not GoodData Then Exit Sub
With myRS
If AddNewRecord Then
.AddNew
Else
.Edit
End If
.Fields("Title") = txtTitle.Text
.Fields("[Year Published]") = txtYearPublished.Text
.Fields("ISBN") = txtISBN.Text
.Fields("PubID") = txtPublisherID.Text
.Update
End With
SetControls (False)
Trang 73

TT. Visual Basic


End Sub
TM MT RECORD
Bc 11: Tip theo y, ta mun lit k cc sch c tiu cha mt ch hay cu no
, th d nh ch "Guide". K ngi dng c th chn mt sch bng cch chn
tiu sch y v nhp nt Go. Chng trnh s locate (tm ra) record ca sch y v
hin th chi tit ca n.
By gi bn hy cho vo Form mt textbox tn txtSearch v mt Image tn
ImgSearch. K t mt frame tn fraSearch vo Form. ln frame ny mt
listbox tn List1 ta cc sch.
Ta s cho ImgSearch hin th hnh mt ng nhm nn bn hy click vo bn
phi property Picture trong Properties Window chn Icon BINOCULR.ICO t
folder E:\Program Files\Microsoft Visual Studio\Common\Graphics\Icons\Misc.
Khi ngi dng nhp vo ImgSearch, chng trnh s t ng tm kim cc
sch c ta c ngi dng nh vo trong TextBox. S kin ImgSearch c x l
nh sau:
Private Sub ImgSearch_Click()
fraSearch.Visible = True
Dim SrchRS As DAO.Recordset
Dim SQLCommand As String
SQLCommand = "Select * from Titles where Title LIKE '" & "*" & txtSearch & "*"
& "' ORDER BY Title"
Set SrchRS = myDB.OpenRecordset(SQLCommand)
If SrchRS.RecordCount > 0 Then
List1.Clear
With SrchRS
Do While Not SrchRS.EOF
List1.AddItem .Fields("Title")
.MoveNext
Loop
End With
End If
End Sub
Trong cu SELECT trn ta dng ton t LIKE, ni dung ca TextBox, c du *
hai bn. Du * l ch c (hay khng c) ch g cng c.
Bc 12: Lu d n v chy chng trnh. Kim tra kt qu.

Trang 74

TT. Visual Basic

Bi tp 4-4
TH D V S DNG DAO
Bi tp ny nhm mc ch gii thiu v cch thc s dng iu khin d liu
v th vin DAO trong vic thit k mt Form nhp liu hon chnh cho bng
THangHoa trong CSDL HangHoa.mdb. Giao din cng vi m lnh ch mang tnh
cht gi ; sinh vin c th thc hin theo ring ca mnh.
Bc 1: Thit k form nh sau:

Hnh IV.13: S
dng Data
Control

*
Vi *: DataControl: iu khin d liu
DatabaseName: HangHoa.MDB
RecordSource: THangHoa
Name: datHH
Bc 2: Thit lp cc thuc tnh cho cc TextBox & ComboBox.
DataSource: DatHH
DataField:
Bc 3: t iu khin li ln Form (+) sau khi tham chiu n n
(Project\Components\Microsoft Data Bound Grid Control 5.0 SP3).
DataSource: datHH
Chy chng trnh, ta c kt qu nh trn.
Trang 75

TT. Visual Basic


Bc 4: S kin cmdThem_Click
Private Sub cmdThem_Click()
datHH.Recordset.AddNew
DoiTThai False
End Sub
Trong :
Private Sub DoiTThai(ByVal TThai As Boolean)
cmdThem.Enabled = TThai
cmdSua.Enabled = TThai
cmdXoa.Enabled = TThai
cmdHuy.Enabled = Not TThai
cmdLuu.Enabled = Not TThai
End Sub
Bc 4: S kin cmdSua_Click & s kin cmdXoa_Click:
Private Sub cmdSua_Click()
datHH.Recordset.Edit
DoiTThai False
End Sub
Private Sub cmdXoa_Click()
On Error GoTo Xuly
datHH.Recordset.Delete
Exit Sub
Xuly:
MsgBox Err.Description, vbCritical + vbSystemModal, "Loi"
End Sub
Bc 5: S kin cmdLuu_Click & cmdHuy_Click
Private Sub cmdHuy_Click()
'dathh.Database =
datHH.Recordset.CancelUpdate
DoiTThai True
End Sub
Private Sub cmdLuu_Click()
datHH.Recordset.Update
DoiTThai True
End Sub
Bc 6: S kin Form_Load:
Private Sub Form_Load()
DoiTThai True
End Sub
Trang 76

TT. Visual Basic


- C nhn xt g nu khi chy chng trnh, ta thm mi mt mu tin c kha l
Mahang trng vi mt MaHang c. gii quyt ta lm th no?

II. BI TP T LM
S dng CSDL HangHoa.mdb, anh (ch) hy:
1) Ci tin Form nhp bi 4-4, sao cho trng MaLoai phi c ly t cc MaLoai
ca bng TLoaiHang. Hn na thay v hin th MaLoai, ta hin th TenLoai cho d
theo di; nhng khi thm vo bng THangHoa, ta li thm vo MaLoai ca TenLoai
.
2) Bng cch s dng DAO (tng t 4-3), anh (ch) hy:
a. Thit k Form nhp liu cho bng THANGHOA.
b. Thit k Form nhp liu cho bng TNHANVIEN.

Trang 77

TT. Visual Basic

Chng 5 I TNG D LIU T XA


Mc tiu:
Chng ny nhm gii thiu cho sinh vin cch thc s dng th
vin i tng RDO truy cp d liu, cch thc truy cp d liu trc y
i vi c s d liu my t xa.
Hc xong chng ny, sinh vin phi nm c cc vn sau:
- Thit lp tn ngun d liu (Data Source Name) trn Windows.
- S dng Remote Data Control truy cp d liu.
- i tng UserConnection cng nh th vin i tng RDO.
Kin thc c lin quan:
Gio trnh Visual Basic, Chng 10.
Ti liu tham kho:
- Visual Basic 6 Certification Exam Guide - Chapter 11, Page 309 Dan Mezick & Scot Hillier - McGraw-Hill - 1998.
- 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 78

TT. Visual Basic

I. HNG DN
Bi tp 5-1
I TNG USER CONNECTION
THIT LP NGUN D LIU ODBC
Bc 1: Trong bi tp ny, ta s thao tc vi CSDL Access BIBLIO.MDB thng qua
VB.
Trc tin ta phi thit lp ngun d liu nh tin ch ODBC Administrator ca
Windows. Chn ODBC Administrator trong Control Panel (icon tn l ODBC). Nhp
p vo icon ny khi ng ODBC Administrator.
Bc 2: Mt hp thoi hin ra hin th tt c cc ngun d liu ODBC hin thi trn
my tnh. to mt ngun d liu mi, ta chn mc System DSN. Nhp vo nt
Add. Hp thoi cho php to ngun d liu mi vi tt c cc iu khin (drivers)
ODBC c sn trn my. y, ta chn Microsoft Access ODBC driver trong danh
sch v chn Finish.
Bc 3: Hp thoi ci t ODBC xut hin. Trong hp thoi ny, nh ngha mt
ngun d liu mi. Nhng trc tin ta phi xc nh tn ca ngun d liu. Ta c th
t vi bt c mt tn no, chng hn BIBLIO.
Sau , nhp nt Select tm n CSDL BIBLIO.MDB trong my tnh, chn
tp tin ny; nhp OK. Lc ny ngun d liu c nh ngha xong.
TO GIAO DIN CHNG TRNH
Bc 4: To mt d n mi trong th mc Basic\Bt5-1. To giao din chng trnh
nh hnh di:

1
2
3

Hnh V.1: Giao din

4
5
6

1: TextBox
Name: txtTitle
2: TextBox
Name: txtAuthor
3: TextBox
Trang 79

TT. Visual Basic


Name: txtName
4: TextBox
Name: txtYear
5: TextBox
Name: txtISBN
6: CommandButton
Name: cmdDau
Caption: u
7: CommandButton
Name: cmdCuoi
Caption: Cui
8: CommandButton
Name: cmdSau
Caption: Sau
9: CommandButton
Name: cmdTruoc
Caption: Trc
I TNG USER CONNECTION
Bc 5: y, ta s dng i tng User Connection truy xut RDO. Chn
Project\Components trn menu; sau chn mc Designers. Trong mc ny, nh
du check vo Microsoft UserConnection. Sau ta thm UserConnection vo d n
bng cch chn Project\More ActiveX Designers\Microsoft UserConnection trn
menu.
Bc 6: i tng UserConnection cung cp cho ta giao din ha truy xut n
ni kt kiu RDO v lm tin li hn khi xc nh ni kt ODBC, nht l truy xut n
cc cu truy vn hay cc th tc lu tr sn trong CSDL m khng cn n mt on
m no.
Bc 7: Trong ca s thuc tnh ca UserConnection, lin kt vi ngun d liu
BIBLIO ODBC va nh ngha trn. Khi ni kt c thit lp, ng ca s
Properties li.
Bc 8: Nhp chut phi vo icon UserConnection, mt menu hin ra, chn Insert
Query trn menu thm mt cu truy vn vo UserConnection. Hp thoi to truy
vn mi xut hin cho php nh ngha cu truy vn mi. t tn cho cu truy vn ny
l AllTiles.
Chn ty chn Base on User-Defined SQL v thm cu SQL sau vo ca s
son tho:
SELECT Titles.Title, Titles.ISBN, Authors.Author, Titles.[Year Published],
Publishers.[Company Name]
FROM Publishers, Titles, Authors, [title author]
WHERE ((((Authors.Au_ID = [title author].Au_ID)
AND ([title author].ISBN = Titles.ISBN))
AND (Titles.PubID = Publishers.PubID)))
Trang 80

TT. Visual Basic


ORDER BY Titles.Title
Bc 9: ng ca s thit k cu truy vn lu vo UserConnection.
VIT M LNH CHO NG DNG
Bc 10: M ca s Code ca Form1, trong phn [General]\[Declarations], nh
ngha cc bin sau cho i tng ni kt RDO v ResultSet.
Private m_noiket As UserConnection1
Private m_ketqua As RDO.rdoResultset
Bc 11: Ta s to ni kt trong s kin Form_Load, sau khi ni kt c to, ta chy
cu SQL va nh ngha trong UserConnection. Thm on m sau vo s kin
Form_Load truy xut n ngun d liu:
Set m_noiket = New UserConnection1
m_noiket.EstablishConnection
' Lay ket qua
Set m_ketqua = _
m_noiket.rdoQueries("AllTitles").OpenResultSet(rdOpenDynamic)
' Dien vao Form
Call Hienthi
Th tc Hienthi dng hin th thng tin ca cc trng tng ng ca mi
mu tin ln TextBox, th tc ny c vit nh sau:
Public Sub Hienthi()
txtTitle.Text = m_ketqua!Title
txtAuthor.Text = m_ketqua!Author
txtName.Text = m_ketqua![Company Name]
txtYear.Text = m_ketqua![Year Published]
txtISBN.Text = m_ketqua!ISBN
End Sub
Bc 12: Phn cn li ca chng trnh ca ta l thm phn x l s kin Click cho
cc nt nhn. M lnh cho cc s kin ny nh sau:
Private Sub cmdCuoi_Click()
m_ketqua.MoveLast
Call Hienthi
End Sub

Trang 81

TT. Visual Basic


Private Sub cmdDau_Click()
m_ketqua.MoveFirst
Call Hienthi
End Sub
Private Sub cmdSau_Click()
m_ketqua.MoveNext
If m_ketqua.EOF Then
Beep
m_ketqua.MoveLast
Else
Call Hienthi
End If
End Sub
Private Sub cmdTruoc_Click()
m_ketqua.MovePrevious
If m_ketqua.BOF Then
Beep
m_ketqua.MoveFirst
Else
Call Hienthi
End If
End Sub
Bc 13: Lu d n v chy chng trnh.

Trang 82

TT. Visual Basic

Bi 5-2
S DNG REMOTE DATA CONTROL
Bc 1: To d n mi trong th mc Basic\Bt5-2. ng k mt DSN vi tn l
DBHH.
Bc 2: Trong bi tp ny ta 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.
Bc 3: Thit k Form c dng sau:

1
Hnh V.2: S dng RDC
1: RemoteDataControl. Name: rdcHangHoa
2: DBGrid. Name: dbgHangHoa.
Bc 4: t thuc tnh DataSourceName ca iu khin rdcHangHoa l DBHH (DSN
to trc y).
Bc 5: nh thuc tnh SQL ca iu khin rdcHangHoa l:
Select * From THANGHOA
Bc 6: Ch nh thuc tnh DataSource ca iu khin dbgHangHoa l rdcHangHoa.
Bc 7: Thc thi chng trnh.
Trang 83

TT. Visual Basic

Bi 5-3
ODBC DIRECT
Bc 1: To d n mi lu trong Basic\Bt5-3.
Bc 2: Tham chiu n iu khin li Microsoft Data Bound Grid Control trong
mc Project\Components.
Bc 3: To Form c dng sau:

2
Hnh V.3: S dng ODBC Direct
1: DBGrid. Name: DbGrid1.
2: Data Control. Name: Data1.
Bc 4: i thuc tnh DefaultType ca DataControl l 1 - Use ODBC.
Bc 5: Thuc tnh Connect ca Data1 l: ODBC;DSN=DBHH.
Bc 6: t thuc tnh Record Source ca Data Control:
Select * From THANGHOA.
Bc 7: t thuc tnh Data Source ca DBGrid1 l: Data1.
Bc 8: Lu d n v thc thi chng trnh.

II. BI TP T LM
S dng CSDL HangHoa.mdb v th vin i tng RDO, anh (ch) hy:
1) Thit k Form nhp liu cho bng THANGHOA.
2) Thit k Form nhp liu cho bng TNHANVIEN.
Trang 84

TT. Visual Basic

Chng 6 I TNG D LIU ACTIVEX


Mc tiu:
Chng ny gm cc bi tp nhn rn luyn cho sinh vin cch thc
lp trnh c s d liu bng cch s dng th vin i tng ADO, giao din
lp trnh ph bin hin nay.
Hc xong chng ny, sinh vin phi nm bt c cc vn sau:
Cc thnh phn trong m hnh i tng ADO gm c:
- i tng Connection.
- i tng Recordset.
- i tng Command.
- i tng Field.
Cch thc s dng cc i tng ny trong ng dng vit bng VB.
Kin thc c lin quan:
- Gio trnh Visual Basic - Chng 11
Ti liu tham kho:
Visual Basic 6 Certification Exam Guide - Dan Mezick & Scot Hillier
- Chapter 12, Page 345 - McGraw-Hill - 1998.
http://www.vovisoft.com/VisualBasic/VB6Chapter16.htm

Trang 85

TT. Visual Basic

I. HNG DN
Bi tp 6-1
S DNG ADO DATA CONTROL
Bc 1: Khi ng mt d n VB6 mi, thm iu khin Data ADO vo hp
ToolBox nh chn Menu Command Project | Components..., ri Microsoft ADO
Data Control 6.0 (OLEDB) nh di y:

Hnh VI.1: Tham chiu th vin ADO


Bc 2: t tn d n l ADODataControl. Sa thuc tnh Name ca form chnh
thnh frmADO, Caption: ADO DataControl Demo.
t mt Control Data ADO tn Adodc1 ln Form. Mun cho n nm bn di Form,
thit lp thuc tnh Align ca n trong ca s Properties thnh 2 - vbAlignBottom.
Bc 3: Nhp bn phi hng property (Custom), k click ln nt browse c ba
chm hp thoi Property Pages hin ra. Trong hp thoi ny, trn Tab General
chn Radio (Option) Button Use Connection String ri nhp nt Build....
Trong hp thoi Data Link Properties, Tab Provider, chn Microsoft Jet
3.51 OLE DB Provider, ri click nt Next >> hay Tab Connection.
Trang 86

TT. Visual Basic

Hnh VI.2: Thit lp Connection


Mc Select or enter a database name ta chn E:\Program Files\Microsoft
Visual Studio\VB98\BIBLIO.MDB, trn my tnh khc c th nm trn C hay D.
Trang 87

TT. Visual Basic


Sau , click nt Test Connection pha di th xem connection c c thit lp
tt khng.

Hnh VI.3: La chn CSDL


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

Hnh VI.4: RecordSource


Chn tr s 2-adOpenDynamic cho thuc tnh Cursor Type ca Adodc1:
Trang 88

TT. Visual Basic

Hnh VI.5: CursorType

Bc 5: By gi t ln Form 4 iu khin nhn vi captions: Title, Year Published,


ISBN v Publisher ID. K cho thm 4 textboxes tng ng v t tn chng l
txtTitle, txtYearPublished, txtISBN v txtPublisherID.
thc hin Data Binding, chn textbox txtYearPublished (nm xut bn), ri thit
lp thuc tnh Datasource ca n thnh Adodc1. Khi chn thuc tnh DataField ca
txtYearPublished v m ComboBox ra ta s thy lit k tn cc Fields trong table
Titles. l v Adodc1 c coi nh trung gian ly table Titles t database. y ta
s chn ct Year Published.
Lp li cng vic ny cho 3 textboxes kia, v chn cc ct Title (Tiu ), ISBN (s l
lch trong th vin quc t), v PubID (s l lch nh xut bn) lm DataField cho
chng.

Hnh VI.6: Xc lp DataField

Trang 89

TT. Visual Basic


n y, mc d cha vit mt dng lnh no, bn c th chy chng trnh v n s
hin th nh di y:

Hnh VI.7: Kt qu ng dng

Bi tp 6-2
TO TP TIN LIN KT D LIU (DATALINK FILE)
Tp tin lin kt d liu l tp tin Windows dng cha cc thng tin v chui kt ni
n mt CSDL no . Chng ta s s dng tp tin ny trong vic thit lp i tng
kt ni (Connection) n CSDL.
Bc 1: DataLink File c to trong ca s Windows Explorer. Do khi ng
Windows Explorer, vo th mc \Program Files\Common Files\System\Ole DB\Data
Links. y l ni thng cha cc tp tin DataLink.
Bc 2: Chn New\Microsoft Data Link t Windows Explorer.
Bc 3: i tn tp tin ny thnh Biblio.UDL.
Bc 4: Nhp chut phi ln tp tin mi ny v chn PROPERTIES t menu.
Bc 5: Nhp chut chn mc PROVIDER & chn Microsoft JET 3.51 OLEDB
Provider. Nhp Next.
Bc 6: Chn ng dn n tp tin BIBLIO.MDB (C:\Program Files\Microsoft
Visual Studic\VB98\Biblio.mdb) trong mc Select or Enter Database Name.
Bc 7: Nhp mc Test Connection kim tra kt ni c thnh cng hay khng?
Bc 8: Chn OK lu li kt ni d liu ny.

Bi tp 6-3
I TNG ADO RECORDSET
Bc 1: Trc khi bt u, cn kim tra tp tin DataLink ca bi 6-2 c c to ra
hay l khng?
Bc 2: To mt d n mi trong VB th mc Basic\Bt6-3.
Trang 90

TT. Visual Basic


Bc 3: Tham chiu n th vin ADO bng cch chn Project\References\ActiveX
Data Object 2.0 Library. Chn OK.
Bc 4: t mt iu khin ListBox ln Form (Name: lstName)
Bc 4: X l s kin Form_Load nh sau:
Set m_Connection = New ADODB.Connection
m_Connection.ConnectionString = _
"File Name=C:\Program Files\Common Files\System\Ole DB\Biblio.udl"
m_Connection.Open
Set m_RecordSet = New ADODB.Recordset
m_RecordSet.Open "Select Name FROM Publishers", m_Connection
Do While Not m_RecordSet.EOF
lstName.AddItem m_RecordSet!Name
m_RecordSet.MoveNext
Loop
Bc 5: Chy chng trnh, iu g xy ra?
on m trn l mt v d in hnh v vic s dng phng thc Open nhn v
mt tp hp cc Records t c s d liu.
Bc 6: Thay v khi to i tng Connection nh t thuc tnh ConnectionString
nh trn (dng tp tin DataLink), hy khi to i tng ny nh trong phn m t
l thuyt (s dng thuc tnh Provider & ConnectionString). Sau chy chng
trnh. Nhn xt.

Bi tp 6-4
LU RECORSET RA TP TIN
Bc 1: Trc khi bt u, cn kim tra tp tin DataLink ca bi 6-2 c c to ra
hay l khng?
Bc 2: To mt d n mi trong VB th mc Basic\Bt6-4.
Bc 3: Tham chiu n th vin ADO bng cch chn Project\References\ActiveX
Data Object 2.0 Library. Chn OK.
Bc 4: Thm mt iu khin m rng vo hp cng c Toolbox nh chn
Project\Components. Chn Microsoft Common Dialog Control 6.0 v Microsoft
DataGrid Control 6.0. Chn OK.
Bc 5: To giao din nh sau:

Trang 91

TT. Visual Basic

1
Hnh VI.8: Lu
Recordset ra tp tin

2
3
5
4

1: TextBox:
Name: txtSQL; MultiLine: True.
2: CommandButton:
Name: cmdTT; Caption: Thc thi.
3: CommandButton:
Name: cmdLuu; Caption: Lu tp tin
4: CommandButton:
Name: cmdMo; Caption: M tp tin
5: DataGrid: Name: grdResult
Ngoi ra, chng trnh cn c s dng hp thoi m & lu tp tin; do , ta
thm vo mt Common Dialog vo ng dng vi thuc tnh Name: dlgFile.
Bc 6: Khi chng trnh thc thi, mi khi ngi dng nhp vo mt cu lnh SQL
vo TextBox ri nhp chn Thc thi, cu SQL ny s thc thi v hin th kt qu
li bn phi. Do s kin cmdTT_Click dc x l nh sau:
Private Sub cmdTT_Click()
Dim m_RecordSet As ADODB.Recordset
Set m_RecordSet = New ADODB.Recordset
m_RecordSet.CursorLocation = adUseClient
m_RecordSet.CursorType = adOpenStatic
m_RecordSet.Open txtSQL.Text, _
"File Name=C:\Program Files\Common Files\System\OLE DB\Biblio.udl"
Set grdResult.DataSource = m_RecordSet
End Sub
Bc 7: Lu RecordSet vo tp tin s c thc hin nh hm Save. y, ta s
dng hp thoi CommonDialog m v lu tp tin. S kin cmdLuu_Click c x
l:
Private Sub cmdLuu_Click()
On Error GoTo xuly
Dim m_RecordSet As ADODB.Recordset
Set m_RecordSet = grdResult.DataSource
Trang 92

TT. Visual Basic


Set grdResult.DataSource = Nothing
Dim strFileName As String
dlgFile.Filter = "Record Set Files (*.dat)|*.dat"
dlgFile.ShowSave
strFileName = dlgFile.FileName
' Luu cac mau tin
m_RecordSet.Save strFileName
Exit Sub
xuly:
MsgBox Err.Description, vbCritical + vbSystemModal, "Loi"
End Sub
Bc 8: Mi khi tp hp mu tin c lu ln tp tin, chng s khng ph thuc vo
vo cc ni kt vi ngun d liu. m d liu c lu, s dng hm Open vi tn
tp tin l i s. S kin cmdOpen_Click c x l:
Private Sub cmdMo_Click()
On Error GoTo xuly
Dim strFileName As String
dlgFile.Filter = "Record Set Files (*.dat)|*.dat"
dlgFile.ShowOpen
strFileName = dlgFile.FileName
Dim m_RecordSet As ADODB.Recordset
Set m_RecordSet = New ADODB.Recordset
m_RecordSet.Open strFileName
Set grdResult.DataSource = m_RecordSet
Exit Sub
xuly:
MsgBox Err.Description, vbCritical + vbSystemModal, "Loi"
End Sub
Bc 9: Chy chng trnh, nhp cu lnh SQL vo TextBox, nhp Thc thi. Sau
lu tp mu tin ny ln a. Mi khi mun m li tp tin no , s dng M tp tin.

II. BI TP T LM
1) S dng ADO, thit k Form nhp liu cho bng THangHoa (hnh di). y
thay v hin th MaLoai, ta li hin th TenLoai:

Trang 93

TT. Visual Basic

Hnh VI.9: Form nhp liu


2) S dng ADO, thit k Form nhp liu cho bng TNhanVien.
3) S dng ADO, thit k Form cho php nhp (sa, xa) thng tin v mt pht sinh
v mt mt hng no trong ngy. Lu : Trng STT l kiu AutoNumber
(Access), Ngay: ly ngy h thng (hm Now).

Trang 94

TT. Visual Basic

Chng 7

MI TRNG D LIU

Mc tiu:
Chng ny gm cc bi tp nhm rn luyn cho sinh vin cch thc
s dng mi trng d liu (Data Environment) ca VB lp trnh CSDL.
Hc xong chng ny, sinh vin phi nm bt c cc vn sau:
S dng thnh tho mi trng d liu gm:
- To i tng Connection.
- To i tng Command.
- Vit m lnh thao tc vi mi trng d liu.
Kin thc c lin quan:
- Gio trnh Visual Basic, Chng 12.
Ti liu tham kho:
- Visual Basic 6 Certification Exam Guide Chapter 10, Page 277 Dan Mezick & Scot Hillier - McGraw-Hill - 1998.
- 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 95

TT. Visual Basic

I. HNG DN
Bi 7-1
DATA ENVIRONMENT
Data Environment cho php chng ta to ng dng c s d liu vi OLEDB
mt cch nhanh chng v hiu qu. Trong bi tp ny, ta s tm hiu v Data
Environment v Report Designer ca VB.
Bc 1: To th mc Basic\Bt7-1. To mt d n kiu Stardard EXE lu vo trong
th mc .
Bc 2: 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.
Bc 3: Trong Data Environment, nhp chut phi vo i tng Connection1, chn
Properties, chn Microsoft Jet 3.51 OLE DB Provider.
Bc 4: Trong mc chn Connection, chn c s d liu mnh mun thao tc trong
mc Select or Enter a Database Name Box; y ta chn CSDL BIBLIO.MDB
(thng

ng
dn
C:\Program
Files\Microsoft
Visual
Studio\VB98\BIBLIO.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 5: Trong Data Environment, nhp chut phi vo i tng Connection1 v
chn RENAME i tn thnh BIBLIO.
Bc 6: Nhp chut phi vo BIBLIO 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 RENAME i tn thnh Publishers.
Bc 7: Nhp chut phi vo Publishers v chn mc Properties, mt hp thoi quy
nh cc thuc tnh cho i tng Publishers c m ra. Trong mc chn General,
chn Source Data l SQL Statement v ta nhp cu SQL sau vo khung nhp:
SELECT PubID, Name FROM Publishers WHERE Name LIKE ?
Cu SQL trn phi nhn vo mt tham s t chng trnh gi n (du chm
hi). Ngha l cu SQL ny thc thi c, ta cn cung cp mt tham s u vo cho
n.
Bc 8: nh ngha tham s, ta chuyn sang mc chn Parameters, ta thy c mt
tham s c nh ngha tn l Param1. Mc nhin ca tham s ny l kiu s, tuy
nhin ta s i chng thnh kiu chui vi cc thuc tnh nh sau:
Data Type
adVarChar
Host Data Type
String
Size
255
Bc 9: To mt recordset con cho i tng Publishers command bng cch nhp
chut phi vo vo i tng ny v chn ADD CHILD COMMAND trn menu. Cc
Trang 96

TT. Visual Basic


cu truy vn ny dng tm thng tin v cc sch da vo nh xut bn no . Khi
mt command con c thm vo, n c tn l COMMAND1.
Bc 10: Trong command con ny, n cn phi c mt cu SQL truy xut thng
tin. Cu truy vn ny c nhim v kt ni thng tin t cc bng Title v Author i vi
tng loi nh xut bn.
Bc 11: M ca s Data View bng cch chn View\Data View Window trn menu.
Trong Data View, xc nh th mc Data Environment Connections. i tng
connection BIBLIO c hin th trong th mc ny. M i tng
connection v xc nh th mc Tables. Trong th mc ny, chn bng
Titles. Nhp p vo bng Titles ny hin th ni dung ca bng.
Bc 12: Khi hin th ni dung ca bng, ta m Data Tools bng cch
chn VIEW\SHOW PANES trn menu. Chn tt c cc mc trong phn ny
(Diagram, Grid, SQL, Results).
Bc 13: Khi tt c cc mc ca Data Tool c chn, ta ko cc bng Title Author
v Authors vo khung diagram ca Data Tools. Sau ta phi kim tra cc lin kt ca
cc bng: bng Titles c lin kt vi bng Title Author bi trng ISBN khng? Bng
Title Author c lin kt vi bng Authors bi trng Au_ID khng? Nu khng c cc
mi lin kt ny ta phi chn ng trng trong bng Title Author v ko chng vo
trng tng ng trong 2 bng Titles v Authors.
Bc 14: to ra cu truy vn, ta nh du chn vo trng PubID, Title trong bng
Titles; trng Author trong bng Authors. K tip, kim tra khung Grid ta thy c mt
dng c du * (nh hnh di) biu th l ta chn tt c cc trng ca tt c cc
bng. Ta khng cn chn tt c thng tin, do ta nhp vo dng c du * v bm
phm Delete xa chng. Lc trong khung SQL ta thy c cu SQL sau:
SELECT Titles.PubID AS Expr1, Titles.Title AS Expr2,
Authors.Author AS Expr3
FROM Titles, `Title Author`, Authors
WHERE Titles.ISBN = `Title Author`.ISBN AND
`Title Author`.Au_ID = Authors.Au_ID

Trang 97

TT. Visual Basic


Hnh VII.1: SQL Builder
Bc 15: Chn cu SQL hin th bn trn ri nhp Edit\Copy.
Bc 16: Nhp p tr li vo Data Environment, nhp chut phi vo command con
c v chn PROPERTIES trn menu. Sau i tn ca command trong mc
General thnh Titles. Chn Source Data l SQL Command; sau dn ni dung cu
SQL copy trn vo khung nhp cu SQL (chn Edit\Paste).
Bc 17: Chn mc RELATION , ta thy trng PubID ca c hai bng Publishers v
Titles c hin th. Nhp nt ADD xc nh lin kt gia cu command cha v
command con.
Bc 18: ng cc ca s v lu d n li.
XY DNG GIAO DIN CHNG TRNH
Bc 19: Thm vo mt iu khin vo d n bng cch chn Project\Components
trn menu; tm n mc Microsoft Hierachial Flexgrid Control 6.0 (OLEDB). nh
du ty chn ny v nhp OK.
Bc 20: M Form1, to giao din cho chng trnh nh dng sau (hnh bn di):
Item 1: Label
Name: lblCompany
Caption: Company Name
Item 2: TextBox
Name: txtCompany
Text: micro
Item 3: CommandButton
Name: cmdGO
Caption: GO
Default: TRUE
Item 4: Hierarchial FlexGrid
Name: grdTitles
AllowUserResizing: 1-flexResizeColumns
DataSource: DataEnvironment1
DataMember: Publishers
FixedCols: 0

Hnh VII.2: Giao din ng dng

Trang 98

TT. Visual Basic


Bc 21: Nhp chut vo phi vo Hierarachical FlexGrid trn Form1, hp thoi
thuc tnh ca Hierarachical c m ra. Chn mc BANDS trong hp thoi ny.
Chn Band0 (Publishers) sau khng nh du vo trng PubID (vi tn l Expr1)
n khng hin th khi thc hin cu SQL. Cng vy, khng nh du vo trng
PubID ca Band1 (hnh di):

Hnh VII.3: Chn trng hin th trn li


Bc 22: i tn ca cc ct trong Band1 t Expr2, Expr3 thnh Title v Author bng
cch: Nhp chut 2 ln vo mc cn i tn trong Column Caption, nhp tn mi vo;
sau chn OK.
Bc 23: Mc ch ca chng trnh ny l: Khi chng trnh thc thi, trong TextBox
c mt t l micro, t c ngh tm kim. Khi nhp chut vo nt nhn; on vn
bn trong TextBox c dng thc thi cu SQL Publishers; cu SQL ny s truy
tm tt c cc cng ty m tn ca chng cha chui c nhp vo trong TextBox; kt
qu tr v c hin th trn li. Do , ta s x l s kin cmdGO_Click bng on
m sau:
MousePointer = vbHourglass
With DataEnvironment1
.rsPublishers.Close
.Publishers "%" & txtCompany.Text & "%"
End With
' Thiet lap tren luoi
Set grdTitles.DataSource = DataEnvironment1
grdTitles.CollapseAll
MousePointer = vbDefault
Bc 24: Lu d n v chy chng trnh. S dng micro tm kim (ta c th th
vi t khc nh: hill hay mill)
TO BO CO (REPORT)
Trang 99

TT. Visual Basic


Bc 25: Nu Data Report Designer khng hin th di menu PROJECT, m hp
thoi COMPONENTS, chn Data Report Designer trong mc chn Designers. Sau
ta thm Data Report Designer vo d n bng cch chn PROJECT\ADD DATA
REPORT trn menu.
Bc 26: Lin kt Data Report Designer vi Data Environment nh vic thit lp
thuc tnh DataSource ca Data Report l DataEnvirronment1 v thuc tnh
DataMember l Publishers.
Bc 27: Nhp chut phi trn Data Report Designer v chn RETRIEVE
STRUCTURE trn menu. Mt hp thoi xc nhn hin ln v ta chn YES.
Bc 28: Ta nhn thy trn report gm cc phn: report header, page header,
publisher information, title information, page footer, v report footer.
Bc 29: Chn phn Report Header, trong phn ny, thm mt Report Label vo, t
Caption l Book Report; ta c th i Font ch v kch thc Font tng ng.
Bc 30: Chn Group header, trong phn ny thm mt Report TextBox vo; t
thuc tnh DataMember l Publishers v DataField l Name.
Bc 31: Chn phn Detail ca Report. Trong phn ny, thm 2 Report TextBox vo,
t 2 iu khin ny cnh nhau trong phn Detail; chn TextBox th nht v t thuc
tnh DataMember l Titles v DataField l Expr2, i vi TextBox th hai:
DataMember: Titles, DataField: Expr3.
Bc 32: Lu d n li.
Bc 33: Chn Form1 trong mi trng son tho; to mt menu trong Form1 bng
cch chn Tools\Menu Editor; trong Menu Editor, to mt Report menu vi cc phn
t l Preview v Print vi cc thuc tnh sau:
Item 1 Menu
Name: mnuReport
Caption: Report
Item 2 Menu
Name: mnuPreview
Caption: Preview
Item 3 Menu
Name: mnuPrint
Caption: Print
Bc 34: Ta c th xem bo co trc khi in nh hm Show ca i tng Report.
Trong hm x l s kin mnuPreview, thm on m sau:
DataReport1.Show
Bc 35: In bo co c thc hin nh hm PrintReport ca i tng Report. Trong
hm x l s kin mnuPrint, thm on m sau:
DataReport1.PrintReport
Bc 36: Lu v chy chng trnh. Th hin th v in report.

Trang 100

TT. Visual Basic

Bi 7-2
BIU MU NHP LIU VI DATA ENVIRONMENT
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?

Hnh VII.4: To Connection


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

TT. Visual Basic


o Tr li giao din DED, ta c:

Hnh VII.5: i
tng Command

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 VII.6: Kt qu thc thi ng dng


Trang 102

TT. Visual Basic


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:

Hnh VII.7: Giao din y


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

TT. Visual Basic


End With
Me.Refresh
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.

II. BI TP T LM
1) S dng DataEnviroment, thit k Form nhp liu cho bng THangHoa (hnh di).
y thay v hin th MaLoai, ta li hin th TenLoai:

Hnh VII.8: Form nhp liu


2) S dng DataEnviroment, thit k Form nhp liu cho bng TNhanVien.
3) S dng DataEnviroment, thit k Form cho php nhp (sa, xa) thng tin v mt
pht sinh v mt mt hng no trong ngy. Lu : Trng STT l kiu
AutoNumber (Access), Ngay: ly ngy h thng (hm Now).

Trang 104

TT. Visual Basic

Chng 8

THIT LP BO CO V XUT
THNG TIN

Mc tiu:
Chng ny nhm gii thiu cho sinh vin cch thc to bo biu,
thnh phn khng th thiu trong cc ng dng c s d liu.
Hc xong chng ny, sinh vin phi nm bt c cc vn sau:
S dng Data Report to cc loi bo biu sau:
- Bo co dng bnh thng.
- Bo co c phn nhm d liu.
- Bo co dng phn cp.
Kin thc c lin quan:
- Gio trnh Visual Basic, chng 13.
Ti liu tham kho:
- Visual Basic 6.0 v Lp trnh c s d liu - Chng 21, trang 636
- Nguyn Ngc Mai (ch bin) Nh xut bn Gio dc - 2000.
- T hc Lp trnh c s d liu vi Visual Basic 6.0 trong 21 ngy
(T1) - Chng 5, trang 183 - Nguyn nh T (ch bin) - Nh xut bn Gio
dc - 2001.

Trang 105

TT. Visual Basic

I. HNG DN
TO KT NI VI C S D LIU

Bc 1: To mt d n trong th mc Basic\Bt8-1.
Bc 2: to mt report, ta phi xc nh d liu no s s dng trong report, l
nhim v ca Data Environment.
Ta chn mt Data Environment vo d n nh vic chn Project\More ActiveX
Designer\Data Environment.
Ta s dng Data Environment lu tr cc tp d liu s dng trong report.
Bc 3: Nhp p vo trnh thit k Data Environmenr trong ca s Project Explorer
m trnh thit k. Sau nhp vo Connection1 v thay i thuc tnh Name ca n
thnh cnHangHoa; nhp chut phi vo cnHangHoa v chn mc Properties, hp thoi
Properties hin ra:

Hnh VIII.1: To ni kt n CSDL


Bc 4: Ta s to kt ni n c s d liu DBHH.MDB c sn trn my. Do ta
nhp nt Next sau khi chn Microsoft OLEDB Provider for ODBC. Trong ty chn
ny ta chn mc Use data source name; ri chn ngun d liu DBHH to ra t
trc .
Bc 5: Nhp nt Test Connection kim tra xem ni kt c thnh cng hay khng?
TO I TNG COMMAND
Bc 6: Sau khi xc nh Data Environment Connection, ta c th xc nh
Command, Command lu kt ni ti bng d liu v nhng trng s c dng trong
Trang 106

TT. Visual Basic


report. Nhp nt phi chut vo Command trong ca s thit k Data Environment v
chn mc Add Command, mt hp thoi xut hin nh hnh bn di.
Bc 7: Thit lp thuc tnh Name ca Command l comHangHoa, chn Connection
l cnHangHoa. Trong phn DataBase Object chn kiu ly d liu l Table; sau
trong ComboBox Object Name chn Table THANGHOA.

Hnh VIII.2: i tng Command


XY DNG MT BO CO (REPORT) N GIN
Bc 8: By gi ta s to mt bo co hin th d liu xc nh trong Data
Environment. lm iu ny, nhp phi chut vo Project trong ca s Project
Explorer; ri chn Add\Data Report; sau t tn ca report ny li l drHangHoa,
DataSource: DataEnvironment1, DataMember: cnHangHoa (trong ca s Properties).
Bc k tip ta ng tt c cc ca s ngoi tr 2 ca s DataEnvironment v
drHangHoa.
Bc 9: Bc ny ch n gin l nhp chn v ko cc trng t Data Environment,
mc command comHangHoa vo Data Report. i vi report ny, nhp chn v ko
cc trng tn MaHang, TenHang, DVTinh, MaLoai. Khi thc hin xong, mn hnh
tng t nh hnh di:

Trang 107

TT. Visual Basic

Hnh VIII.3: Thit k Report


y, ta ch ko chn cc trng vo mc Detail ca report, cn cc tiu ct
(tng ng vi cc trng); ta t chng trong phn Page Header ca report. C mt
ghi nhn rng, khi ta ko th cc trng vo trong phn Detail ca report, mt report
Label cha tn trng v mt report TextBox cho php nhp liu xut hin trong phn
Detail. Do , trong phn Detail ta ch gi li TextBox, cn report Label ta chuyn
chng ln phn Page Header. V vy coi nh ta thit lp xong phn hin th ca
report. Vn cn li ch l trang tr sao cho t yu cu v mt thm m.
CHN CC TIU U TRANG V CUI TRANG
Bc 10: Tt c cc report hon chnh u phi c mt s c im no ; nht l
report phi c mt tn, s trang ca report c hin th r rng. Cc mc ny t tt
nht l trong phn Report Header v Report Footer.
Ta cn phi thm Report Header v Report Footer vo trong report ca mnh;
n gin ch cn nhp chut phi vo report v chn Show Report Header | Footer. Hai
phn mi ny s c to ra.
Bc 11: Thm mt report Label vo phn Header ca report; sau thay i thuc
tnh Caption ca n thnh Chi tit hng ha cc loi. y c th chn Font ch vi
kch thc ln (VD: 20) tiu ca report c hin th ln.

Trang 108

TT. Visual Basic


Bc 12: Nhp chut phi vo mc report Footer v chn ty chn Insert Control |
Current Page Number chn s trang vo; tip n chn Insert Control | Total
Number of Pages chn tng s trang ca report.
Bc 13: n y, phn thit k report coi nh hon tt; ta lu report li.
Bc 14: To giao din cho chng trnh nh sau:

Hnh VIII.4: Giao din chnh

Bc 15: Khi chn Chi tit hng ha, report va thc hin s c hin th; do ta
x l s kin ny nh sau:
Private Sub mnuChiTiet_Click()
drHangHoa.Show
End Sub
Bc 16: Lu d n v chy chng trnh.
TO REPORT BNG CU LNH SQL
Bc 17: Data Report cho php ta to cc report bng cch s dng cc cu lnh SQL
nh l nn tng ca i tng Command. Trong phn ny ta s s dng cu lnh
SELECT ly d liu t cc bng TPHATSINH, THANGHOA, TLOAIHANG v
chn nhng trng sau: PhatSinh.SOTT, TPhatSinh.NGAY, TPhatSinh.LOAI,
TPhatSinh.FIEU,
TPhatSinh.HTEN,
TPhatSinh.SOLG,
TPhatSinh.DGIA,
THangHoa.TENHANG, TLoaiHang.TENLOAI.
Bc 18: Chn mc Data Enviroment1 trong Project Explorer, sau nhp chut phi
vo i tng cnHangHoa, chn Add Command. Ta in vo cc thuc tnh nh hnh
di:

Trang 109

TT. Visual Basic

Hnh VIII.5: Command l SQL


Bc 19: Trong mc Source of Data, thay v chn DatabaseObject nh bi trc,
y ta chn SQL Statement v nhp cu SQL tng ng vo, ri chn OK.
Bc 20: Thm mt DataReport vo d n vi Name: drHHPS, DataSource:
DataEnvironment, DataMember: comHHPS. Sau ko th cc trng tng ng vo
report ri trang tr li chng.
Bc 21: Lu report li. Ta s gi thc thi report ny trong phn x l tnh hung khi
chn mc Hng Ha Pht Sinh ca menu.
Private Sub mnuHHPS_Click()
drHHPS.Show
End Sub
Bc 22: Lu d n v chy chng trnh.
NHM D LIU
Bc 23: Ta c th nhm d liu li theo mt ni dung no . y, trong
DataEnvironment1, thm vo mt i tng Command mi tn comHHNgay. Trong
phn ny ta s ly d liu t cc bng TPhatSinh, ThangHoa, TLoaiHang v ly ra cc
trng TPhatSinh.SOTT, TPhatSinh.NGAY, TPhatSinh.LOAI, TPhatSinh.FIEU,
TPhatSinh.HTEN, TPhatSinh.SOLG, TPhatSinh.DGIA, THangHoa.TENHANG,
TLoaiHang.TENLOAI.
Bc 24: Ta s nhm d liu trn li theo tng ngy, do ta lm theo cc bc nh
trong hnh di:
Trang 110

TT. Visual Basic

Hnh VIII.6: Nhm d liu


Chn Grouping, chn trng nhm li l Ngay; sau nhp OK.
Bc 25: Trong phn Aggregates, ta in thng tin nh hnh:

Hnh VIII.8: Hm thao tc trn nhm

y ta s dng cc hm tp hp tnh tng s lng bn c trong ngy.


Do ta chn mc Aggregate, chn mc thch hp v nhp Add thm vo mt hm
tnh trn nhm.
Bc 25: Chn mt DataReport mi vo tn drHHNgay, DataSource:
DataEnvironment1, DataMember: comHHNgay_Grouping. Sau nhp chut phi
vo Report v chn mc Show Group Header | Footer.
Bc 26: Ta ko trng ngy trong phn Sumary Fields in comHHNgay_Grouping
vo phn Group Header. Trong phn Detail ta ko th cc trng khc. Cn phn
Group_Header, ta li ko TongSolg v t vo.
Trang 111

TT. Visual Basic

Hnh VIII.9: Thit k Report


Bc 27: Lu report li. Ta s gi report hin th khi nhp vo mc Phat sinh theo
ngay trn menu:
Private Sub mnuPsngay_Click()
drHHNgay.Show
End Sub
Bc 28: Lu d n li, chy chng trnh, ta c th in th ra giy.
Bc 29: Cn mt report na ta s thc hin vi iu kin l tm cc pht sinh hng
ha theo tng nhn vin (tng t nh report trn) v ta s gi thc thi mc menu
cn li.
Bc 30: X l s kin mnu_Thoat:
Private Sub mnuThoat_Click()
End
End Sub

Trang 112

TT. Visual Basic

II. BI TP T LM
1)

To bo co (Report) cho php in ra giy thng tin ca cc hng ha, cc thng


tin ny bao gm: M hng ha, tn hng ha, n v tnh, tn loi hng tng
ng.

2)

To bo co (Report) cho php in ra giy thng tin chi tit v cc pht sinh theo
tng ngy, cc thng tin ny bao gm: Ngy lp, loi, Fieu, h tn khch hng, l
do, s lng, n gi, thnh tin (vi Thnh tin = S lng * n gi), tn hng
ha v h tn nhn vin tng ng. (Hnh VIII.10)

Hnh VIII.10: Pht sinh theo ngy


3)

To bo co (Report) cho php in ra giy thng tin chi tit v cc pht sinh theo
tng nhn vin, cc thng tin ny bao gm: Ngy lp, loi, Fieu, h tn khch
hng, l do, thnh tin (vi Thnh tin = S lng * n gi), tn hng ha v
loi hng tng ng. (Hnh di)

Trang 113

TT. Visual Basic

Hnh VIII.11: Pht sinh theo nhn vin

LI KT
Chng Thit lp bo co cng l chng kt thc ca gio
trnh TT. 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 114

You might also like