1. Microsoft Access 2000 Ch ng 9: Ng n ng Visual Basic
CH NG IX: NGÔN NG VISUAL BASIC
Ch ng này gi i thi u n các b n nh ng khái ni m c b n c a ngôn ng l p
trình Visual Basic, cách s d ng ngôn ng Visual Basic u khi n các bi n c
trên các bi u m u/báo cáo và cách t o ra m t hàm riêng.
9.1. Visual Basic (VB) là gì ?
VISUAL BASIC là ngôn ng l p trình cho MISCROSOFT ACCESS. B n s
ng nó y nh cách s d ng t p l nh (macro) có th liên k t các i t ng trong
ng d ng c a b n l i v i nhau nh m t o thành m t h th ng ch ng trình m ch l c.
m khác bi t là visual basic cung c p nhi u s c m nh và m m d o h n là t p
nh. T ng t nh t p l nh, visual basic c g n v i các i t ng trong CSDL.
Trong MICROSOFT ACCESS, b n có th th c hi n nhi u công vi c khác nhau
ng t p l nh ho c VB. Do ó v n t ra là ch n công c nào s d ng? S
ch n l a này tùy thu c vào công vi c c a chúng ta là s mu n làm cái gì.
Visual basic là m t ngôn ng th o ch ng hoàn thi n và theo ki u u khi n
i s ki n (event driven programming language) nh ng l i r t gi ng ngôn ng th o
ch ng có c u trúc thông th ng. N u b n ã t ng vi t ch ng trình b ng ngôn
ng Pascal ho c C. b n s th y l i trong VB t t c nh ng c u trúc u khi n mà
n ã t ng s d ng ch ng h n nh :
C u trúc l p (Loops).
C u trúc r nhánh IF … THEN … ELSE.
C u trúc ch n l a SELECT CASE.
Hàm (function) và th t c (procedure).
9.2. u m c a VB
1. cho ng d ng c a b n d dàng b o trì h n: b i vì t p l nh là m t i
ng hoàn toàn tách riêng l v i các bi u m u và các báo cáo s d ng nó, m t
ng d ng ch a m t s l n các t p l nh trong các bi n c c a các bi u m u và
các báo cáo s gây cho b n khó kh n khi b o trì. Ng c l i khi s d ng VB
lý các bi n c ó, n u ph i di chuy n các bi u m u ho c báo cáo sang m t
CSDL khác thì các n l nh này c ng s mang i theo cùng.
2. T o ra các hàm c a riêng mình: S d ng Visual Basic ta c ng có th t o ra
các hàm riêng c a mình dùng th c hi n các phép tính v t quá kh n ng c a
t bi u th c ho c thay th m t bi u th c quá ph c t p mà b n vi t trong bên
trong ng d ng c a mình. Ví d hàm chuy n i c con s chuy n thành ch ,…
3. Che i các thông báo l i: Khi có m t s c ngoài ý mu n xãy ra trong khi ng
ng c a b n ang v n hành và Microsoft Access hi n th thông báo l i, thông
báo này s làm cho ng i s d ng khó hi u c bi t khi h ch a quen s d ng
Microsoft Access. S d ng Visual basic, b n có th phát hi n các l i này khi nó
y ra và s hi n th thông báo l i c a riêng mình tu thu c vào ng d ng.
4. T o ho c s a i các i t ng: Nh chúng ta ã bi t ph n thi t k table,
query, form, report, … mu n thay i các c tính, b n ph i m i t ng ch
thi t k , còn VB cho phép ta thay i ngay khi ch ng trình ang ch y b ng
cách vi t l nh.
5. Th c hi n các hành ng nâng c p h th ng: Dùng l nh RunApp th c hi n
các l nh c a ng d ng khác.
6. Truy c p vào các b ng ghi (record): Th c hi n các thao tác trên Record nh
thêm, s a, xoá các record.
Trung t m Tin h c- HAG Trang 104
2. Microsoft Access 2000 Ch ng 9: Ng n ng Visual Basic
9.3. Các thành ph n ch y u c a Acces basic
Access basic là ngôn ng th o ch ng hoàn ch nh, nó h tr ph ng pháp
th o ch ng có c u trúc mà b n ã th y trong ngôn ng Microsoft Visual Basic và
nh ng th o ch ng có c u trúc khác. Nh ng thành ph n ch y u c a Access basic:
Bi n (variables).
Th t c hàm (function procedure).
Các c u trúc ch n l a.
Các c u trúc l p c a Access basic.
u khi n s thi hành ch ng trình.
9.3.1. Bi n
Bi n dùng l u tr nh ng giá tr t m th i khi th c hi n các phép tính trong
ch ng trình, có th b n mu n tính nhi u giá tr khác nhau, so sánh chúng r i th c
hi n.
1. Khai báo bi n: Dim tên_bi n [As ki u_d _li u]
Ví d : Dim nguyen, n As Integer.
2. Ph m vi và th i gian s ng c a bi n
Ph m vi s d ng c a bi n: tùy thu c vào vi c b n khai báo bi n âu mà
ph m vi s d ng bi n ó s theo m t trong ba tình tr ng sau ây:
- Bi n c c b (local variable): ch c nh n di n trong ph m vi th t c khai
báo bi n ó.
Ví d : Các bi n P1, P2, P3
- Bi n thu c n th (Module variable): thì c dùng chung cho t t c nh ng
th t c thu c n th ó. Nh ng th t c thu c các n th khác không th tham
chi u n bi n này c.
Ví d : Các bi n Md1, Md2
- Bi n toàn c c (Global variable): Là bi n có ph m vi s d ng r ng nh t. Giá tr
a m t bi n toàn c c có th tham chi u t b t k m t th t c nào thu c h th ng
ng d ng.
Ví d : Các bi n A, B.
Module1 Module2
Procedure 1 có th truy xu t
Global A Global B
các bi n A, B, Md1 và P1
Dim Md1 Dim Md2
Không truy xu t c các bi n
Procedure 1 Md2, P3 và P2
Procedure 3
Dim P1 Dim P3
Procedure 3 có th truy xu t
các bi n A, B, Md2 và P3
Procedure 2 Không truy xu t c các bi n
Dim P2
Md1, P1 và P2
Procedure 2 có th truy xu t
các bi n A, B, Md1 và P2
Không truy xu t c các bi n
Md2, P1 và P3
Trung t m Tin h c- HAG Trang 105
3. Microsoft Access 2000 Ch ng 9: Ng n ng Visual Basic
9.3.2. T o th t c bi n c
Cách vi t l nh bên trong th t c bi n c : Khi vi t l nh cho th t c bi n c thì
Access m ch ng trình Basic cho chúng ta vi t l nh
Th t c là các n l nh mà b n ã vi t b ng ngôn ng Visual Basic. Bên trong
t th t c s ch a ng m t dãy các câu l nh c a Visual Basic th c hi n m t
hành ng ho c tính toán m t giá tr nào ó. M t th t c bi n c là m t th t c s
c ch y áp l i cho m t bi n c .
Ch ng h n ta có nút l nh trong form khi ng i s d ng click vào nút l nh thì
form s óng form, ta nói click mouse là bi n c (event) hay s ki n. Ta vi t l nh
óng Form t c ta t o th t c x lý bi n c .
Th t c bi n c là m t ph n trong công vi c Form ho c Report. Do ó b c
u tiên là chúng ta ph i t o ra form và các ô u khi n trên form này.
9.3.3. Th t c và n th Visual basic
Th t c hàm (function procedure): T ng t v i nh ngh a c a hàm trong các
ngôn ng th o ch ng khác, th t c hàm c a Visual basic ch hoàn tr m t giá tr
duy nh t t i m tham chi u n hàm ó.
1. Cú pháp c a th t c:
[Public|Private] [Static] Sub Tên_Th _t c([tham s ])
Các l nh th c hi n
End Sub
Trong ó:
Tham s : Các tham s g i vào cho th t c dùng tính toán bên trong.
L nh th c hi n: Dãy các câu l nh Visual Basic mà ta mu n thi hành khi th
c ho c hàm c g i.
Giá tr tr v : Giá tr d li u tr v sau khi m t dãy các câu l nh bên trong c a
hàm ã c tính toán xong.
2. Khai báo các tham s trong th t c/hàm:
[ByVal I ByRef] <tên_bi n> As <ki u_DL> [=giá tr m c nh]
3. Cú pháp g i m t th t c:
Tên_Th _t c(Danh sách tham s )
ho c Call Tên_Th _t c(Danh sách tham s )
4. Cú pháp khai báo hàm
[Public|Private] [Static] Function Tên_hàm([tham s ]) As <ki u_DL>
<l nh th c hi n>
Tên_hàm= giá tr tr v
End Function
Sau khi th c hi n các câu l nh hàm cho ta k t qu là giá tr tr v .
Ví d : Hàm chuy n ký t s thành chu i c nh ngh a nh sau:
Function SoThanhChuoi(i As Integer) As String
Dim str As String
Select Case i
Case 1
str = "Mot"
Case 2
Trung t m Tin h c- HAG Trang 106
4. Microsoft Access 2000 Ch ng 9: Ng n ng Visual Basic
str = "Hai"
Case 3
str = "Ba"
Case 4
str = "Bon"
Case 5
str = "Nam"
Case 6
str = "Sau"
Case 7
str = "Bay"
Case 8
str = "Tam"
Case 9
str = "Chin"
End Select
sothanhchui = str
End Function
5. S d ng các tham s bi n i
Khi g i n hàm chúng ta ph i truy n y các tham s cho hàm n u không
thì h th ng s báo l i. Tuy nhiên Visual Basic cung c p cho chúng ta 2 cách s
ng các tham s thay i.
Tham s có th b qua
Dùng t khóa Optional tr c m i tham s n u ta mu n cho tham s ó có th
qua. Khi g i hàm trong ó có khai báo Optional thì ta có th truy n ho c không
truy n tham s . N u không truy n thì hàm s l y giá tr nh s n trong nh ngh a
hàm i v i tham s có th b qua.
l ng tham s tùy ý
s d ng s l ng tham s tùy ý có ki u là Variant (ki u bi n) chúng ta ph i
d ng t khóa ParamArray. M c ích khi s d ng cách này là chúng ta ch a xác
nh c s g i vào bao nhiêu tham s cho th t c khi ch y.
6. M ng (Array)
Dùng m t m ng ch n m t dãy các bi n cùng tên nhau và s d ng ch s
ch ra m t ph n t c a m ng. T t c các ph n t trong m t m ng ph i có cùng
t ki u d li u. D nhiên khi mãng có ki u d li u thay i thì các ph n t trong m t
ng có th ch a nhi u lo i d li u khác nhau.
Khai báo m ng có kích th c c nh:
- Dim mangnguyen(10) As integer
- Dim mangsothuc(15) As Double
Ch s u tiên c a m ng là 0. Nh ng ta có th ch nh ch s u tiên.
- Dim mangnguyen(10) As integer
- Dim mangsothuc(15) As Double
Khai báo m ng nhi u chi u:
- Static mangmatran(9,9) As Double
- Ho c Static mangmatran(0 to 9,0 to 9) As Double
Tham chi u các ph n t trên m ng: ch nh m t ph n t nào ó trên
ng ta s d ng ch s c a m ng.
Trung t m Tin h c- HAG Trang 107
5. Microsoft Access 2000 Ch ng 9: Ng n ng Visual Basic
Ví d : Gán giá tr cho t ng ph n t c a m ng nguyên là 10.
Dim nguyen(1 to 5) As Integer
Dim I As Integer
For I=1 to 5
nguyen(I) = 10
Next I
9.4. Các c u trúc u khi n c a ngôn ng Basic
9.4.1. C u trúc quy t nh (Decision structures)
1. C u trúc IF … THEN:
B n s d ng c u trúc If … Then th c hi n m t hay nhi u l nh có u ki n.
n có th dùng m t trong hai ph ng pháp sau di n t c u trúc này:
- L nh trên m t dòng: IF u_ki n THEN th c_hi n_l nh
Ví d : If 6>=5 then Msgbox“sáu l n h n ho c b ng n m”
- L nh trên nhi u dòng:
IF u_ki n THEN
th c_hi n_l nh_1
th c_hi n_l nh_2
…
ENDIF
Ví d :
IF 6>=5 THEN
Msgbox “sáu l n h n ho c b ng n m”
ENDIF
M c u_ki n trong c u trúc IF là m t bi u th c mà giá tr là:
- Không ( u ki n sai-False) khi ó l nh không th c hi n.
- Khác không ( u ki n úng-True) khi ó l nh c th c hi n.
2. C u trúc IF … THEN … ELSE
Cú pháp:
IF u_ki n THEN
[statements]
[ELSEIF condition-n Then
[elseifstatements] ...
[ELSE
[elsestatements]]
END IF
3. C u trúc SELECT CASE
Cú pháp:
SELECT CASE bi u_th c_ki m_ nh
[CASE danh_sách_giá_tr _1:
[nhóm_l nh_1]]
[CASE danh_sách_giá_tr _2:
[nhóm_l nh_2]]
…
[CASE ELSE
[nhóm_l nh_n]]
Trung t m Tin h c- HAG Trang 108
6. Microsoft Access 2000 Ch ng 9: Ng n ng Visual Basic
i danh_sách_giá_tr là m t danh sách g m m t hay nhi u giá tr kh h u c a
bi u th c ki m nh và c phân cách nhau b i d u ch m ph y ”;” trong tr ng
p m t dãy giá tr liên ti p, b n có th dùng t khoá TO.
Ví d : CASE 1 TO 5
i nhóm_l nh có th ch a m t hay nhi u l nh (ho c không có) mà Access
basic ph i thi hành khi bi u th c ki m nh có giá tr n m trong danh sách giá tr
ng ng. Trong tr ng h p có nhi u câu CASE tho u ki n ki m nh thì ch có
nhóm l nh ng v i câu CASE u tiên th a u ki n ki m nh c thi hành mà
thôi. Trong tr ng h p không m t câu CASE nào tho u_ki n_ki m_ nh thì
access basic s thi hành nhóm l nh qui nh câu CASE ELSE.
9.4.2. C u trúc l p
p l i m t nhóm l nh trong khi m t u ki n úng (While) ho c cho n khi
t u ki n sai (Until).
Do [{While | Until} u_ki n_ki m_ nh]
[Nhóm l nh]
[Exit Do]
[Nhóm l nh]
Loop
Ho c:
Do
[Nhóm l nh]
[Exit Do]
[Nhóm l nh]
Loop [{While | Until} u_ki n_ki m_ nh
2. C u trúc For … Next
Cú pháp:
FOR bi n=giá_tr u TO giá_tr _cu i [STEP gia_s ]
Nhóm l nh
NEXT
Gia s có th là s d ng ho c s âm.
Ví d : Tính t ng các s nguyên t 1 n 10:
Sub tong10()
Dim tong, I As Integer
Tong=0
For I=1 to 10
Tong = tong + i
Next
Msgbox ”T ng 10 s nguyên là: ”&tong
End sub
Ho c:
Sub tong10()
Dim tong, I As Integer
Tong=0
For I=10 to 1 step -1
Tong = tong + i
Next
Msgbox ”T ng 10 s nguyên là: ”&tong
End sub
Trung t m Tin h c- HAG Trang 109
7. Microsoft Access 2000 Ch ng 9: Ng n ng Visual Basic
9.4.3. u khi n s thi hành ch ng trình
C u trúc u khi n l ng nhau: B n có th vi t m t c u trúc u khi n l ng trong
u trúc u khi n khác.
Thoát kh i c u trúc u khi n: B n có th thoát kh i m t vòng l p ho c thoát
kh i m t th t c Sub, Function b ng cách dùng l nh Exit.
Ví d :
- Thoát kh i vòng l p ForExit For.
- Thoát kh i m t th t c sub ho c function: Exit Sub
9.4.4. S d ng các hàm
Khi ta ã xây d ng xong hoàn ch nh m t hàm thì ta có th g i s d ng nó c
i các v trí sau:
Trong các th t c ho c các hàm khác.
M t bi u th c nh ngh a tính toán trong m t truy v n, m t u khi n trên
Form (bi u m u) ho c Report.
Làm u ki n cho truy v n ho c t p l nh.
9.5. Bi n bi u th cho CSDL (Database variables):
t c các hàm mà b n s d ng trong vi c m b ng d ki n (table), b ng truy
n (query) trong Access Basic u òi h i qui nh m t i t ng c a CSDL. B n
khai báo bi n i t ng thu c ki u Database theo cùng m t cách gi ng nh khai báo
t c nh ng i t ng khác nh ng tr c khi khai báo m t bi n CSDL b n ph i khai
báo c vùng làm vi c dành cho CSDL ó.
Ví d : bi n tham chi u n CSDL ang làm vi c hi n hành có th nh ngh a
nh sau:
Dim Ws as WorkSpace ‘bi n i t ng WorkSpace
Dim DB as Database ‘bi n i t ng Database
Set ws = DBEngine.Workspaces(0) ‘vùng làm vi c hi n hành
Set DB = Ws.Databases(0) ‘CSDL hi n hành
Ho c n gi n h n:
Dim DB As Database
Set DB= DBEngine.Workspaces(0).Databases(0) ‘CSDL hi n hành
Ho c:
Dim DB as Database
Set DB=CurrentDB()
9.6. it ng và bi n bi u th các it ng:
Nh ta ã bi t ph n c b n các thao tác t o, s a, xóa các i t ng table,
query, form, report ch b ng thao tác click mouse và còn l thu c vào cách x trí c a
ng i thao tác. Trong ph n này chúng ta bàn v cách vi t l nh tùy theo tình hu ng
mà ch ng trình s x lý.
Ch nh các i t ng thu c tính và ph ng th c:
Các i t ng access c phân lo i ra thành các t p h p, và các t p h p này
c nhóm l i theo t ng i t ng cùng m t lo i. T p h p các form là m t nhóm
các form ang m trong c s d li u. M i m t form l i có t p h p các u khi n là
các u khi n có trên form. M i m t u khi n trên form l i là m t i t ng, và ta
có th ch n b t k m t i t ng xuyên su t qua t p h p mà i t ng ó thu c
vào.
Trung t m Tin h c- HAG Trang 110
8. Microsoft Access 2000 Ch ng 9: Ng n ng Visual Basic
Ví d : ch nh n m t form trong t p h p các form. Visual basic a ra 3
cách ch nh n m t i t ng:
Form!<tên_form> ho c Form(“<tên_form>”) ho c Form(0)
Trong ó cách dùng ch nh form theo th t mà nó cm :0 ch form
ã m ra u tiên, 1 ch nh form m ra th hai,…
Cách tham chi u n các i t ng c a CSDL:
it ng tham chi u Qui nh tham chi u
Form Forms![tên_form]
Thu c tính c a Form Forms![tên_ form].[thu c_tính]
u khi n trong Forms![tên_ form].[Tên_ u_khi n]
Tính ch t ô u khi n thu c Form Forms![tên_ form].[Tên_ u_khi n].[thu c_tính]
Gán giá tr cho bi n i t ng: Dùng l nh SET liên k t i t ng v i m t
i t ng ã có c a CSDL.
9.7. Bi n bi u th i t ng là m t t p h p m u tin (Recordset)
9.7.1. Phân lo i: Có 3 lo i recordset:
Ki u it ng S m u tin c a it ng ki n c a it ng
Table Có th thay i Có th thay i
Dynaset Có th thay i Có th thay i
SnapShot nh/ không thay i không thay i
Bi n Recordset thu c lo i Table: bi n lo i này h tr h u h t các thao tác thêm
(add), s a (update), xoá (delete) và cho bi t tình tr ng m i nh t c a b ng d li u
(table). Ch th c hi n trên CSDL hi n hành.
Cách m : SET bi n=CSDL.OpenRecordset(tên Table, DB_OPEN_TABLE)
Bi n Recordset thu c lo i Dynaset: bi n lo i này linh ho t h n lo i table.
Cách m : SET bi n=CSDL.OpenRecordset(tên Table, DB_OPEN_DYNASET)
Bi n Recordset thu c lo i Snapshot:
Cách m : SET bi n=CSDL.OpenRecordset(tên Table, DB_OPEN_SNAPSHOT)
9.7.2. X lý d ki n v i các bi n Recordset
1. Di chuy n t Record này n record khác
Ph ng th c Ý ngh a
MoveFirst Di chuy n v record u tiên
MoveNext Di chuy n v record k ti p. N u thu c tính EOF là True thì
MoveNext c th c hi n s xãy ra l i.
MovePrevious Di chuy n v record tr c ó. N u thu c tính BOF là True thì
MovePrevious c th c hi n s xãy ra l i.
MoveLast Di chuy n v record cu i cùng
u trúc c a m t t p h p m u tin (recordset):
BOF
RECORD 1
Trung t m Tin h c- HAG Trang 111
9. Microsoft Access 2000 Ch ng 9: Ng n ng Visual Basic
RECORD 2
RECORD 3
…
…
RECORD n
EOF
t bi n Recordset (lo i Table, Dynaset, ho c Snapshot) th ng có m t v trí
hi n hành c a nó, ngh a là ch n record hi n hành.
2. m nh ng m u tin c a bi n Recordset: RecordCount.
3. Tìm ki m m t m u tin c bi t
- Dùng ph ng th c Find:
Ph ng th c Ý ngh a
Tìm n Record u tiên trong nhóm nh ng record tho
FindFirst
tiêu chu n ã qui nh.
Tìm n Record k ti p record hi n hành trong nhóm
FindNext
nh ng record tho tiêu chu n ã qui nh.
Tìm n Record ngay tr c record hi n hành trong
FindPrevious
nhóm nh ng record tho tiêu chu n ã qui nh.
Tìm n Record cu i cùng trong nhóm nh ng record
FindLast
tho tiêu chu n ã qui nh.
- Dùng ph ng th c Seek: Tìm theo tiêu chu n so sánh. Các phép so sánh
m: =, >=, >, <, <=.
4. u ch nh nh ng m u tin (record) c a m t Recordset.
- u ch nh m u tin hi n hành c a Recordset:
+ B1: Di chuy n n record mu n s a.
+ B2: Dùng hành vi Edit (cho phép ch nh s a m u tin hi n hành).
+ B3: Th c hi n vi c ch nh s a.
+ B4: Dùng hành vi Update (l u l i nh ng thay i).
Ví d : Trong CSDL qu n lý hóa n u ch nh d li u c a các record có s
hóa n 015 thành 025.
Sub chinhhd()
Dim db As Database
Dim rs As Recordset
Set db = CurrentDb() 'gán bi n DB là m t csdl HI N HÀNH
Set rs = db.OpenRecordset("HOADON")
If Not rs.BOF Then
rs.MoveFirst
End If
Do Until rs.EOF
If rs!SOHD = "015" Then
rs.EditMode
rs!SOHD = "025"
Trung t m Tin h c- HAG Trang 112
10. Microsoft Access 2000 Ch ng 9: Ng n ng Visual Basic
rs.Update
End If
rs.MoveNext
Loop
rs.Close
End Sub
- Thêm m t m u tin vào Recordset.
+ B1: Dùng hành vi Addnew.
+ B2: Gán nh ng giá tr cho các field c a Recordset.
+ B3: Dùng hành vi Update (l u l i nh ng thay i).
VD:Thêm m t record vào b ng (table) HOADON:
Sub themRecord()
Dim db As Database
Dim rs As Recordset
Set db = CurrentDb() 'gán bi n DB là m t csdl HI N HÀNH
Set rs = db.OpenRecordset("HOADON")
rs.Addnew
rs!SOHD = "035”
rs!LOAIHD=”NHAP”
rs!NGAYHD=#30/12/99#
rs!MAKH=”CTB00011”
rs!MAKHO=”KH1”
rs!TRIGIA=100000
rs!THUE=5
rs.Update
rs.Close
End Sub
- m s record trong m t b ng: Dùng thu c tính RecordCount. mb o
tính chính xác tr c khi s d ng ta cho con tr v cu i b ng b ng cách s d ng
ph ng th c MoveLast.
- p x p d li u trong b ng: Dùng thu c tính Sort.
- c d li u: Dùng thu c tính Filter.
- S p x p: Dùng thu c tính Index.
- o bi n Recordset trên c s m t Form: Dùng l nh SET theo cú pháp sau:
SET Tên_bi n_Recordset = Forms![Tên_Form].RecordsetClone
Trung t m Tin h c- HAG Trang 113