Giới thiệu :
Trong hệ quản trị cơ sở dữ liệu Microsoft Access, bên cạnh việc sử dụng các công cụ trực quan như Bảng (Table), Truy vấn (Query), Biểu mẫu (Form) và Báo cáo (Report), ngôn ngữ lập trình Access Basic (VBA) cung cấp khả năng tự động hóa và xử lý các bài toán nghiệp vụ phức tạp. Toàn bộ mã lệnh, các khai báo, hàm và chương trình con đều được quản lý tập trung trong đối tượng Đơn thể (Module). Bài 5.1 cung cấp kiến thức nền tảng về phương pháp xây dựng thủ tục, quản lý đơn thể mẫu biểu và đơn thể dùng chung, cùng các quy tắc khai báo biến, hằng số, mảng và kiểu dữ liệu chuẩn trong Access Basic.
Mục tiêu :
Giải thích được công dụng của việc sử dụng Access Basic; phân biệt được Hàm (Function) và Thường trình phụ (Subroutine).
Tạo và quản lý được Đơn thể của mẫu biểu/báo biểu (Form/Report Module) và Đơn thể dùng chung (Global Module).
Sử dụng được các công cụ trên cửa sổ Module, menu Debug và thiết lập được các tham chiếu thư viện (References).
Thực hiện thành thạo việc khai báo kiểu dữ liệu, biến số, hằng ký hiệu và biến mảng theo đúng quy chuẩn.
1. TẠO THỦ TỤC, ĐƠN THỂ
1.1. Tạo thủ tục (Procedure)
Công dụng của việc sử dụng Access Basic :
Mở rộng khả năng xử lý dữ liệu và tự động hóa các thao tác mà Macro hoặc biểu thức thông thường không thực hiện được.
Kiểm tra tính hợp lệ và toàn vẹn của dữ liệu với các điều kiện logic phức tạp trước khi cập nhật vào CSDL.
Tối ưu hóa tốc độ xử lý, tạo giao diện điều khiển chuyên nghiệp và hỗ trợ cơ chế bẫy lỗi linh hoạt trong quá trình chạy ứng dụng.
Thủ tục là một khối lệnh hoàn chỉnh thực hiện một nhiệm vụ cụ thể, được chia làm 2 dạng chính:
1.1.1. Khai báo và tạo Hàm (Function)
Là thủ tục thực hiện một chuỗi thao tác tính toán và trả về một giá trị thông qua chính tên của hàm. Hàm có thể được gọi trong các thủ tục khác, trong biểu thức của Form/Report hoặc trực tiếp trong câu lệnh truy vấn (Query).
Cú pháp:
[Public | Private] Function <Tên_hàm>([Danh_sách_đối_số]) [As <Kiểu_trả_về>]
<Các câu lệnh thi thực>
<Tên_hàm> = <Giá_trị_trả_về>
End Function
Ví dụ:
Public Function TinhThue(ByVal Luong As Currency) As Currency
If Luong > 5000000 Then
TinhThue = Luong * 0.1
Else
TinhThue = 0
End If
End Function1.1.2. Khai báo và tạo thường trình phụ (Subroutine)
Là thủ tục thực thi một tập hợp các hành động hoặc tính toán nhưng không trả về giá trị trực tiếp qua tên thủ tục. Thường dùng để thực hiện các thao tác đóng/mở đối tượng, gán dữ liệu hoặc đáp ứng một biến cố (Event).
Cú pháp:
[Public | Private] Sub <Tên_thủ_tục>([Danh_sách_đối_số])
<Các câu lệnh thi thực>
End Sub
Ví dụ:
Public Sub ThongBaoKetThuc()
MsgBox "Quá trình cập nhật dữ liệu hoàn tất!", vbInformation, "Thông báo"
End Sub1.2. Tạo đơn thể (Module)
Đơn thể (Module) là nơi chứa các dòng mã lệnh viết bằng ngôn ngữ Access Basic.
1.2.1. Tạo đơn thể của mẫu biểu, báo biểu (Form/Report Module)
Là đơn thể gắn liền trực tiếp với một Form hoặc Report cụ thể (Class Module), chỉ tồn tại khi biểu mẫu hoặc báo biểu đó mở.
Dùng để chứa các thủ tục biến cố (Event Procedures) xử lý các tương tác của người dùng trên màn hình (như nhấp chuột vào nút lệnh, thay đổi giá trị ô nhập liệu).
Cách tạo và mở:
B1 : Mở Form hoặc Report ở chế độ thiết kế (Design View).
B2 : Chọn menu View -> Code (hoặc nhấn nút View Code trên thanh công cụ / nhấn phím F7).
B3 : Cửa sổ soạn thảo mã lệnh của Form/Report xuất hiện.
1.2.2. Tạo đơn thể dùng chung (Global Module / Standard Module)
Là đơn thể tồn tại độc lập trong cơ sở dữ liệu, hiển thị trong danh mục Modules của khung điều hướng.
Chứa các biến toàn cục, các hàm và thường trình phụ dùng chung cho toàn bộ ứng dụng (mọi Form, Report, Query đều có thể truy xuất).
Cách tạo:
B1 : Chọn tab menu Create.
B2 : Trong nhóm Macros & Code, chọn biểu tượng Module.
B3 : Cửa sổ soạn thảo mã lệnh mới xuất hiện.
B4 : Tiến hành soạn thảo mã nguồn, sau đó chọn File -> Save để lưu đơn thể với một tên cụ thể (ví dụ:
mdl_TienIch).
Các chức năng trên thanh công cụ của cửa sổ Module :
Save: Lưu nội dung đơn thể hiện hành.
Object Box (Hộp bên trái): Liệt kê và chọn đối tượng làm việc (General hoặc các điều khiển trên Form).
Procedure Box (Hộp bên phải): Liệt kê các sự kiện hoặc tên hàm/thủ tục có trong Module.
Run Sub/UserForm (phím F5): Thực thi chạy kiểm tra thủ tục đang đặt con trỏ soạn thảo.
Pause / Break (Ctrl + Break): Tạm dừng thi hành mã lệnh để kiểm tra.
Reset: Dừng hoàn toàn việc thực thi chương trình và đặt lại trạng thái ban đầu.
Các chức năng trong menu Debug :
Compile Database / Compile VBAProject: Biên dịch kiểm tra toàn bộ mã nguồn để phát hiện sớm các lỗi cú pháp.
Step Into (phím F8): Thi hành từng dòng lệnh một (chạy từng bước để dò lỗi).
Step Over (Shift + F8): Thực thi lướt qua một lời gọi thủ tục/hàm con mà không nhảy chi tiết vào thân của nó.
Toggle Breakpoint (phím F9): Đặt hoặc gỡ bỏ điểm dừng (Breakpoint) trên dòng lệnh.
Clear All Breakpoints (Ctrl + Shift + F9): Xóa tất cả các điểm dừng đã thiết lập.
1.3. Thiết lập tham chiếu đến các thư viện trong Access Basic
Access Basic cho phép mở rộng các đối tượng làm việc bằng cách liên kết với các thư viện bên ngoài (như DAO, ADO, Microsoft Excel, Word…):
B1 : Tại cửa sổ soạn thảo Module, chọn menu Tools -> References.
B2 : Hộp thoại References xuất hiện, liệt kê danh sách các thư viện hỗ trợ (Available References).
B3 : Đánh dấu chọn vào các thư viện cần dùng (ví dụ: Microsoft Office Access database engine Object Library hoặc Microsoft ActiveX Data Objects Library).
B4 : Dùng nút Priority để thay đổi mức độ ưu tiên giữa các thư viện nếu cần thiết.
B5 : Chọn OK để lưu thiết lập tham chiếu.
1.4. Sử dụng thủ tục
Gọi thủ tục con (Sub):
Cú pháp:
Call <Tên_thủ_tục>([Đối_số])hoặc viết trực tiếp:<Tên_thủ_tục> [Đối_số]Ví dụ:
Call ThongBaoKetThucGọi hàm (Function):
Hàm được sử dụng trong một phép gán hoặc trong một biểu thức tính toán.
Ví dụ:
ThuePhaiNop = TinhThue(LuongCoBan)
2. KHAI BÁO CÁC THÀNH PHẦN CƠ BẢN
2.1. Khai báo kiểu dữ liệu (Data Type)
Access Basic quy định các kiểu dữ liệu chuẩn với dung lượng bộ nhớ và đặc tính cụ thể:
| Tên kiểu dữ liệu | Kích thước | Miền giá trị / Ý nghĩa |
| Byte | 1 byte | Số nguyên dương không dấu từ 0 đến 255 |
| Integer | 2 bytes | Số nguyên từ -32,768 đến 32,767 |
| Long | 4 bytes | Số nguyên lớn từ -2,147,483,648 đến 2,147,483,647 |
| Single | 4 bytes | Số thực dấu chấm động độ chính xác đơn |
| Double | 8 bytes | Số thực dấu chấm động độ chính xác kép |
| Currency | 8 bytes | Dữ liệu tiền tệ, chính xác cố định đến 4 số thập phân |
| String | 1 byte/ký tự | Chuỗi ký tự, văn bản độ dài linh hoạt |
| Date | 8 bytes | Dữ liệu ngày tháng năm và thời gian (kẹp giữa # #) |
| Boolean | 2 bytes | Kiểu luận lý logic, nhận giá trị True (-1) hoặc False (0) |
| Variant | 16 bytes + | Kiểu tự do (mặc định), có thể chứa bất kỳ loại dữ liệu nào |
Bảng 1: Các kiểu dữ liệu cơ bản trong Access Basic
2.2. Khai báo biến (Variable)
Biến là vùng nhớ dùng để lưu giữ thông tin có thể thay đổi trong quá trình chạy chương trình.
Cú pháp:
Dim <Tên_biến> [As <Kiểu_dữ_liệu>]
Ví dụ:
Dim MaNV As String
Dim SoLuong As Integer
Dim DonGia As Currency, ThanhTien As Currency
Phạm vi của biến:
Biến cục bộ (Local): Khai báo bằng từ khóa
Dimbên trong một Sub/Function, chỉ sử dụng nội bộ trong thủ tục đó.Biến tĩnh (Static): Khai báo bằng từ khóa
Staticbên trong thủ tục, giá trị được giữ nguyên giữa các lần gọi liên tiếp.Biến cấp Đơn thể (Module-level): Khai báo ở phần đầu đơn thể bằng từ khóa
DimhoặcPrivate, dùng chung cho mọi thủ tục trong cùng đơn thể.Biến toàn cục (Global): Khai báo ở phần đầu của Global Module bằng từ khóa
Public(hoặcGlobal), dùng chung cho toàn bộ ứng dụng.
3.3. Khai báo hằng và hằng ký hiệu
Hằng là một đại lượng có giá trị không đổi trong suốt quá trình chạy chương trình, giúp mã nguồn rõ ràng và dễ bảo trì.
Cú pháp:
[Public | Private] Const <Tên_hằng> [As <Kiểu_dữ_liệu>] = <Giá_trị>
Ví dụ:
Const TY_GIA As Currency = 25000
Const TEN_TRUONG As String = "Trường Trung cấp Nghề Củ Chi"
Public Const PI As Double = 3.14159265
Hằng ký hiệu định sẵn: Access Basic cung cấp nhiều hằng hệ thống có tiền tố ac hoặc vb (ví dụ: vbYes, vbNo, acViewNormal, acForm).
2.4. Khai báo mảng (Arrays)
Mảng là tập hợp các phần tử có cùng kiểu dữ liệu, được truy xuất thông qua chỉ số (index).
Mảng tĩnh (kích thước xác định trước):
Dim Diem(1 To 5) As Single(Mảng Diem gồm 5 phần tử từ chỉ số 1 đến 5)
Dim BangLuong(10) As Currency(Mảng BangLuong gồm 11 phần tử có chỉ số từ 0 đến 10)
Mảng nhiều chiều:
Dim MaTran(1 To 3, 1 To 4) As IntegerMảng động (kích thước thay đổi linh hoạt):
Bước 1: Khai báo mảng rỗng:
Dim DanhSach() As StringBước 2: Cấp phát kích thước khi biết số lượng:
ReDim DanhSach(1 To 50)Bước 3: Dùng từ khóa
Preserveđể mở rộng mảng mà không xóa mất dữ liệu cũ:ReDim Preserve DanhSach(1 To 100)
Bài tập : Hãy tạo 1 form giống như mẫu sau đây
Hướng dẫn Bài 1