Microsoft Access 2000 CH Ch NG IX: NGÔN NG ng 9: Ng n ng Visual Basic VISUAL BASIC Ch ng gi i thi u n 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 n bi n c bi u m u/báo cáo cách t o m t hàm riêng 9.1 Visual Basic (VB) ? VISUAL BASIC ngôn ng l p trình cho MISCROSOFT ACCESS B n s ng y nh cách s d ng t p l nh (macro) có th liên k t i t ng ng d ng c a b n l i v i nh m t o thành m t h th ng ch ng trình m ch l c m khác bi t visual basic cung c p nhi u s c m nh m m d o h n t p nh T ng t nh t p l nh, visual basic c g n v i i t ng CSDL Trong MICROSOFT ACCESS, b n có th th c hi n nhi u công vi c khác ng t p l nh ho c VB Do ó v n t ch n công c s d ng? S ch n l a tùy thu c vào công vi c c a s mu n làm Visual basic m t ngôn ng th o ch ng hoàn thi n theo ki u u 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 VB t t c nh ng c u trúc u 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) th t c (procedure) 9.2 u m c a VB cho ng d ng c a b n d dàng b o trì h n: b i t p l nh m t i ng hoàn toàn tách riêng l v i bi u m u báo cáo s d ng nó, m t ng d ng ch a m t s l n t p l nh bi n c c a bi u m u báo cáo s gây cho b n khó kh n b o trì Ng c l i s d ng VB lý bi n c ó, n u ph i di chuy n bi u m u ho c báo cáo sang m t CSDL khác n l nh c ng s mang i theo T o hàm c a riêng mình: S d ng Visual Basic ta c ng có th t o hàm riêng c a dùng th c hi n phép tính v t kh n ng c a t bi u th c ho c thay th m t bi u th c ph c t p mà b n vi t bên ng d ng c a Ví d hàm chuy n i c s chuy n thành ch ,… Che i thông báo l i: Khi có m t s c ý mu n xãy ng ng c a b n ang v n hành Microsoft Access hi n th thông báo l i, thông báo s làm cho ng i s d ng khó hi u c bi t h ch a quen s d ng Microsoft Access S d ng Visual basic, b n có th phát hi n l i y s hi n th thông báo l i c a riêng tu thu c vào ng d ng T o ho c s a i i t ng: Nh ã bi t ph n thi t k table, query, form, report, … mu n thay i c tính, b n ph i m i t ng ch thi t k , VB cho phép ta thay i ch ng trình ang ch y b ng cách vi t l nh Th c hi n hành ng nâng c p h th ng: Dùng l nh RunApp th c hi n l nh c a ng d ng khác Truy c p vào b ng ghi (record): Th c hi n thao tác Record nh thêm, s a, xoá record Trung t m Tin h c- HAG Trang 104 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 ngôn ng th o ch ng hoàn ch nh, h tr ph ng pháp th o ch ng có c u trúc mà b n ã th y ngôn ng Microsoft Visual Basic 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 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 th c hi n phép tính 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 Khai báo bi n: Dim tên_bi n [As ki u_d _li u] Ví d : Dim nguyen, n As Integer Ph m vi 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 ba tình tr ng sau ây: - Bi n c c b (local variable): ch c nh n di n 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): c dùng chung cho t t c nh ng th t c thu c n th ó Nh ng th t c thu c n th khác không th tham chi u n bi n 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 thu c h th ng ng d ng Ví d : Các bi n A, B Module1 Procedure có th truy xu t bi n A, B, Md1 P1 Global A Dim Md1 Không truy xu t Md2, P3 P2 Procedure Dim P1 c bi n Module2 Global B Dim Md2 Procedure Dim P3 Procedure có th truy xu t bi n A, B, Md2 P3 Không truy xu t c bi n Md1, P1 P2 Procedure Dim P2 Procedure có th truy xu t bi n A, B, Md1 P2 Không truy xu t c bi n Md2, P1 P3 Trung t m Tin h c- HAG Trang 105 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 th t c bi n c : Khi vi t l nh cho th t c bi n c Access m ch ng trình Basic cho vi t l nh Th t c n l nh mà b n ã vi t b ng ngôn ng Visual Basic Bên t th t c s ch a ng m t dãy 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 ó M t th t c bi n c 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 form ng i s d ng click vào nút l nh form s óng form, ta nói click mouse 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 m t ph n công vi c Form ho c Report Do ó b c u tiên ph i t o form ô u n form 9.3.3 Th t c n th Visual basic Th t c hàm (function procedure): T ng t v i nh ngh a c a hàm 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 nh t t i m tham chi u n hàm ó 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 L nh th c hi n: Dãy câu l nh Visual Basic mà ta mu n thi hành th c ho c hàm c g i Giá tr tr v : Giá tr d li u tr v sau m t dãy câu l nh bên c a hàm ã c tính toán xong Khai báo tham s th t c/hàm: [ByVal I ByRef] As [=giá tr m c nh] 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 ) Cú pháp khai báo hàm [Public|Private] [Static] Function Tên_hàm([tham s ]) As Tên_hàm= giá tr tr v End Function Sau th c hi n câu l nh hàm cho ta k t qu 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 str = "Mot" Case Trung t m Tin h c- HAG Trang 106 Microsoft Access 2000 Ch ng 9: Ng n ng Visual Basic str = "Hai" Case str = "Ba" Case str = "Bon" Case str = "Nam" Case str = "Sau" Case str = "Bay" Case str = "Tam" Case str = "Chin" End Select sothanhchui = str End Function S d ng tham s bi n i Khi g i n hàm ph i truy n y tham s cho hàm n u không h th ng s báo l i Tuy nhiên Visual Basic cung c p cho cách s ng 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 ó có khai báo Optional ta có th truy n ho c không truy n tham s N u không truy n hàm s l y giá tr nh s n 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 Variant (ki u bi n) ph i d ng t khóa ParamArray M c ích s d ng cách ch a xác nh c s g i vào tham s cho th t c ch y M ng (Array) Dùng m t m ng ch n m t dãy bi n tên s d ng ch s ch m t ph n t c a m ng T t c ph n t m t m ng ph i có t ki u d li u D nhiên mãng có ki u d li u thay i ph n t m t ng có th ch a nhi u lo i d li u khác 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 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 ph n t m ng: ch nh m t ph n t ó ng ta s d ng ch s c a m ng Trung t m Tin h c- HAG Trang 107 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 10 Dim nguyen(1 to 5) As Integer Dim I As Integer For I=1 to nguyen(I) = 10 Next I 9.4 Các c u trúc u n c a ngôn ng Basic 9.4.1 C u trúc quy t nh (Decision structures) 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ó n có th dùng m t hai ph ng pháp sau di n t c u trúc này: - L nh 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 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 c u trúc IF m t bi u th c mà giá tr là: - Không ( u ki n sai-False) ó l nh không th c hi n - Khác không ( u ki n úng-True) ó l nh c th c hi n 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 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 u ki n Trang 108 Microsoft Access 2000 Ch ng 9: Ng n ng Visual Basic i danh_sách_giá_tr 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 c phân cách b i d u ch m ph y ”;” 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 TO 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 bi u th c ki m nh có giá tr n m 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 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à Trong tr ng h p không m t câu CASE tho u_ki n_ki m_ nh 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 m t u ki n úng (While) ho c cho 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\ 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 n t Gia s có th s d ng ho c s âm Ví d : Tính t ng s nguyên t 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 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 Microsoft Access 2000 9.4.3 Ch u n s thi hành ch ng 9: Ng n ng Visual Basic ng trình C u trúc u n l ng nhau: B n có th vi t m t c u trúc u n l ng u trúc u n khác Thoát kh i c u trúc u 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 hàm Khi ta ã xây d ng xong hoàn ch nh m t hàm ta có th g i s d ng c i v trí sau: Trong th t c ho c hàm khác M t bi u th c nh ngh a tính toán m t truy v n, m t u 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 hàm mà b n s d ng vi c m b ng d ki n (table), b ng truy n (query) 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 m t cách gi ng nh khai báo t c nh ng i t ng khác nh ng tr c 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 bi n bi u th it ng: Nh ta ã bi t ph n c b n thao tác t o, s a, xóa i t ng table, query, form, report ch b ng thao tác click mouse l thu c vào cách x trí c a ng i thao tác Trong ph n 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 i t ng thu c tính ph ng th c: Các i t ng access c phân lo i thành t p h p, t p h p c nhóm l i theo t ng i t ng m t lo i T p h p form m t nhóm form ang m c s d li u M i m t form l i có t p h p u n u n có form M i m t u n form l i m t i t ng, 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 Microsoft Access 2000 Ch ng 9: Ng n ng Visual Basic Ví d : ch nh n m t form t p h p form Visual basic a cách ch nh n m t i t ng: Form! ho c Form(“”) ho c Form(0) Trong ó cách dùng ch nh form theo th t mà cm :0 ch form ã m u tiên, ch nh form m th hai,… Cách tham chi u n 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 n Tính ch t ô u n thu c Form Forms![tên_ form].[Tên_ u_khi n] 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 i t ng ã có c a CSDL 9.7 Bi n bi u th i t ng m t t p h p m u tin (Recordset) 9.7.1 Phân lo i: Có lo i recordset: Ki u it ng S m u tin c a it ng ki n c a it Table Có th thay i Có th thay i Dynaset Có th thay i Có th thay i không thay i SnapShot nh/ không thay i ng v i m t ng Bi n Recordset thu c lo i Table: bi n lo i h tr h u h t thao tác thêm (add), s a (update), xoá (delete) cho bi t tình tr ng m i nh t c a b ng d li u (table) Ch th c hi 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 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 bi n Recordset Di chuy n t Record n record khác Ph ng th c Ý ngh a MoveFirst Di chuy n v record MoveNext Di chuy n v record k ti p N u thu c tính EOF True MoveNext c th c hi n s xãy l i MovePrevious Di chuy n v record tr c ó N u thu c tính BOF True MovePrevious c th c hi n s xãy l i MoveLast u tiên Di chuy n v record cu i u trúc c a m t t p h p m u tin (recordset): BOF RECORD Trung t m Tin h c- HAG Trang 111 Microsoft Access 2000 Ch ng 9: Ng n ng Visual Basic RECORD RECORD … … RECORD n EOF t bi n Recordset (lo i Table, Dynaset, ho c Snapshot) th hi n hành c a nó, ngh a ch n record hi n hành m nh ng m u tin c a bi n Recordset: RecordCount Tìm ki m m t m u tin c bi t - Dùng ph ng th c Find: Ph ng th c ng có m t v trí Ý ngh a FindFirst Tìm n Record tiêu chu n ã qui u tiên nhóm nh ng record tho nh FindNext Tìm n Record k ti p record hi n hành nhóm nh ng record tho tiêu chu n ã qui nh FindPrevious Tìm n Record tr c record hi n hành nhóm nh ng record tho tiêu chu n ã qui nh FindLast Tìm n Record cu i nhóm nh ng record 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: =, >=, >,