THU VIEN | nh Tê (chủ biên) ĐẠI HỌC THUY SAN D 005.711 M 300 ứng CITT: a: af SỞ oT eee A nh = © & N - lạm - all ÁP s oh EE 2 OO ail Na ea == | ee
ˆ Nhiều giải pháp điều hành dữ liệu dinh chóng, dễ dàng nhất từ trước tới nay
Chao ming Can dé din ức
the uién céa ching t6¢ Xin vui long:
NHÀ XUẤT BẢN GIÁO Mi Stone xé sich s - Không gạch, viết, vẽ lên sách lt
(
Trang 2UMA iin Tu
Trang 3LỜI NÓI Đầu
ừ phiên bản Microsoft Access đầu tiên phát hành vào năm 1992 đến Microsoft Access 2000, qua năm lần phát hành với trên 120 triệu bản chiếm tỷ trọng doanh số khá lớn nên có thể nói rằng Access là một trong những chương trình cơ sở dữ liệu
phổ biến nhất trên thế giới
Microsoft Access 2000 chẳng những dễ dàng liên kết các thông tin liên quan mà còn có thể làm việc với nhiều nguồn dữ liệu
khác: dBASE, Paradox, SQL trên nhiều loại máy tính: Máy tính văn
phòng (PC), máy chủ (server), máy mini và máy lớn (mainframe) Access đảm nhận hai vai trò: Phần mềm trên máy khách (client) hoặc máy chủ và dễ dàng truy cập các chương trình ứng dụng khác như Microsoft Word, Excel, PowerPoint, Outlook
Microsoft Access 2000 cung cấp hệ thống chương trình ứng dụng rất mạnh, giúp bạn mau chóng và dễ dàng tạo lập các trình ứng dụng của mình bất kể từ nguồn dữ liệu nào thông qua các form, report kết hợp với việc sử dụng một số lệnh Visual Basic
Microsoft Access 2000 là phương tiện để trao đổi thông tin trên mang Internet va Intranet, đặc biệt sử dụng trang truy cập giúp bạn ° nhanh chóng tạo và sử dụng các chương trình ứng dụng trên mạng
Microsoft Access 2000 giúp bạn lưu trữ và quản lý dữ liệu Phối hợp Access với Microsoft SQL Server trên máy văn phòng hoặc máy phục vụ để tạo lập nhiều trình ứng dụng trên Windows được nhanh chóng và ít tốn kém Ngoài ra Microsoft Access 2000 còn cung cấp công cụ để dễ dàng liên kết dữ liệu từ máy tính PC với dữ liệu ở máy tính lớn
Do một số những tính năng nổi bật kể trên nên chúng tôi xin giới thiệu với độc giả quyển “Microsoft Access 2000 lập trình ứng dụng cơ sở dữ liệu” gồm 2 tập, 14 chương kèm theo CD-ROM chứa
bài tập và cơ sở dữ liệu mẫu để độc giá có thể thao tác trực tiếp trên
Trang 4sao tránh khỏi các thiếu sót, những mong quý độc giả lượng thứ Trong sách có nhiều thuật ngữ mới, những thuật ngữ này, chúng tôi để trong dấu ngoặc hoặc diễn giải ngữ nghĩa để tham khảo ý kiến của độc giả
Các ý kiến đóng góp, xin quý vị độc giả gửi về địa chỉ E-mail của chúng tôi mk.pub@cinet.vnnews.com hoặc Website của nhà sách Minh Khai www.minhkhai.com.vn
Chúng tôi xin chân thành cảm ơn Nhà xuất bản Giáo Dục và những người khác đã góp công sức để đưa quyển sách này đến tay độc giả
Tp Hồ Chí Minh, tháng 10 năm 2000
Trang 5A) MUC LUC Mac LUC (Tap 1) Lời nói đầu Mục lục
Chương 1: GIGI THIEU VE VBA
TẬP HỢP, ĐỐI TƯỢNG, THUỘC TÍNH, PHƯƠNG PHÁP VÀ SỰ KIỆN - — Tập Hợp và Đối Tugng - — Thuộc Tính và Phương Pháp - — Các Sự Kiện THỦ TỤC VÀ MODULE - — Thủ Tục Con - Thủ Tục Hàm - Thủ Tục Thuộc Tính - Module GIAO DIEN VBE - — Cửa Sổ VBE - — Gỡ Bối
- — Trình Duyệt Đối Tượng
JET, CAC KIEU DU LIEU VA KHAI BAO - Jet - Cac Kiéu Dữ Liệu - Khai Bảo CẤU TRÚC LOGIC DIEU KIEN VA VONG LAP - lf Then - Select Case - For Next - For Each Nextva With End With - Do Loop CAC HAM CO SAN - _ Tổng Kết Các Ham Lựa Chọn
GỠ RỐI VÀ BẤY LỖI
- Cú Pháp Căn Bản Cho Bẫy Lỗi - — Ví Dự Bẫy Lỗi
- — Xử Lý Lỗi MACROS
Trang 6
- Thiết Kế Macros
- So Sánh Giữa VBA Và Macros
Chương +: CÁC MƠ HÌNH TRUY CAP DU LIEU
TỔNG QUÁT VỀ DAO
- —_ Không Gian Làm Việc Jet
- —_ Không Gian Làm Việc ODBCDirect
- Dùng Chung Các Đối Tượng Cho Không Gian Làm Việc Jet Và ODBCDirect
- Các Đối Tượng Của Không Gian Làm Viéc Jet
- Các Đối Tượng Của Không Gian Làm Việc ODBCDirect
TỔNG QUÁT VỀ ADO ˆ
- Thư Viện ADODB - Thư Viện ADOX: Chương 3: THIẾT KẾ BẰNG CƠ SỞ DỮ LIỆU QUAN HỆ VÀ BẰNG - — Chuẩn Hóa - _ Mối Quan Hệ Giữa Các Bảng TẠO BẰNG BẰNG CÁC WIZARD - — Các Wizard Của Cd Sở Dữ Liệu + Wizard Table - Field Builder TAO BANG BANG TAY - — Các Kiểu Dữ Liệu - Dữ Liệu Hợp Lệ - Tạo Chỉ Mục TẠO VÀ QUẦN LÝ CÁC BẰNG BẰNG CHƯƠNG TRÌNH - — Tạo Bảng - _ Làm Việc Với Chỉ Mục
- Điền Dữ Liệu Vào Bảng
- Làm Việc Với Dữ Liệu Trong Các Định Dạng Khác
Trang 7ey MUC LUC
ˆ Query Action
- Các Loại Query Khác
- Cac Thao Tac Định Nghĩa Dữ Liệu Làm Việc Với Nguồn Dữ Liệu Từ Xa
THIẾT KẾ QUERY BẰNG TAY - — Sử Dụng Wizard - Sử Dụng Khung Nhìn Design CÁC QUERY SELECT ĐẶC BIỆT - Query Parameter - Query Union - Subquery CAC QUERY ACTION - Query Update - Query Append - Query Delete - Query Make - Table
LAP TRINH QUERY BANG sa@t VA ADO
- Cau Lénh SELECT - Hàm Định Nghĩa Dữ Liệu - Views va Tht Tuc Lưu Trữ
TRUY VAN NHUNG NGUON DU LIEU TU XA
Truy Vấn Nguồn ODBC Liên Kết
- — Truy Vấn Trong Các Đề An Dữ Liệu Của Access - _ Lập Trình Truy Vấn Cơ Sở Dữ Liệu Từ Xa
Chuong 5: XÂY DỰNG GIAO DIỆN NGƯỜI DÙNG BANG FORM
FORM SPLASH SCREEN
- Tao Splash Screen
- — Điều Khiển Khoảng Thời Gian Hiển Thi FORM SWITCHBOARD
- _ Điều Khién Bang Siêu Liên Kết - Điều Khiển Bằng Chương Trình LIÊN KẾT FORM VỚI DỮ LIỆU
Trang 8- Form Phụ
TÌM KIẾM VÀ HIỂN THỊ DỮ LIỆU
- Tạo Một Form Tìm Kiếm
- Hiển Thị Thông Tin Một Cách Linh Hoạt - — Vẽ Biểu Đồ Một Tập Con Của Dữ Liệu
THAO TÁC FORM BẰNG VBA
Trang 9Chuong 1
GIGI THIEU VE VBA
Hơn một thập kỷ trước đây, BI Gates đã để xuất một ngôn ngữ dùng chung cho các ứng dụng văn phòng Microsoft Visual Basis for Application (VBA) la ngén ngt thoa man ude mo dé va con hon thế nữa VBA trong Microsoft Access 2000 là ngôn ngữ thông dụng trong các thành phần của Mierosoft Office, đó là một thành công lớn Cú pháp của nó cũng chặt chè như ngôn ngữ lập trình Visual Basis chuẩn Tính chất phổ biến của VBA khiến cho các nhà phát triển sử dụng nó như ngôn ngữ độc lập rất đễ dàng trong nhiều bối cảnh bằng cách nghiên cứu một mô hình đối tượng mới VBA giống như chất keo cho ứng dụng Access, nó gắn mọi thứ với nhau và cho
ra một form ứng dụng
Access 2000 có thêm một giao dién mdi, Visual Basis Editor
(VBE) là một trình soạn thảo có thể chèn các thành phần khác của Office vào trong dòng Thế nhưng bạn có thể tự mình tìm kiếm và chèn mã lệnh VBA vào đằng sau các form của Aceess quen thuộc thay vì ở sau các form người dùng trong hầu hết các thành phần còn lại của Office Việc kết hợp các kỹ thuật này bạn sẽ cảm thấy rất tự nhiên
Chương này sẽ giới thiệu VBA trong Access 2000 và ôn lại các vấn dé co bản có liên quan đến sự phát triển các ứng dung Access 2000 Nó còn trình bày những đổi mới quan trọng và giải thích những kỹ xảo Code _Behind_ Form, Đây là một chủ để phát triển Access truyền thống, ngoài ra còn có một số đối mới khác để giúp bạn làm việc với VBE
Chương này trình bày bảy đặc điểm của VBA trong Access được liệt kê dưới đây và sẽ kết thúc bằng một cuộc thảo luận ngắn gọn về macro
Trang 10
m Thủ tục và module (don thé) m Giao diện VBE
m đet, các kiểu đữ liệu và khai báo m Cấu trúc logic điều kiện và vòng lặp m Các hàm cài sẵn
m Gỡ rối và bấy lỗi
TẬP HỢP, ĐỐI TƯỢNG, THUỘC TÍNH, PHƯƠNG PHÁP VÀ SỰ KIỆN
Access 2000 hỗ trợ cho VBA, tạo thuận lợi cho phát triển hướng đối tượng Phần sau sẽ giới thiệu sự phát triển hướng đối tugng trong pham vi VBA va Access 2000 "Tài liệu này phục vụ cho những người có năng lực và kinh nghiệm phát triển ứng dụng lập trình và những người phát triển ở mức trung bình muốn xem lại lập trình hướng đối tượng bằng VBA
Tập Hợp Và Đối Tuợng
Access 2000 là môi trường phát triển hướng đối tượng Cửa số Database của nó thuận tiện cho người dùng truy xuất các bảng (table), query (vấn tin), form (mẫu biểu), report (báo cáo), module (đơn thể) và macro VBA có sẵn những đặc trưng này, triển khai mang rộng của cấu trúc lập trình như các đối tượng recordset (tập record) và các đối tượng 7abieDeƒ Để nắm vững VBA trong Access, bạn phải hiểu biết về các đối tượng và một số khái niệm liên quan đến nó
Mỗi đối tượng là một vật thể Những vật thể gồm nhiều loại khác nhau như xe hơi, điện thoại, video Tất cả các đối tượng đều có thuộc tính Ví dụ xe bơi được xác định bằng màu sắc, cửa xe, máy
Trang 11(] Chương 1: GIỚI THIỆU VE VBA
đối tượng này giúp bạn nhận ra những nét điển hình duy nhất của các đối tượng khác dựa vào các thuộc tính của chúng Ví dụ một chiếc hơi màu đổ và màu đen xác định hai điển hình duy nhất của đối tượng xe
Những thuộc tính của đối tượng khác nhau tùy thuộc vào lớp đối tượng mà chúng đề cập tới Một chiếc xe hơi có tập hợp thuộc tính khác với một cái điện thoại CA hai déu có thuộc tính màu sắc, nhưng máy điện thoại còn có thể có thuộc tính speaker (loa phóng thanh), còn xe hơi lại có kích thước máy móc khác nhau Một vài đối tượng còn chứa các thuộc tính khác nữa Một vài đối tượng là các thùng chứa (container) các đối tượng khác Các đối tượng được chứa này cũng có các thuộc tính Ví dụ trong khi máy móc có kích thước và hình dạng khác nhau thì người gọi điện thoại lại có thuộc tính về âm lượng và giọng nói khác nhau Những thuộc tính lại còn có thể xác định những đặc trưng duy nhất về lớp đối tượng ở bên trong nó Một Speakerphone (điện thoại có gắn micro) có các thuộc tính khác với một điện thoại chuẩn
Để bổ sung cho các thuộc tính, các đối tượng còn có các phương pháp Các phương pháp của đối tượng là những hành vi có thể thực hiện Máy điện thoại để gọi, chiếc xe hơi để di chuyển Nhiều đối tượng có các nhiều phương pháp, ví dụ, máy điện thoại thực hiện các cuộc gọi nội hạt và liên tỉnh
Người phát triển Access không thể thao tác các đối tượng vật lý Chúng ta thao tác bằng chương trình tạo các form, các bảng và các query để có thể miêu tả các đối tượng và các hành vi của chúng Cửa sổ Database Access 2000 trình bày một số lớp đối tượng cơ sở dữ liệu trên thanh công cụ Outlook-style của Microsoft (xem Hình 1_1) Hãy click vào nút Form trên thanh công cụ để mở một khung nhìn (view) của các đối tượng form và hiển thị hai tùy chọn để tạo các form mới Các đối tượng form có thể chứa các đối tượng khác
gọi là điều khién (control) Các đối tượng được chứa bên trong chỉ
Trang 12
— _ — ; enone —
Caer) : aa ee CEG)
Lie Gt pee Peet lh unde top
2t GAP Kye” Ss soe ogee De Pa Set aia [—=11 Tư kệ Nên 1e X8, TE
Thuê evra, [iene] swt Lie
B a] Geaelone bene xen ere) om đ] ae benkyangss se
& CD tse: mhunter
Tea | tees deus B.-:°:iÌm sxxuve ¬ BD ten tess ˆ GB berate 2 TD tre meetin 4 tR setee pm TD bre mts or omaptee || tr - fl } a da ane imei ba Tá up mean team
Hình 1-1: Cửa sổ Database với lập hợp các đối tượng form và hai tùy chọn để tạo mội form mới
Hình 1-1 trình bày một vài đối tượng form Các đối tượng này bao gồm một coilecttion (tập hợp) Những ứng dung Access điển hình có các tập hợp của các form, các bảng, các query và các đối tượng khác Cửa sổ Database tự động sắp xếp các đối tượng được chọn vào trong các lớp khi bạn click vào biểu tượng phía bên trái trên thanh công cụ của từng tập hợp
Các tập hợp cũng giống như các đối tượng Tất cả các tập hợp trong Access đều có thuộc tính Count để xác định số lượng các trường hợp trong tập hợp Tập hợp có thể còn có thudc tinh Item Bạn có thể sử dụng thuộc tính Item chi đọc để trả về một form riêng lẻ từ tập hợp A/i/o6rms Khi những thành phần của tập hợp là những đối tượng riêng lẻ thì chúng không có thuộc tính Count Các đối tượng của một tập hợp phục vụ cho những mục đích khác nhau Ví dụ chiếc xe hơi mui rời có mục đích sử dụng khác với ghế kiệu, nhưng cả hai đều thuộc tập hợp xe trong gia đình
Thuộc Tính Và Phương Phép
Các thuộc tính và phương pháp hiển thị sự thể hiện và hành vì của các đối tượng, cú pháp để tham chiếu đến các thuộc tính và
Trang 13Chương 1: GIỚI THIEU VE VBA
phương pháp 1a: Object.property hoặc Oð0/ccf.method Thuật ngữ object (đối tượng) có thể tham chiếu đến hoặc là một đối tượng riêng lẻ hoặc một tập hợp của các đối tượng
Vi du 1: txtinput1.backcolor chi định thuộc tính màu nên của hộp văn bản trong một form
Vi du 2: Allforms.Item(0) tham chiéu dén form dau tién trong tập hợp form Nếu form có tên là frmSamplel, ban có thể tham chiếu đến form như sau:
Allforms.Item(“frmSample1”)
Bạn có thể xem các thuộc tính của đối tượng cơ sở dữ liệu bằng cách chọn chúng trong khung nhìn Design rồi Click nút Property trên thanh công cụ Hình 1-2 trình bày một form trong khung nhìn Design cùng với tờ thuộc tính của form đó Tờ thuộc tính này trình bày mục nhập khach hang, My Default Caption trong hộp thuộc tính Caption Thuộc tinh Close Button da duge chon Ban có thể click vào hộp Close Button réi chon No, Thuộc tinh Close Button méi nay làm mất màu xám của nút Close khi có một form xuất hiện trong khung nhìn Form Lưu ý rằng tờ thuộc tính có nhiều trang Hình 1-2 trình bày nhãn Format đã chọn Những trang này tổ chức các thuộc tính thành các nhóm để tìm được nhanh
Pant [tate | tore [ecw | |
tee delete gene ˆ TẠO ee tows kà foots - Tư Click me to view & message fet stn teyeryren re làn Tay tờ = mm hata force " Me
Trang 14
cg GHI CHÚ: Trong Access 2000, tờ thuộc tính có sẵn trong cả 2
khung nhìn Design và Form thay vì chỉ trong khung nhìn Design
Điều này có nghĩa là bạn có thể chỉnh sửa và trau chuốt sự thể
hiện của form một cách nhanh chóng khi làm việc với bản thiết
kế của nó trong khung nhìn Form
Đối tượng DoCmd là nguồn cung cấp phong phú các phương pháp cho tất cả những người phát triển Access ở các cấp, nhưng với những người mới học sử dụng cũng tìm được sự giúp đỡ đặc biệt để bắt đầu với những phương pháp này Đối tượng D2oCmd gồm nhiều phương pháp như: Ciose, Openform, GotoControl, FindRecord và TunCommand Nhiều phương pháp DoCmd đòi hỏi các đối số để chỉ ra cách thực hiện phương pháp Một số phương pháp khác lại yêu cầu các đối số tùy chọn Nếu bạn không cung cấp giá trị cho các đối số tùy chọn này thì phương pháp đó sẽ sử dụng giá trị cài đặt mặc nhiên RunCommend có sức lôi cuốn đặc biệt đối với những người dùng thành thạo muốn nâng cao địa vị lập trình của mình, bạn có thể sử dụng nó để thực thi những lệnh có giá trị trên những menu và thanh công cụ của Access
Bạn có thể đóng một form trong Access bing c4ch ding’ phương pháp Close của đối tượng Doemd Phương pháp này có hai đối số đã yêu cầu và một tùy chọn: Đối số yêu cầu thứ nhất chỉ ra kiểu của đối tượng cần đóng Bạn sử 3:-ng acForm khi cần đóng một form (ơœcForm là một hằng số có sẵn trong Access, giá trị của nó báo cho phương pháp Cỉose biết rằng bạn muốn đóng một form Xin xem mục “Trình duyệt đối tượng” trong phần sau của chương này để biết thêm về những hằng số có sẵn trong Access) Đối số thứ hai là tên form Mục nhập này hiện ra trong thudc tinh Name cia td thuộc tính form, Hãy rào tên trong dấu ngoặc kép Đối số tùy chọn báo cho Access biết để lưu lại những sự thay đổi trên form hay không, nó có hai giá trị như sau:
Trang 15Chương 1: GIỚI THIỆU VỀ VBA
Cài đặt mặc nhiên là nhắc bạn chọn để lưu Sử dụng acSaveYes hoac acSaveNo để đóng form và lưu hoặc không lưu bất kỳ sự thay đổi nào Bạn có thể gọi phương pháp C/ose cho một form bằng cách sử dụng cú pháp sau:
DoCmd.close acform, “formname”, acSaveNo
Có nhiều phương pháp Docmd tác động trực tiếp vào các Object riêng lẻ Ví dụ phương pháp GotoControl ấn định.tiêu điểm vào điều khiển đặc biệt trên form Bạn có thể có cùng kết quả khi sử dụng phương pháp 5eiƒfocus nếu chọn một điều khiển Một trong hai phương pháp trên đều thuận tiện khi ứng dụng của bạn cần chuyển tiêu điểm nhập thông tin mới hay sửa chữa các lỗi
Các Sự Kiện
Các sự kiện là rất quan trọng trong lập trình VBA Bạn có thể sử dụng các sự kiện để tạo các ứng dụng năng động và tương tác Các đối tượng và tập hợp có các sự kiện, nó cung cấp điểm xuất phát cho một mã khách hàng của người phát triển Khi làm việc với các form, bạn có thể sử dụng các sự kiện cho các tác vụ như: phê chuẩn dữ liệu, cho phép hoặc không cho phép các điều khiển, thay đổi điều khiển để có được tiêu điểm, mở hoặc đóng một form
Trang 16người dùng điều khiển đến một record mới, tạo lại các query hoặc làm mới lại một form
1
- Bạn truy xuất các sự kiện cho các form và các điều khiển của chúng bằng cách chọn form hay điểu khiến trong khung nhìn Design và click nhãn Event trong tờ thuộc tính Click nut Build bén cạnh sự kiện đang mở một hộp thoại, bạn có thể dùng nó mở module chương trình hậu thuẫn cho một form Chọn Code Builder để mở một thủ tục sự kiện trong VBE Thủ tục sự kiện được đặt tên Objectname_Eveniname Trong dé Objectname la tên của đối tượng và Euentname là tên của sự kiện, Ví dụ nếu bạn chọn một form và click vào nút Build cho sự kién Close, thủ tục sự kiện của bạn có tên la Form_Close Néu ban tao thu tuc su kién On Click cia nhãn có tên lbITitle, VBA tu dong dat tén cho né 1A lb/Title_Click
Đoạn chương trình dưới đây là ba thủ tục sự kiện của form
trình bày trong Hình 1-2: Form_open, Form_load va lbITitle_click
Khi lần đầu tiên bạn mở form ở khung nhìn Form, một hộp thông báo xuất hiện đọc được là “The form opened” (form đã mở) Khi bạn click nút OK, bạn thấy thông báo thứ hai là “The form loaded” (fprm đã nạp) Sau khi form thực hiện xong chu kỳ nạp của nó, bạn check vào nhãn trên form, một hộp thông báo thứ ba xuất hiện với nội dung: "Hello from the label."
Private Sub Form_Open(Cancel As Integer)
MsgBox "The form opened.", vbInformation,
“Programming Microsoft Access 2007! End Sub
Private Sub Form_Load()
'Đây là câu lệnh đơn giản
MsgBox “The form loaded.", vbinformation, _
"Programming Microsoft Access 2000" 'Câu lệnh này thiết lập một thuộc tính
Me.Caption = “New Caption"
Trang 172M Chuong 1: GIGI THIEU VE VBA
Me.txtMyTextBox.SetFocus
'Khi phương pháp làm việc, VBA thiết lập một thuộc tính
Me.txtMyTextBox.Text = “Hi, there!"
End Sub
Private Sub IbITitle_Click()
MsgBox "Hello from the label.", vblnformation, _
“Programming Microsoft Access 2000" End Sub
Các thủ tục su kiện tạo các hộp thông báo Click vào nhãn dé gọi thủ tục sự kiện /0/7e_Cch Thủ tục này có một câu lệnh đơn dùng để hiện một hộp thông báo (ký hiệu gạch dưới ở cuối câu lệnh là ký hiệu báo cho máy biết câu lệnh còn tiếp ở dòng dưới) Thủ tục sự kiện #orm_Open cũng có một câu lệnh đơn Thủ tục Form _load có một số câu lệnh ngoài ra mỗi câu lệnh có một hộp thông báo của nó Thủ tục sự kiện này tạo đầu để linh hoạt cho form, đó là cách giúp đỡ đặc biệt khi một form có hai hay nhiều chức năng trong cùng một ứng dụng Nó còn thiết lập tiêu điểm tới hộp văn bản có tên là /xtMyTextBox và ấn định “Hi, there” lam thuộc tính Text của điều khiển Thủ tục sự kiện này giải thích hai kỹ thuật khác nhau để thiết lập tiêu điểm Kỹ thuật này đưa vào phương pháp SefFocus, còn kỹ thuật kia sử dụng phương pháp Go7oControl cho cùng một mục dích Dấu nháy đặt ở đầu vài dòng đánh dấu chúng là các câu ghi chú Lưu ý rằng mỗi một kỹ thuật là một dòng ghi chú
THỦ TỤC VÀ MODULE
Trang 18\ {
những lớp của riêng mình và sử dụng lại đoạn mã cho những tác vụ thường xuyên như: thêm mới một nhân viên, gửi tiền hay rút tiễn ra khỏi tài khoản
Thủ Tục Con
Thủ tục con (Sub Procedure, viết ngắn lại là “subprocedure” hoặc chỉ đơn giản là “procedure” = thủ tục) có thể thực hiện các động tác, tính toán các giá trị, cập nhật và xem xét lại các cài đặt thuộc tính có sắn Như bạn đã biết Access 2000 tự động gọi các thủ tục cho các sự kiện, nhưng bạn cũng có thể sử dụng chúng một cách rộng rãi Thủ tục không bao giờ trả về giá trị, chúng cũng không thể định nghĩa các thuộc tính do người dùng tự tạo cho form, report hoặc các module lớp
Thủ tục chứa hàng loạt các câu lệnh VBA nằm giữa hai lệnh „Sub và EndSub Ở câu lệnh Sub, bạn phải khai báo tên của thủ tục Trong khi các thủ tục sự kiện phải đặt tên đúng kiểu (nhu object- event) thì thủ tục đặt tên theo các quy tắc đặt tên biến chuẩn như sau: Nó phải bắt đầu bằng một ký tự, không thể dài quá 255 ký tự, không được có dấu chấm, khoảng trắng và các từ khóa, tên hàm hoặc tên các toán tử của VBA Thủ tục có thể có các đối số, các đối số này đặt sau tên thủ tục, nếu có nhiều đối số thì bạn phân cách chúng bằng dấu phẩy
Muốn nắm vững về các thủ tục, hãy sử dụng wizard của Command Button, nó chứa các đoạn mã lệnh VBA cho hơn 30 chức
năng Để có được các chức năng này, bạn phải thực hiện một số
thao tác chọn lựa trong các hộp thoại Thông thường thủ tục viết bằng wizard là đơn giản, dù là người phát triển có trình độ trung cấp hay thành thạo đều nên sử dụng Wizard, bởi vì nó tạo ra một sườn thủ tục để bạn có thể thêm những câu lệnh cho các yêu câu cụ thể của bạn Người mới bắt đầu làm việc với Aceess có thể sử dung wizard để di chuyển record, bảo vệ dữ liệu, các thao tác tạo form và báo cáo tổng quát, gọi các ứng dụng khác và các công việc linh tính
Trang 19@ chuong 1: GIGI THIEU VE VBA
như chạy một query (vấn tin) hoặc quay số điện thoại một cách tự động và nhanh chóng
Ban thực hiện wizard của Command Button từ hộp công cụ (toolbox) trong khung nhìn Form Design Chọn nút Control Wizards rồi drop (thả) vào form Thao tác này để mở hộp thoại trình bày trong Hình 1_3 Bạn có thể chọn nhiều thao tác cho mỗi loại Sau khi đã chọn các hộp thoại cho thao tác bạn muốn, bạn có thể xem đoạn mã trong VBE của Access 2000 Hãy click vào nút Code trên thanh công cụ Form Design để chuyển vào VBE What acon do pau wart La happen when the Walon ig trese-? Different acter ace evutatle for each category Caloqoies: ARES
Kecerd Cer sunns Fn kecad
Fath Ogun Mie Gatored Recad
Weoat Cperatore GatoLast Record
ppc aban Goto Kext Record
9c bai #0 (322 to Previn gs Record
Hình 1-3: Sử dụng wizard cla Command Button ban cé thé tao toan bộ các thủ tục sự kiện bằng cách trả lời cau hdi trong hộp thoại,
Rất nhiều người phát triển ứng dụng thích tự mình viết các thủ tục Bạn có thể mở cửa sổ mã lệnh cho một thủ tục sự kiện như đã miêu tả ở trên, hoặc bạn có thể tạo một thủ tục theo cách thông thường Có hai cách để khởi động thủ tục tùy thuộc vào bạn đặt nó ỡ đâu Nếu thủ tục đặt đằng sau form hay report, click vào nút Code trên thanh công cụ Design Nếu đoạn mã đã có trong một module ›„ chuẩn không nằm sau form hay report nao thi ban chọn lệnh Tool- Macro-Visual Basic Editor hoặc nhấn tổ hợp phím ALT+F11 Trong trường hợp khác bạn kết thúc VBE Hay chon Insert - Procedure và
Trang 20W \ J 4
trong hép thoai Add Procedure gé tén thi tục và xác nhận chọn nút tùy chọn Sub Thao tác này tạo ra một bộ khung cho thủ tục với hai câu lệnh Sub và End Sub Sau đó bạn có thể thêm các câu lệnh khác vào
Vận dụng các kiến thức của bạn về mô hình đối tượng Access để mã hóa một số công việc Hãy gọi đối tượng DoCmd để có nhiều phương pháp Gõ DoCmd và nhấn phím dấu chấm Thao tác này mở ra một hộp danh sách thả xuống để hiển thị toàn bộ các mục nhập hợp lệ sau đối tượng DocCmdd (Xem Hình 1-4) Khi bạn gõ vào một mục, Âccess sẽ quy tụ những mục có đầu mục khớp với mục của bạn
is Gio Edt Yow Insert Qebug Bun Tods Addins Vindow Help =l#] |
S 4 - “RAO poe REPS 3 = 2 „ñ [icenesay =] Paytormopenar Public Sub NyFormOpener () Dotind Opentt tna Sub © DUTT ® Openwodulg ~Í# af } & OpenGuery mee OpenReport © OpenStoreuProcedure > OpenTable ‘9 Openview
Hình 1-4: Sự giúp đỡ thông minh giúp hoàn thành câu lệnh VBA cho đối tượng DoCmd Bạn gõ phần đầu của câu lệnh, nó hiển thị danh sách các mục thích hợp tương ứng với phần đầu của câu lệnh
Nếu bạn không nhớ chắc chắn hãy cuốn từ đầu đến cuối các mục để tìm một phương pháp Kỹ thuật này thực hiện cho tất cả các đối tượng không riêng gì DoCmd Microsoft gọi kỹ thuật này là lntelli5Sense (giác quan thông minh) bởi vì nó có khả năng cung cấp một tập con (subset) các phương pháp thích hợp IntelliSense thực hiện 2 công việc: Liệt kê các thuộc tính và phương pháp thích hợp tại bất kỳ điểm nào trong cấu trúc của một câu lệnh của VBA và cung cấp thông tin cú pháp về nội dung các field cân có các câu lệnh VBA đã chọn Cung cấp cú pháp cho câu lệnh VBA Điều này
Trang 21Chương 1: GIỚI THIỆU VỀ VIA
làm giảm các lỗi trong khi viết lệnh và giúp bạn khởi động một cách nhanh chóng
Thủ tục dưới đây có 3 dòng lệnh: Dòng lệnh thứ nhất cung cấp vị trí bộ nhớ cho kết quả tính toán Dòng lệnh thứ 2 cộng thêm hai hằng số Dòng lệnh thứ 3 in kết quả ra cửa số Immediate Cửa sổ này giống một vùng làm việc lưu kết quả trung gian khi bạn kiểm tra chương trình Bạn có thể mở nó từ VBE bằng cách chọn View-Immediate Window Bạn có thể chạy thủ tục từ VBE bằng cách click vào bất kỳ thủ tục nào rồi click vào nút Run Sub/UesrForm trên thanh công cụ Standard Sub MyFirstCa!culator() Dim Result Result z 1+2 Debug.Print Result End Sub
Trong một số tình huống đặc trưng khác, bạn có thể gọi thủ tục bằng một trong hai cáchzĐưa tên thủ tục vào một dòng, nếu thủ tục có đối số, bạn có thể đưa các đối số vào sau tên thủ tục và cách nhau bằng dấu phẩy Đưa lệnh Cai! ở đằng trước tên thủ tục, đây là từ khóa của VBA để gọi một thủ tục Khi bạn ding cau lénh Call, bạn phải đặt các đối số trong dấu ngoặc đơn ở sau tên thủ tục
Đoạn chương trình dưới đây là một phiên bản linh hoạt hơn của hàm tính toán khởi đầu Việc tính toán có hai thủ tục Một thủ tục được đặt tên là ÄySecondCalculaior có nhiệm vụ cộng hai số bất kỳ và in kết quả ra cửa số Immediate Nó xác định hai sé nào được cộng vào từ đối số mà nó nhận Một thủ tục khác dùng để gọi thủ tục trên Bạn có thể thay đổi các số cộng vào thủ tục thứ hai bằng cách thay đổi giá trị của hai đối số trong thủ tục thứ nhất Trong ứng dụng phức tạp hơn, bạn phải gắn các giá trị của đối số này cho các biến hoặc các ñeld của form :
Sub CallSeconCalculator ()
~~ “"MySecondCalculator 1, 3
End Sub
Trang 22Sub MySecondCalculator ( First, Second) Dim Result Result = First + Second Debug.Print Result End Sub Thủ Tục Hàm
Các thủ tục hàm thường được gọi là hàm, hàm khác thủ tục ở 2 điểm: Chúng có thể trả về một giá trị nên bạn có thể sử dụng trong các biểu thức như một biến Chúng không làm việc như các thủ tục sự kiện Cả 2 loại thủ tục và hàm đều có thể thực hiện các tác vụ Lưu ý có một ngoại lệ là hàm và thủ tục có thể hoán chuyển cho nhau
Một hàm là tập hợp các câu lệnh VBA, bắt đầu bằng câu lệnh Function va két thic bing End Function N6 cũng có thể chấp nhận các đối số như thủ tục Một hàm có thể có một hay nhiều biểu thức, ít nhất một trong những biểu thức này có thể cài đặt tên hàm bằng một giá trị: Bạn có thể ngưng thực hiện một hàm bằng cách dùng câu lénh Exit Functon Trong một hàm có thể có một hay nhiều c4u lénh Exit Function
Mặc dù hàm trả về một giá trị Nhưng cũng không phải nhất
thiết như vậy Một hàm có thể là một tập hợp các câu lệnh gọi các phương pháp và cài đặt: các thuộc tính ngay cả khi không được cài đặt tên hàm bằng một giá trị Đây là một điểm mà hàm và thủ tục giống nhau
Bạn có thể khởi động một hàm giống như khởi động một thủ tục, nhưng bạn chọn nút tùy chọn Function thay vì nút tùy chọn Sub trong hộp thoại Add Procedure Bạn có thể gọi một hàm bằng cách click nút Run Sub/UserForm trên thanh công cu Standard cia VBE Bạn cũng có thể gọi hàm ngay trong cửa sổ Immediate bằng cách gõ dấu chấm hỏi sau đó gõ tên hàm Nếu hàm có đối số bạn đặt nó trong dấu ngoặc đơn và phân cách các đối số bằng dấu phẩy
Trang 23Chuong 1: GIGI THIEU VE VBA
Bạn có thể chạy các hàm khách hàng của riêng mình cũng như các hàm có sẵn trong Access ngay trong cửa sé Immediate
Hình 1-5 trinh bay một khung nhìn của VBE với một hàm đơn giản xác định một ngày làm đối số cho thiên niên kỷ thứ ba Để phù hợp với thông lệ chung, chúng ta quy ước, thiên niên kỷ thứ
ba khởi đầu vào năm 2000 thay cho năm 2001 Hàm Year2kTest
chấp nhận một ngày và trả về kết quả là 3 nếu ngày đó nằm trong thiên niên ký thứ ba hoặc trả về 0 nếu ở thiên niên kỷ khác Cửa sổ Iramediate ở dưới cửa sổ mã lệnh trình bày kết quả sau khi chạy hàm cho hai ngày khác nhau Cửa sổ Immediate trong hình 1_5 xác nhận kết quả này trả về là 3 cho ngày đầu tiên của năm 2000 và số 0 cho ngày đầu tiên của năm 1999 Lưu ý rằng bạn phải rào một ngày vào giữa hai dấu # TxÌ pan ei on ie drm nya, ices, ts [tcencraiy a] [reeraktest zd = Public Function Yenc2kTest (dtmDateIn) À3 Byte 3 + Yaax2kTeac for ded milleruiwe dates ¬ Year2KTcst * 0 1£ drm0ateIn > ÿ12/21/1999W Then Yeac2KTest » 3 End If End Function _ =f <1) fz PYear2KTest (#1/ 1/20008) ˆ 3 ?Yenr2KTest (1/1/1999) 0 x Lt ’
Hinh 1-5: Mét ham don gidn duge goi từ của sé Immediate
Thủ tục dưới đây đạt mức độ tỉnh vi hơn trong việc xác định thiên niên kỷ Hàm khởi đầu bằng việc khai báo phạm vi các ngày chính xác Sau đó kiểm tra đối số của nó dựa vào hai cột mốc thiên niên kỷ Nếu ngày không thuộc thiên niên kỷ thứ nhất hoặc thứ hai, hàm cho rằng ngày đó thuộc thiên niên kỷ thứ ba Lệnh trong hộp thông báo ban đầu chỉ ra phạm vi các ngày cho hàm là chính xác
Trang 24Public Function PopularMiilennium(dtmDateln) As Byte MsgBox "This works for dates after 12/31/0099" & _ " and before 1/1/3000.", _ vbInformation, - “Programming Microsoft Access 2000" If dtmDateln <= #12/31/999# Then PopularMillennium = 1 Elself dtmDatein <= #12/31/1999# Then PopularMillennium = 2 Else PopularMillennium = 3 End If End Function
Các ngày hợp lệ của Access tit 1/1 / 100 dén 12 / 31 / 2999 Pham vi nay đủ cho phần lớn các ứng dụng tại bàn Nếu bạn cần một phạm vi vượt quá các ngày này, bạn phải xét đến việc giải mã các ngày độc lập với hệ thống ngày của Access
gg GHI CHU: Access 2000 thích hợp với năm 2000 Giống như các phiên bản trước, Access 2000 lưu trữ ngày có 4 chữ số cho năm
Access 2000 còn có thể xử lý các năm nhuận Năm nhuận là năm
chia hết cho.4 và chia hết cho 100 hoặcchia hết cho 400.`Năm
2000 chia hết cho 400 nên là năm nhuận Quy tắc này là tới hạn để tính toán trên 2 dạng ngày khác nhau Các dạng General Date và Short Date trong Access dùng các tùy chọn dạng ngày ngắn
của hệ điều hành để chỉ ra dạng hiển thị đúng Nếu bạn thiết lập
mục Regional trong Control Panel để hiện ngày với 4 chữ số cho
năm thì tất cả các dạng ngày Generat sẽ thể hiện đủ 4 chữ số Quy tắc trên không bắt buộc bạn phải lập chương trình trong trường hợp sự cố Y2K không thể xảy ra Vì thế, một vài trình ứng dụng Access có thể có lỗi Y2K dù là Access 2000 ra đời vào năm 2000 Hãy ghé thăm ww.microsoft.com/technet/ topics/year2k/- default.htm để xem tổng quát để tài này cùng với sản phẩm đặc trưng và xem lại bản giải quyết về Y2K FMs site (www.fmsine.com /tpapers/index.html#Year 2000 Papers) có một triển vọng khác trên
“
Trang 25đổ Chương 1: GIỚI THIỆU VỀ VIA
một vài vấn để Y2K/Access Một sản phẩm của các thị trường PFMS (Flexible Manufacturing System = hệ thống chế tạo linh hoạt) gọi là Total Access Inspector 2000 vấn dé Y2K trong các ứng dung Access
Bạn có thể thường xuyên sử dụng cả 2 loại thủ tục và hàm để giải quyết một vần đề Hình 1-6 là form dựa vào cả hai loại hàm để trình bày những phép tính toán giữa 2 số Trong form này cho phép người dùng nhập vào hai số trong các hộp văn bản có nhãn là
Number1 và Number2 Click vào một trong các nút chức năng +, -,
/,* để tính toán rồi cho ra kết quả trong hộp Result
eT các cnhonsenedui ăn Binbs o-nltntAhenGioiifaoddhi.bin0hiỂNianirai
Sharkey 1 tas bor 2 Em
LE
+ L
Hình 1-6: Form nay dung để tỉnh toán đơn giản Các hàm của VBA cho phép sử dụng các nút của form và cư trú hộp văn bẳn Fiesuil can cứ vào các mục nhập trong hai hộp văn bản khác
Đoạn chương trình VBA thực hiện form trong Hình 1-6 sử dung 4 cap thủ tục trình bày dưới đây Bốn thủ tục hoạt động do bộ _ phận diều khiển khi click vào bốn nút chức năng (+, -, ”, /) trên form Bộ phận điều khiển này chỉ đơn giản là gọi một hàm, lấy ra các giá trị từ hai hộp văn bản, thực thi việc tính toán được chỉ định
bởi các nút chức năng và trả về giá trị cho các thủ tục sự kiện Đến
lượt thủ tục sự kiện lại trả giá trị từ hàm vào hộp văn bản thứ ba của form Lưu ý rằng sử dụng tiền Äe ở đằng trước các tên hộp văn bản là không bắt buộc Vì mã lệnh ở sau form cùng với hộp văn bản nên việc chỉ định tên form cũng không bắt buộc Các thủ tục sự kiện dùng tiên tố Ae thay thế cho tên lớp dài hơn, chính quy hon
của form (Form_frmCalculator1) xe
Option Compare Database , Wey vis
Option Explicit ` "na ¬
Trang 26
Dim dblResult As Double Private Sub cmdAddition_Click()
Me.txtResult = MyAdder : End Sub
Private Function MyAdder()
dblResult = CDbI(txtNumber1) + CDPbtNumber2) MyAdder = dblResult End Function Private Sub cmdSubtraction_Click() Me.txtResult = MySubtractor End Sub
Private Function MySubtractor()
dblResult = CDbl(txtNumber1) - CDbi(txINumber2) MySubtractor = dblResult End Function Private Sub cmdMultiplication_Click() Me.txtResult = MyMultiplier End Sub
Private Function MyMultiplier()
dbiResult = CDbI(txtNumber1) * CDbI(txtNumber2)
MyMultiplier = dblResult ˆ End Function
Private Sub cmdDivision_Click() Me ixtResult = MyDivider End Sub
Private Function MyDivider(;
dblIResult = CDbl(txtNumbe 1) / CDbl(txtNumber2) MyDivider = db!Result
End Function *
Hàm `šä: cá 2# tục thường trú trong module mã hoá chịu
Trang 27Chương 1: GIỚI THIỆU VỀ VBA
biến để sử dụng chung cho tất cả các thủ tục trong module Vì người dùng chỉ có thể click mỗi lần một phím chức năng nên thao tác này dùng để chia sẻ kết quả của lénh dblResult Cau lénh Option Explicit bắt buộc phải sử dụng để khai báo biến trước khi sử dụng nó Điều này giúp ta tránh được những lỗi phổ biến trong chương
trinh Option Compare Database 1a mét mifc module (module-level)
chỉ định rằng các biến chuỗi xác định, được sắp xếp theo thứ tự chỉ ra bởi vị trí ID trong Control Panel
Cặp của các thủ tục dưới đây minh hoạ rõ về thủ tục, hàm và phương pháp Form frmCalculator2 cé 2 điều khiển, một hộp văn bản có tên fxfÏnput và một nút lệnh có tên là CmdSquarer Form này sẽ tính bình phương của số nhập vào hộp văn bản khi người dùng click nút lệnh CmdSquarer Thủ tục sẽ hiện kết quả trong hộp thông báo
Option Compare Database Option Explicit
Dim dblResult As Doubie
Private Sub cmdSquarer_Click()
MySquarer Form_frmCalculator2.txtinput End Sub
Public Sub MySquarer(MyOtherNumber As Double)
` đblResult= MyOtherNumber * MyOtherNumber MsgBox dbIResullt, vbinformation, _
“Programming Microsoft Access 2000° '._ DoCmd.GoToControl "txtlnput”
' txtinput.SetFocus
' DoCmd.Close acForm, "ftmnCalculator2", acSaveNo End Sub
Thủ tục sự kiện emdSquarer_Click goi thi tue MySquarer va duyệt qua nội dung của txtInput nhu mot đối số MySquarer tính và thể hiện kết quả trong hộp thông báo
Trang 28
Các dòng chú thích để nghị một số thao tác để bạn có thể thực hiện: Một dòng gọi phương pháp GofoControl để chuyển tiêu điểm từ nút lệnh đến hộp văn bản MAu SetFocus 6 ‘dong sau minh hoạ một phương pháp có sẵn để đạt được cùng kết quả Phương pháp Ciose chỉ ra cách thức đóng một form Lưu ý rằng dòng này sử dụng một tên khác, #zmmCoaiculator2 để chỉ tới form cần đóng Việc sử dụng hằng số aeSaueNo rất quan trọng bởi vì nó cho phép form dóng mà không cần phải hỏi có lưu lại các thay đổi hay không
Thủ Tục Thuộc Tính
Bạn sử dụng các thủ tục thuộc tính (property procedures) để định nghĩa các thuộc tính khách hàng cho form, report và module lớp Chúng ta sẽ bàn về các module lớp ở phần dưới và sẽ xem ví dụ về thủ tục thuộc tính trong Chương 7
Có ba loại lệnh thuộc tính: Property Get, Property Let và Property Set Ban c6 thé sit dung nhimg cau lénh này để thêm các thuộc tính đặc biệt vào Form Cau lénh Property Get va End Property c6 thé tra vé mét gid tri giống như thủ tục hàm Nếu ban định nghĩa một thuộc tính chỉ với câu lénh Property Get thì thuộc tính đó là loại thuộc tính chỉ đọc Thuộc tính chỉ đọc thích hợp khi bạn chỉ có quyển xem một số nhưng không được phép chỉnh sửa nó
Với một số thuộc tính quan trọng bạn có thể chỉnh sửa giá trị nhưng không đọc được giá trị Ví dụ người quản trị cơ sở đữ liệu không cần thiết đọc mật mã của người dùng mà họ quản lý Người quản trị chỉ có thể sửa đổi khi người dùng quên mật mã của họ Sử dụng câu lệnh Property- Let cùng với câu lệnh End Property để tạo
một mật mã
Câu lệnh P/operty Set lam việc giống như Property Let Ca hai có thể tạo một thuộc tính Câu lệnh Property.Let thiết lập thuộc tính là một kiểu dữ liệu chẳng hạn là một chuỗi hoặc một, số
nguyên Câu lệnh Properfy Set thiết lập thuộc tính là một đối
Trang 29Chương 1: GIỚI THIỆU VỀ VBA
Vì nhiều thuộc tính có cả hai chức năng đọc và ghi, bạn sẽ thường sử dụng cho cặp Property Get và hoặc là Property Let hoặc là Property Set Trong trường hợp này cặp lénh Property phải có cùng tên để chúng tham chiếu đến cùng thuộc tính
Module
Mét module (don thể) là một thùng chứa các thủ tục và các khai bdo nhu Option Explicit va Dim Có hai loại module co ban Thứ nhất, là các module chudn Day 14 danh sách Module trong cửa sổ Database Các thủ tục trong một rnodule chuẩn độc lập với các đối tượng có sẵn trong một file cơ sở dữ liệu Access Điều này có nghĩa là nó không tham chiếu đến Me hoặc các tên điều khiển không làm tiển tố thích hợp cho các điểu khiến Tuy nhiên, các trình ứng dụng của bạn có thể tham chiếu các thủ tục trong module chuẩn dễ dàng từ bất kỳ đối tượng nào khác
Loại thứ hai của module là một module lớp Có ba trạng thái khác nhau cơ bản của loại này: Các module lớp của form, các module lớp của report và các module lớp của khách hàng Các thủ tục trong một module dễ bị ảnh hưởng chung với các module khác Bạn có thể đưa một thủ tục ra khỏi phạm vi chung bằng cách sử dụng từ khóa Private khi ban định rõ thủ tục lúc ban đầu Xem Hình 1-7 về cú pháp của mẫu này) Bạn cũng có thể khai báo thủ tục rõ ràng cho phạm vi toàn cục bằng cách dùng từ khóa Public
Một module của form là module cho bất kỳ form nào có ít nhất một khai báo hay một thủ tục Việc tạo một thủ tục sự kiện cho một form hoặc một điều khiển trên form là tạo một module lớp của form đó Các module lớp của report làm việc giống như các module lớp của form, nhưng các sự kiện fepor¿ thì khác so với các form và bạn không thể trộn cùng các điểu khiển vào một report như đã làm với một form Bạn có thể tạo các module lớp khách hàng bao gồm các hàm phương pháp và các hàm thủ tục cho một khái niệm giống như khái niệm về người nhân viên hoặc người kế toán Bạn có thể tham chiếu các phương pháp và các thuộc tính cho
21
Trang 30
_các module lớp khách hàng như bạn đã làm để xây dựng các lớp của Access
Bạn dùng các module lớp khách hàng như người cắt bánh ngọt để tạo các trường hợp mới của lớp Access đưa ra hai cách để thực hiện điều này Thứ nhất, bạn có thể dùng câu lệnh Dưm đơn lễ để khai báo cho class va tao mét trường hợp mới của nó Cú pháp của loại câu lệnh này là:
Dim objinstance As New objClass
Giải pháp thứ hai dựa trên một cặp lệnh Thành phân thứ nhất của cặp lệnh là khai báo trường hợp của đối tượng Thành
phần thứ hai thiết lập một tham chiếu đến đối tượng Cú pháp của
các câu lệnh của này là: , Dim objinstance as objClass
Set objlnstance = New objClass
ˆ Tên objClass tham chiếu đến một module lớp cùng với các thủ tục thuộc tính và các hàm phương pháp chung Những hàm phương pháp này thực hiện như các phương pháp của lớp giống như các thủ tục thuộc tính phục vụ cho việc định nghĩa các thuộc tính Chương 7 sẽ trình bày cách tạo và sử dụng các module lớp của khách hàng
GIAO DIỆN VBE
Có lẽ sự thay đổi đáng chú ý nhất trong môi trường phát
"triển Access là giao điện VBE mới Giao diện này đưa Access 2000 gần gũi hơn với Microsoft Word, Excel và PowerPoint xuất phát từ viễn cảnh giao điện phát triển Phần này sẽ xem xét kỹ cách dùng và cách trình bày (layout), các cửa sổ, trình bày cách sử dụng chúng để gỡ rối Ngoài ra còn xem a dại cách h dùng Object Browser (Trinh
Trang 31@ chuong 1: GIỚI THIỆU VỀ VBA
Ctta Sổ VBE
Access 2000 dé nghị ít nhất ba cách dẫn tới các module không có form hoặc report ở sau Đầu tiên là cách quen thuộc nhất bạn
thường thấy trong các thành phần khác của Office, từ cửa sổ
Database chon lénh Tools-Macro-Visual Basic Editor Mét shorcut (lệnh cắt) thuận tiện cho cách này là bấm tổ hợp phím Alt+F11
Cách này đưa bạn trực tiếp đến VBE Bạn có thể sử dụng Alt+F11
để quay trở lại hay chuyển tới giữa các cửa sổ Database và VBE Cách thứ 2, nếu bạn có sẵn một module chuẩn, hãy click vào nút Module trong cửa sổ Database rồi double-click vao module chudn nào bạn muốn xem Cửa sổ VBE xuất hiện chứa nội dung của Module đó Cách thứ ba, nếu bạn muốn tạo một module chudn mdi, hay click nuit Module trong cửa sổ Database rồi click nit New trên
thanh công cụ để mở một module trống trong VBE
ge GHI CHÚ: Nhóm phát triển Office đang làm việc để đưa ra cách thứ tư cho VBE, đó là cách quen thuộc đối với những người phát triển Access Bạn có thể click vào nút Code trong cửa sổ Database với module chuẩn form hoặc report đã chọn Nút Code sẽ mở cửa sổ VBE với module tương ứng
Để mớ module hậu thuẫn cho một form hay report, đầu tiên bạn phải mở đối tượng trong khung nhìn Design Bạn có thể click nút Code trên thanh công cụ Design Thao tác này mở module và
đặt vị trí hiển thị vào đỉnh của module Bạn có thể đi chuyển thẳng đến thủ tục sự kiện của một đối tượng trên form.hay report bằng
cách click vào nút Build bên cạnh sự kiện trong tờ thuộc tính Nếu không có thủ tục sự kiện nào, bạn hãy click vào nút Build và chọn Code Builder, một màn hình thủ tục trắng sẽ xuất biện cho đối
tượng đó ; :
Khi bạn di chuyển đến VBE, bạn có khả năng mở các cửa số Project và Properties Đây là cách thuận lợi để mở và kiểm tra các
module khác trong một trình ứng dụng Cửa số Project hiển thị các
module khéng hau thuẫn form hay report trong folder Modules Cac 23
Trang 32
module hau thudn các form va report xuất hiện trong folder Misrosoft Access Class Objects Ban cé thé chon mét folder thích hợp với một form hoặc một report để xem và thiết lập các đối tượng thích hợp với lớp Để mở cửa sổ Project hoặc Properties, chọn lệnh thích hợp từ menu View hoặc sử dụng bàn phím và thanh công cụ
shortcuts " : ,
ce GHI CHÚ: Thứ tự trong cửa sổ Properties để trình bày các đối tượng cho một đối tượng lớp của Access, đối tượng đó phải được
mở trong khung nhìn Design Hãy Double-click một module hoặc
một class trong cửa sổ Project để hiển thị các chỉ dẫn và các
khai báo thích hợp trong cửa sổ Code tương ứng, lưu ý rằng các
đối tượng chỉ xuất hiện nếu đối tượng lớp cũng được mở trong
khung nhìn Design
Trang 33a Chương 1: GIG! THIEU VE VBA
Double-click vao bat ky déi tugng Module hoặc lớp Access nào khác trong cửa số Project dé mở cửa số Code thích hợp Từ đó bạn có thể kiếm tra, chỉnh sửa, hoặc sao chép đoạn chương trình Cửa sổ Code có cách trình bày quen thuộc với các hộp danh sách thả xuống của Object và Procedure ở trên đỉnh Bạn có thể dùng những hộp này để di chuyển xung quanh một module lớn hoặc mở các thủ tục mới trong thủ tục đã có sẵn Cửa sổ Properties trình bày các thuộc tính cho module hoặc lớp Access hiện hành đã chọn Bạn có thể chỉnh sửa các thuộc tính đối tượng trong cửa số này, nó thường thích hợp và linh boạt hơn để chỉnh sửa các thuộc tính đối tượng cho một form hoặc một report trong khung nhìn Design
Gỡ Rối
Bạn có thể dùng cửa sổ Code để gỡ rối và xem xét đoạn chương trình của bạn Bạn có thể thêm hoặc di chuyển một điểm ngắt trên một câu lệnh bằng cách click vào lễ bên trái của câu lệnh VBE đánh dấu điểm dừng với chấm nhỏ xung quanh theo thói quen ở lễ trái Hình 1-8 trình bày chương trình gỡ rối được dừng trên câu lệnh thứ hai của dòng thứ tư trong một thủ tục; mũi tên bên lễ trái chỉ đồng dưới của đoạn chương trình sẽ được thi hành
lam =} =
BR
Private Sub form | Long} 3
Thais az a C1 yEC ctAY
Msgbox "The tore loaded : volnformation, „„
“Programming Kicrosote access 2000" THỊ đế A post
e maa Caption “New Caption”
hive WtRed, VEA feta a bicperey
He, txthyTextBos Text " “Hi, there!*°
End Sub *
zJš 4 † Ls
Trang 34
Bạn chọn lệnh Continue trong menu Run để bất đầu thực hiện đoạn chương trình sau điểm dừng Hình 1-9 trình bày kết quả sau khi thực hiện phần còn lại của chương trình trong thủ tục Form_frmSample1 Luu y ring ddu đề của form đọc là “New Caption” Hộp van ban doc dugc la “Hi, there!”
Bạn có thể dùng mũi tên để nhảy qua một hay nhiều dòng của chương trình Ví dụ, Hình 1-10 là kết quả của việc bạn drag mũi tên đến dòng thực biện phương pháp Se(Foceus và chọn lệnh Continue từ menu Run Thủ tục này nhảy qua câu lệnh gán “New ị Caption” thành thuộc tính Caption cia form, vi thé form nay giống | như form trong Hình 1-9, nhưng tiêu để của nó là “My Default
Caption”
Trang 35@ chugng 1: GIỚI THIỆU VỀ VBA
Microsoft Vaual Hasic ị
Run-time error *2185:
You cant reference a property or method for a control unless the
control has the focus, | | | { Hình †1-11 Kết quả của việc nhảy đến dòng cuối cùng trong Hình 1-8 và tiếp tục thực hiện
Nhiều chức năng của cửa số Debug trong Microsoft Access 97 cũng được sử dựng trong Access 2000 Cửa số Debug trong Access 97 có trang Watch và trang Local Mỗi trang có một màn hình chẻ trong cửa số Immediate có giá trị như một phần của trang Trong Access 2000, các cửa sổ Watch, Local và Immediate là những cửa sổ riêng biệt Bạn có thể mở các cửa sổ này trong VBE bằng cách dùng Menu View Bạn có thể drag (kéo), drop (thả) và định lại kích thước các cửa sổ này dọc theo các cửa sổ Code, Project và Properties Chọn lệnh Tool-Option và dùng trang Docking để chỉ định cửa số nào cần chặt ngắn
Bạn có thể dùng cửa số Watch để theo dõi giá trị của biểu
thức, các biến và các đối tượng khi thực hiện chương trình Sau khi
mở cửa sổ Watch, bạn có thể thêm các biến để quan sát bằng cách
chọn lệnh Debug-Add Watch Chọn biến cần theo đõi trước khi thực hiện câu lệnh Khi hộp thoại Add Watch mở, chọn một kiểu của Watch rồi click nút OK để đóng hộp thoại này Giá trị của biến được trình bày trong cửa sổ Watch khi câu lệnh được thực hiện Nếu bạn chạy chương trình theo từng bước, bạn có thể kiểm tra giá trị của các biến sau mỗi bước
Hình 1- 12 _ trình bay | giá trị thuộc tính Caption của
#mSample1 ngay sau khi đòng lệnh thay đổi giá trị từ “My Default
Trang 36bày giá trị của txtMyTextBox là Nul vì câu lệnh gán chưa được thực hiện
Hình 1-12 Cửa sổ Watch trình bày trạng thái của biểu thức như một
thủ tục sự kiện được thực hiện
Cửa số Local thể hiện tất cả các biến trong khi chương trình được thực hiện ở chế độ ngắt (break mode) Khi bạn ngưng thực hiện chương trình tại điểm ngắt, cửa sổ Local chứa một đối tượng 3e Bạn có thể mở rộng liên tiếp đối tượng Me và các thành phần để tìm các giá trị của tất cả các thuộc tính và các biến, Điều này có thể giúp ích cho bạn nếu bạn có yêu cầu chỉ tiết về mọi mặt giúp bạn hiểu rõ chương trình được thực hiện như thế nào
Cửa sổ Immediate có thể là công cụ thích hợp nhất để phát triển chương trình và bẫy lỗi Từ cửa sổ này bạn có thể chạy bất kỳ hàm hay chương trình con nào Bạn cũng có thể đánh giá các biểu thức và các cách khác nhau để viết hàm Trước khi các biểu thức Watch có hiệu lực, cửa sổ Immediate có một chỗ thuận tiện để in các kết quả trung gian trong chế độ ngắt và nó vẫn có thể đáp ứng các chức năng liên quan trong hoàn cảnh đặc biệt
Trang 37Chuong 1: GIGI THIEU VE VBA
quả là 3 trong cửa sổ này Vấn để này cũng đúng đối với thủ tục CallSecondCalculator Trong trường hợp này, kết quả là 4 Mẫu cuối cùng trong ví dụ là cách giải thích để đưa các đối số cho hàm MySecondCaleculator - ban phải gõ đúng tên, chừa một khoảng trống, và phân cách các tham số bằng dấu phẩy Mẫu này là tới hạn bởi vì nó trình bày cách sử dụng các tham số đã truyền cho thủ tục hoặc hàm để tính một giá trị trả về
2§Micteseft Vitual Ea - ChapLel [deakj ^-x 2s
HỘ Ki V@w set Gebug Bun Joos Addins window Help %3: COM «ly ns eK MSW? SE ee oT)) + JGenaae |] [MyFeetCeikcuator v 1 Sub HyFtcstCaiculatoc (} Dim Result Result = t+ 2 Debug.Print Result End Sub Sub CaliSecondCalculator (} MySecondCalculater 1, 3 End Sub a Sub NySecondCelculater (First, Second) Dam Result
Result © Firec + Second ‡
Debug Print Result 4 MyFarstCalcuietor 3 CnilSecondCaiculator ‘ HySecondtalculator 2,3 5 ?bace 09/11/1998 lại + Hình 1-13 Cửa sổ Immediale trình bày cách chạy các thủ tục và các hàm có sẵn
Bạn cũng có thể sử dụng cửa số Immediate để chạy các hàm có sẵn hay các hàm khách hàng Với một hàm, bạn phải chỉ ra lệnh in để trả về kết quả của hàm Bạn có thể sử dụng từ khóa Prim hoặc dấu chấm hỏi “?” theo sau là tên hàm va ký hiệu trả về đầu dòng Mẫu cuối cùng trong cửa sổ Immediate chỉ ra cách gọi hàm Date có sẵn
Trang 38Trình Duyệt Đối Tượng
Trình duyệt đối tượng (Object Browser) trình bày trong Hinh 1-14 là công cụ mạnh để nghiên cứu về các mô hình đối tượng Nó đặc biệt quan trọng đối với những người phát triển Aeccess 2000, bởi vì nó có nhiều mô hình đối tượng mới Ví dụ Access 2000 giới thiệu một ngôn ngữ phát triển truy xuất dữ liệu mới: ActiveX Data Object (ADO), với ngôn ngữ này thì Data Access Object (DAO) trở thành lỗi thời Tối thiểu có ba kiểu đối tượng làm cơ sở bổ sung cho Access 2000 về ADO lApons ~] os =| 9| | =] as Classes Members of Recordset a ParameterAttibutesEnum a] Ø toveComplete i a ParameterDirectionEnum © MoveFirst 3% Parameters © MoveLast a PersistFormatEnum % MoveNext a PositionEnum ‘> MovePrevious 0% Properties ® NextReconcet 3% Property > Open a PropertyAttibutesEnum PageCount | <2 EEE PageSize x RecordStalusEnum Properties aP ResyncEnum #Ø RecordChangeComplete ##' SchemaEnum _*j|}F2 RecordCount xị ì Class Recordset ;_ Member of AD909
Hinh 1-14 Khung nhin Object Browser cia Iép Recordset ADODB va m6t tap hop chon lựa các thành phần của nó
Trang 39@ Chương 1: GIGI THIEU VE VBA
danh sách thả xuống ở đỉnh cia Object Browser Diéu nay lam thay đổi các nội dung của danh sách Classes va danh sách Members trong trình duyệt Hình 1-14 trinh bay lép Recordset da chon trong danh sách các Class và một danh sách các thuộc tính, phương pháp
và sự kiện xuất hiện trong danh sách Membecrs Chọn một thành
phan va click nút ? để xem hướng dẫn chỉ tiết về chủ dé dé Object Browser còn có thể tìm kiếm các lớp và các thành phần bằng công cụ tìm kiếm của nó Dùng hộp danh sách thả xuống thứ hai để chỉ định tiêu chuẩn tìm kiếm Điều này, đôi khi trả về các tập hợp kết quả trong một vài thư viện khác nhau Object Browser cũng cho phép bạn kiểm tra từng kết quả riêng biệt
JET, CÁC KIỂU DỮ LIỆU VÀ KHAI BÁO
Trong Access bạn phải chỉ ra các kiểu đữ liệu ở nhiều nơi, dua các biến vào trong các thủ tục và các bảng lưu trữ dữ liệu trong một thiết bị lưu trữ Phần sau sẽ trình bày một số vấn để phát triển đi đôi với kiểu dữ liệu từ Jet4 và cách sử dụng biến trong thủ tục Jet
Access 2000 cung cấp sẵn hai phương tiện cơ sở dữ liệu Trước đây Access đã được gắn liên với phương tiện cơ sở dữ liệu Jet Access 2000 gidi thiệu cơ sở dữ liệu tương thích với SQL Server 7, khả năng tương thích với SQL Server được bàn đến trong Chương 12 Phần này thảo luận về những đổi mới của Jet 4 tác động vào việc thiết kế ứng dụng trên Access 2000 Sự đổi mới này có thể làm ảnh hưởng đến kích thước của ñle cơ sở dữ liệu và record khóa Bạn làm việc với kiểu dữ liệu của field đã chọn nào (gồm cdc field Memo, Hyperlink (siêu liên kết) và khóa tự động tăng) và cách liên kết với nguồn dữ liệu bên ngoài
Trang 40
phiên bản trước đây của Access cho các ngôn ngữ Nhật, Trung Quốc và các ngôn ngữ khác đã chọn Unicode là một phần trong chuẩn ISO 10646, chuẩn này cung cấp cách mã hóa số cho tất cả các ngôn ngữ Dạng thức mới này yêu cầu 2 byte thay vì 1 byte như trước đây để miêu tả một ký tự Điều này có thể làm tăng gần gấp đôi kích thước của các cơ sở dữ liệu do các fñield ký tự cơ sở gây ra Để đến bù sự gia tăng này đJet tự động nén và xả nén loại đữ liệu này khi cần thiết Nó nén fñield memo có chiều dài khoảng 4000 ký tự hoặc ít hơn Trong một fñield, có thể nén một số dòng nhưng không phải là tất cả các dòng dav biệt là field dữ liệu kiểu memo Ca Access va ADO tự động nén các ký tự dạng Unicode nhưng DAO không cung cấp việc nén dữ liệu kiểu chuỗi Những người viết chương trình trong Jet SQL có thể st dung ménh dé WITH COMPRESSION cho các bang chỉ định
Để thêm dạng thức mới cho các kiểu dữ liệu ký tự, kích thước trang có thể tăng gấp đôi lên đến 4KB Điều này có thể làm giảm sự xảy ra đồng thời những xung đột trang khoá Jet ghi dia chi nay bằng cách khóa dòng đơn Bạn có thể giảm tối thiểu các vấn dé xảy ra đồng thời bằng cách khóa các record riêng rẽ thay thế cho cả các trang Access 2000 cho phép các người sử dụng cập nhật hai record trên cùng trang xảy ra đồng thời
GHI CHÚ: Kích thước trang mới tăng thêm kích thước cơ sở dữ
liệu tối đa từ 1.07 GB đến 2.14 GB
Việc khóa dòng đơn là tùy chọn mặc định toàn bộ, nhưng các người sử dụng và các người phát triển có thể dự phòng để khóa trang truyền thống Các fñeld memo và các chỉ mục không bao giờ hỗ trợ việc khóa dòng đơn ADO qua truy cập dữ liệu hoặc Jet SQL cho phép rút tùy chọn để khóa ở mức trang Các form Access qua truy cập dữ liệu và DAO luôn luôn qua khóa dòng đơn