Chương 8: MODULES (L ập trình trong Access)
8.1 Tổ chức và hoạt động của chương trình trong Access
8.1.1 Lập trình trong Access
Để lập trình trong Access người ta dùng ngôn ngữ VBA (Visual Basic Application). VBA (hay ngắn gọn là Access Basic) là ngôn ngữ lập trình hoạt động theo các sự kiện, trên nguyên tắc của lập trình cấu trúc, nhằm xây dựng các ứng dụng một cách linh hoạt tr ên nền các đối tượng của Access như: Table, Query, Form, Report, Macro, đ ồng thời tương tác với các dữ liệu: nguyên, thực, logic, văn bản, v.v.. Lập tr ình cấu trúc, hiểu nôm na l à từ 1 bài toán A, ta chia nhỏ thành các bài toán con A1, A2, A3, …, An.
Lập trình cho A thì khó, còn l ập trình cho các Ai thì dễ hơn vì độ phức tạp ít hơn (chia nhỏ để dễ quản lý mà!). Mỗi Ai được lập trình theo một đơn thể (Module) có dạng được gọi là chương trình con.
Chương trình con có hai dạng: Thủ tục hoặc hàm. Mỗi chương trình con là một dãy các lệnh để thực hiện một công việc n ào đó. Một chương trình có thể có rất nhiều chương trình con.
8.1.2 Cấu trúc một chương trình con
a. Chương trình con dạng thủ tục
Thủ tục bao gồm các thành phần: Đầu thủ tục, thân thủ tục v à kết thúc thủ tục.
1. Đầu thủ tục có dạng:
Có thể bạn quan tâm!
- Quản trị cơ sở dữ liệu Access - Đại học Kinh doanh và Công nghệ Hà Nội - 10
- Thiết Kế Một Báo Biểu Bằng Design View
- Tự Động Hoá Ứng Dụng Bằng Macro
- Quản trị cơ sở dữ liệu Access - Đại học Kinh doanh và Công nghệ Hà Nội - 14
- Các Phép Toán, Hàm, Bi Ến, Biểu Thức.
- Quản trị cơ sở dữ liệu Access - Đại học Kinh doanh và Công nghệ Hà Nội - 16
Xem toàn bộ 145 trang tài liệu này.
[Private] Sub <Tên thủ tục > [(<Danh sách các đối số)>]
Bạn lưu ý cách viết: Những gì nằm trong […] là tuỳ ngữ cảnh mà có thể có hoặc không. Còn nhừng gì nằm trong l <…> thì bắt buộc phải luôn luôn có.
2. Thân thủ tục
Thân thủ tục nằm sau đầu thủ tục. Thân thủ tục chứa các lệnh để giải quyết một công việc n ào
đó (các lệnh cụ thể bạn sẽ tìm hiểu sau).
3. Kết thúc thủ tục
Để báo cho máy tính biết kết thúc một thủ tục, ta viết d òng lệnh:
End Sub
Vậy về cơ bản một chương trình con dạng thủ tục có cấu trúc nh ư sau:
[Private] Sub <Tên thủ tục > [(<Danh sách các đối số)>]
<Thân thủ tục >
End Sub
b. Chương trình con dạng hàm (Funtion)
Cũng như thủ tục, hàm cũng có cấu trúc ba phần: Đầu h àm, thân hàm và kết thúc hàm. Dạng tổng quát như sau:
[Private] Function <Tên hàm > [(<Danh sách các đ ối số)>]
<Thân hàm > End Function
Sau đây là một số ví dụ:
Ví dụ1: Lập trình hiển thị câu chào: “Chào bạn đã đến với lập trình Access”
Tuy nó đơn giản, nhưng bạn nên nhớ một nhà hiền triết đã từng nói: “cuộc đi ngàn dăm, khởi sự từ bước đi thứ nhất” hay “cái cây có đường kính rộng hàng mét khởi sự từ cái mầm nhỏ” , trước hết bạn cứ quan tâm đến cái “mầm nhỏ” đ ã, rồi dần dần tiến đến “cái cây”. Để lập tr ình bạn theo các bước sau:
Bước 1:
Chọn Module và chọn New, sau đó cửa sổ để bạn soạn thảo ch ương trình (hay còn gọi là cửa sổ Code) hiện ra như sau:
Bước 2: Bạn gõ vào cửa sổ Code các lệnh (bạn cứ g õ rồi sau sẽ hiểu lệnh đó l à gì?) như hình sau:
Bước 3: Chạy chương trình:
Chọn Run/Run Sub (hoặc kích nút) như hình sau:
Sau khi chạy chương trình, kết quả như hình sau:
Giải thích:
Lệnh MsgBox(“Chao ban da den voi lap trinh Access”) s ẽ đưa ra một thông báo như hình trên. Ta có thể gọi đây là lệnh hiển thị dữ liệu cũng đ ược. Khi đưa ra kết quả trên chương trình tạm dừng và nếu bạn chọn OK thì chương trình sẽ chạy tiếp và thực hiện lệnh sau lệnh MsgBox(...).
Ví dụ 2: Vào 2 số nguyên, tính tổng và hiển thị tổng của hai số đó.
Bạn gõ vào cửa sổ Code như hình sau:
Khi chạy chương trình, máy yêu cầu bạn gõ từ bàn phím giá trị a như giao diện sau:
Đến đây nếu bạn gõ vào số 5 và chọn OK (Hay ấn Enter) thì số nguyên 5 sẽ lưu vào biến a.
Máy lại đưa ra giao diện:
Và nếu bạn gõ vào số 4 và chọn OK thì máy sẽ lưu số nguyên 4 vào biến b. Tiếp tục máy sẽ
tính tổng và đưa kết quả là 9 như hình sau:
Giải thích:
Lệnh: Dim a As Integer
Nghĩa là: Biến (Dim) a là (As) nguyên (Integer). Bạn khai báo biến a là nguyên, để máy sử dụng ô nhớ tương ứng với số nguyên mà!, tất nhiên nếu là số thực thì ô nhớ phải lớn hơn, v.v.. lý do khai báo là v ậy.
Lệnh: a = InputBox("Moi ban go vao so a? ")
Nghĩa là: Hộp nhập liệu (InputBox) ra thông báo: "Moi ban go vao so a? “. Nếu bạn g õ vào một số thì số đó được lưu vào biến a
Lệnh: s = a + b
Đây là lệnh “gán”, nghĩa là máy sẽ lấy nội dụng biến a (bạn vừa g õ vào 5), cộng với nội dung của biến b (bạn vừa gõ vào 4), kết quả sẽ là 9, “gán” kết quả này cho biến s (gọi lệnh “gán” là như vậy).
Lệnh: MsgBox "Tong 2 so la: " & Str(s)
Đây là lệnh hiển thị dữ liệu, nh ưng dữ liệu thì phải đồng nhất, ở đây: "Tong 2 so la: "(l à dữ liệu văn bản) còn nội dung của biến s là một số nguyên. Để ghép được bạn phải đổi nội dung của biến s (số nguyên) thành dạng văn bản bằng hàm Str (s): Str viết tắt từ chữ String (văn bản). Để ghép hai văn bản ta d ùng dấu & (cũng như để cộng 2 số ta dùng dấu + ).
Máy (hay nói chính xác là chương tr ình) làm việc cũng như con người, do vậy ta phải liệt k ê mọi hành động (lệnh) để máy theo đó m à làm. Quá trình thiết kế, liệt kê các “hành động” đó gọi là lập trình. Và chúng ta đang nói về lập trình đây!
Ví dụ 3: Chuyển ví dụ 2 sang dạng hàm (Function).
Sau khi chạy ta thấy có cùng giao diện như ví dụ 2. Rồi bạn sẽ thấy thủ tục khác h àm ở chỗ nào, nhưng nó đều là chương trình con nên có lúc nó ph ải giống nhau chứ! Cũng nh ư những đứa con trong một gia đ ình, đều là con cả mà, nhưng phân biệt con trai hay con gái bởi v ì nó còn những chức năng khác. Bước đầu học lập trình bạn tạm vừa lòng thế đã!
8.2 Thủ tục đáp ứng sự kiện
Sức mạnh của Access là thủ tục đáp ứng sự kiện. Vậy đáp ứng sự kiện l à gì? Dân gian có câu nói vui: “Ông đưa chân giò, bà thò chai rượu”. Ông đưa bà “chân giò”, bà đáp ứng lại “chai rượu”. Vậy là bà đã đáp ứng sự kiện “đưa chân giò” của ông băng việc “tung ra chai r ượu”. Khi các bạn lướt Web, nếu bạn dùng chuột kích vào một đối tựợng nào đó, thì lập tức một đối tượng mới xuất hiện. Từ h ình tượng đó, các nhà thiết kế phần mềm nghĩ ra một ph ương pháp là: “Dùng chuột hoặc bàn phím để tương tác (kích chuột hoặc ấn phím) vào một đối tượng hoặc lợi dụng một đối t ượng chuyển từ trạng thái n ày sang trạng thái khác để khởi động một thủ tục“. Thủ tục có đặc th ù đó gọi là thủ tục đáp ứng sự kiện. Trong Access thủ tục đáp ứng sự kiện rất phong phú. Chúng ta sẽ l àm quen dần.
8.2.1 Thủ tục đáp ứng sự kiện với Form
Ta nhận thấy trên Form có 6 vùng cơ bản (5 vùng có tên như hình sau và một vùng là toàn bộ Form):
Mỗi vùng có tên thủ tục đáp ứng sự kiện khác nhau, ví dụ sự kiện Click th ì:
Sự kiện Click ở toàn bộ Form có dạng:
Private Sub Form_Click()
<các lệnh >
End Sub
Sự kiện Click ở vùng tiêu đề đầu Form có dạng:
Private Sub FormHeader_Click()
<các lệnh >
End Sub
Sự kiện Click ở vùng tiêu đề đầu trang có dạng:
Private Sub PageHeaderSection_Click()
<Các lệnh >
End Sub
Sự kiện Click ở vùng thân Form có dạng:
Private Sub Detail_Click()
<các lệnh >
End Sub
Sự kiện Click ở vùng tiêu đề cuối trang có dạng:
Private Sub PageFooterSection_Click()
<các lệnh >
End Sub
Sự kiện Click ở vùng tiêu đề cuối Form có dạng:
Private Sub FormFooter_Click()
<các lệnh >
End Sub
Tên các sự kiện đối với Form thì rất nhiều, bạn xem bảng sau:
Bạn chọn Event và cuốn để tìm sự kiện mình cần.
Ví dụ: Tạo thủ tục để mở bảng có t ên SoLuong khi ta kích vào vùng tiêu đ ề đầu trang Form. Ta thao tác như sau:
1. Mở Form
Chọn Forms, kích đúp vào Create form in Dessign view như hình sau:
Sau đó ta có hình Form mới:
Hình trên gồm 3 hình ghép lạiH: Form, ToolBox và các thủ tục đáp ứng sự kiên (Event) ứng với mỗi lần bạn chọn v ùng nào trong 6 vùng trên. Bạn nên trưng cả 3 hình đó để dễ thao tác. Bạn điều chỉnh để Form lộ diện cả 6 vùng bằng cách: Chọn view và chọn tên vùng.
Sau đây là các bước tiến hành lập trình:
Kích vào thanh FormHeader để bật cửa sổ chứa các thủ tục đáp ứng sự kiện ứng với
vùng này (tất nhiên ban chon Event), như hình sau:
Kích vào ô bên phải ứng với dòng On Click, kích mũi tên xuống để chọn [Event
Procedure], kích tiếp vào nút ba chấm bên phải như hình sau:
Sau đó thủ tục đáp ứng sự kiện hiện ra:
Bạn gõ dòng lệnh: DoCmd.OpenTable “So_luong”. Ta đươc một thủ tục hoàn chỉnh như
sau: