Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
TRƯỜNG CAO ĐẲNG NGHỀ ĐẮK LẮK
KHOA ĐIỆN TỬ - TIN HỌC
GIÁO TRÌNH
QUẢN TRỊ CƠ SỞ DỮ LIỆU
ACCESS 2
NGHỀ: CÔNG NGHỆ THÔNG TIN
TRÌNH ĐỘ: CAO ĐẲNG NGHỀ - TRUNG CẤP NGHỀ
Người biên soạn: ThS. Lê văn Tùng
Lưu hành nội bộ - 2014
1
LỜI NÓI ĐẦU
Giáo trình này là sự đúc kết kinh nghiệm của tác giả trong giảng dạy các
khoá đào tạo về Access cũng như kinh nghiệm sử dụng Access làm hệ quản trị cơ
sở dữ liệu và công cụ phát triển phần mềm. Hầu hết nội dung trình bày trong giáo
trình đều bám theo những bài tập thực hành cụ thể. Do vậy, sau khi đọc xong và
thực hành theo trình tự cuốn sách này, người đọc gần như có thể thiết kế và xây
dựng được những ứng dụng về quản lý thông tin.
Đối tượng chính của giáo trình là sinh viên, học sinh chuyên nghề Công nghệ
thông tin (CNTT) cũng như không chuyên nghề CNTT có học môn Access. Tất
nhiên cũnghoàn toàn phù hợp cho những ai quan tâm học hỏi môn học này bởi lẽ
các nội dungđều được trình bày rất trực quan, có thứ tự và kết quả rõ ràng.
Thời lượng thiết kế 75 tiết. Trong đó 24 tiết lý thuyết, 47 tiết thực hành và 4
tiếtdành cho kiểm tra. Tuỳ theo mức độ ứng dụng của từng nghề vào môn họcnày
mà mỗi đơn vị sẽ chọn cho mình một quĩ thời gian cũng như các nội dunggiảng dạy
phù hợp từ giáo trình này.
Nội dung giáo trình gồm 5 chương:
Chương 1: Tập lệnh Macro – Trình bày cơ bản về đối tượng macro cụ thể và
tập lệnh, biết các thao tác xử lý đối vơi macro và cách sử dụng macro vơi các biến
cố. Tạo được macro vơi các xứ lý cơ bản và kết hợp macro vơi biến cố để xử lý
chức năng trên form.
Chương 2: Lập trình VBA – Trình bày về môi trường lập trình VBA và hiểu
một số khái niệm và cơ chế xử lý của ngôn ngữ VBA. Xây dựng và xử lý sự kiện
trên các biểu mâu sử dụng bộ lệnh Docmd.
Chương 3: Lập trình cơ bản dữ liệu – Trình bày được kiến thức và các ky
thuật DAO. Sử dụng được các đối tượng trên DAO.
Chương 4: Xây dựng thực đơn và thanh công cụ - Trình bày các cách tạo
menu và thanh công cụ trong Access. Gắn được menu và thanh công cụ trên các
form giao diện.
Chương 5: Xây dựng ứng dụng – Trình bày các kiến thức về quy trình xây
dựng ứng dụng. Xây dựng được các ứng dụng vơi các form, báo cáo hiệu quả và
thân thiện và xây dựng được tính bảo mật cho ứng dụng.
Tuy có nhiều cố gắng trong quá trình biên soạn nhưng giáo trình này vân còn
nhiều thiếu sót. Chúng tôi rất mong nhận được các ý kiến đóng góp của các bạn sinh
viên và các bạn đồng nghiệp để chúng tôi có thể hoàn thiện giáo trình này.
Đắk lắk, năm 2014
Tác giả
ThS. Lê Văn Tùng
2
MỤC LỤC
LỜI NÓI ĐẦU .......................................................................................................... 1
Bài 1: Tập lệnh Macro ............................................................................................... 4
1.1. Giơi thiệu macro .......................................................................................... 4
1.2. Tạo và thi hành macro .................................................................................. 4
1.2.1. Các thành phần trong cửa sổ Macro: (2 phần) ....................................... 4
1.2.2. Ví dụ minh họa ...................................................................................... 5
1.3. Các loại Macro và cách tạo Macro ............................................................... 5
1.4. Một số hành động thông dụng ...................................................................... 6
1.5. Điều kiện trong macro .................................................................................. 7
1.6. Gắn kết các biến cố vơi macro ..................................................................... 8
1.6.1. Quy trình thực hiện................................................................................ 8
1.6.2. Sử dụng biến cố trong mâu biểu, báo biểu ............................................ 9
1.7. Một số ví dụ ............................................................................................... 10
Bài 2: Lập trình VBA .............................................................................................. 13
2.1. Môi trường lập trình VBA ......................................................................... 13
2.2. Các kiểu dữ liệu và khai báo ...................................................................... 14
2.2.1. Các kiểu dữ liệu: ................................................................................. 14
2.2.2. Khai báo .............................................................................................. 14
2.2.3. Kiểu dữ liệu tự định nghĩa: .................................................................. 14
2.3. Cấu trúc lệnh .............................................................................................. 16
2.4. Chương trình con thủ tục và hàm ............................................................... 18
2.4.1. Thủ tục (Procedure) ............................................................................. 18
2.4.2. Hàm (Function) ................................................................................... 19
2.4.3. Đối tượng DoCmd ............................................................................... 20
2.4.4. Ky thuật xử lý lỗi ................................................................................ 20
Bài 3: Lập trình cơ sở dữ liệu .................................................................................. 23
3.1. Ky thuật DAO ............................................................................................ 23
3.2. Lơp đối tượng DAO ................................................................................... 24
3.3. Bài toán đăt lọc dữ liệu .............................................................................. 31
Bài 4: Xây dựng thực đơn và thanh công cụ ............................................................ 35
4.1. Tạo menu ................................................................................................... 35
4.2. Tạo menu sử dụng công cụ ........................................................................ 40
4.3. Tạo menu sử dụng macro ........................................................................... 41
4.4. Tạo thanh công cụ ...................................................................................... 44
4.5. Tạo menu tắt .............................................................................................. 45
Bài 5: Xây dựng ứng dụng ...................................................................................... 48
5.1. Phân tích yêu cầu ....................................................................................... 48
5.2. Thiết kế các thành phần của ứng dụng ....................................................... 49
5.3. Xây dựng form giao diện chính .................................................................. 50
5.4. Kết luận và hương phát triển ...................................................................... 53
5.5. Xây dụng hệ thống menu, thanh công cụ ................................................... 53
5.6. Bảo mật ứng dụng ...................................................................................... 53
TÀI LIỆU CẦN THAM KHẢO .............................................................................. 55
3
CHƯƠNG TRÌNH MÔ ĐUN QUẢN TRỊ CƠ SỞ DỮ LIỆU VỚI ACCESS 2
Mã số của mô đun: MĐ 22;
Thời gian của mô đun: 75 giờ; (Lý thuyết: 24 giờ; Thực hành: 51 giờ)
I. VỊ TRÍ, TÍNH CHẤT CỦA MÔ ĐUN:
Là mô đun chuyên môn nghề bắt buộc của chương trình đào tạo Cao đẳng
nghề Công nghệ thông tin (ứng dụng phần mềm), được bố trí học sau mô đun Quản
trị cơ sở dữ liệu vơi Access 1.
II. MỤC TIÊU CỦA MÔ ĐUN:
- Biết khái niệm về tập lệnh Macro và module trong Access;
- Hiểu các cách tạo và thực thi tập lệnh Macro;
- Biết cách tạo và thực thi module trong ứng dụng Access;
- Sử dụng macro và module để tăng tính linh hoạt của các chức năng trong ứng
dụng;
- Chủ động, sáng tạo trong việc tìm hiểu các tài liệu phục vụ cho môn học.
III. NỘI DUNG MÔ ĐUN:
1. Nội dung tổng quát và phân bổ thời gian:
Số
TT Tên các bài trong mô đun
Thời gian
Tổng
số LT TH
Kiểm tra*
(LT hoặc TH)
1. Macro 15 5 9 1
2. Lập trình VBA 18 6 12 0
3. Lập trình cơ sở dữ liệu 12 3 7 2
4. Xây dựng thực đơn và thanh công
cụ 10 4 6 0
5. Bài tập lơn 20 6 13 1
Cộng 75 24 47 4
4
Bài 1: Tâp lênh Macro
Mục tiêu:
- Hiểu đươc cơ ban về đôi tương macro cụ thể tập lệnh;
- Biết các thao tác xử ly đôi vơi macro và cách sử dụng macro vơi các biến cô;
- Tạo đươc macro vơi các xứ ly cơ ban;
- Kết hơp macro vơi biến cô để xử ly chức năng trên form;
- Nghiêm tuc, ti mi trong quá trình tiếp nhận ly thuyết và thực hành.
1.1. Giơi thiêu macro
Macro là một lệnh hay tập hợp một nhóm lệnh được quy định sẵn trong MS -
Access cho phép xác định một tập các thao tác trên các đối tượng cơ sở dữ liệu
(CSDL) của Access như mở biểu mâu, mở bảng in,…
Việc tự động hóa các hành động của macro giúp đảm bảo tính chính xác và
hiệu quả của CSDL.
Macro thường được xây dựng dựa trên một số các hành động (action) thường
dùng trong access được xây dựng sẵn, mỗi Macro gồm một hoăc nhiều hành động
theo một thứ tự nhằm thực hiện một chức năng cụ thể được xác định.
Macro thường được dùng kết hợp vơi sự kiện trên các ô điều kiển của các
biểu mâu, báo biểu. khi các sự kiện xảy ra thì Macro tương ứng sẽ được thực hiện,
thông thường Macro được gán vơi sự kiện On Click của nút lệnh trong biểu mâu để
khi nhắp chuột vào nút lệnh thì Macro được thực hiện hơn.
Thông qua Macro ta có thể điều khiển các đối tượng trên Biểu mâu (Form)
và Báo cáo (Report) một cách dễ dàng và linh hoạt.
1.2. Tạo và thi hành macro
Từ cửa sổ Database chọn đối tượng Macro New, xuất hiện cửa sổ Macro
sau:
Hình 1: Cửa sổ Macro trong MS-Access 2003
1.2.1. Các thành phần trong cửa sổ Macro: (2 phần)
Phần 1:
Cột Macro Name: Quy định tên riêng cho nhóm Macro. Khi trong cửa sổ
Macro bạn muốn tạo nhiều Macro con thì mỗi một Macro này phải có một tên riêng.
(Vào menu View Macro Name để hiển thị mục này).
Cột Condition: Thiết lập các điều kiện kiểm tra cho Macro. (Vào menu View
Condition để hiển thị mục này).
Cột Action: Quy định những hành động được tạo sẵn cho Macro.
Cột Comment: Chú thích, diễn giải về các hành động tương ứng.
5
Phần 2:
Action Argument: Quy định các tham số tương ứng cho từng hành động.
Trong cửa sổ thiết kế Macro thực hiện các thao tác sau:
Chọn hành động cần gắn cho macro tại cột Action
Gõ dòng giải thích cho hành động tương ứng tại cột Comment (nếu cần)
Chọn các đối mục cho mỗi hành động tại mục Action Arguments
Lưu y: Mỗi macro có thể thực hiện nhiều hành động, thứ tự thực hiện các hành
động phụ thuộc vào thứ tự liệt kê tại cột Action
1.2.2. Ví dụ minh họa
Hãy mở bài tập “Quản lý HSSV” thiết kế và gắn hành động cho hai nút lệnh
sau:
Yêu cầu:
1) Khi click vào nút “quản lý điểm HSSV” thì thực hiện mở biểu mâu (form)
quản lý điểm HSSV ra màn hình.
2) Khi click vào nút “quản lý danh sách HSSV” thì thực hiện mở biểu mâu
(form) danh sách HSSV ra màn hình.
1.3. Các loại Macro và cách tạo Macro
Macro đơn: Dùng để thực hiện một thao tác đơn giản nào đó.
Cách tạo:
Bươc 1: Trong ngăn Macro New
Bươc 2: Trong hộp thoại Macro xuất hiện, chọn:
Action: Hành động cho Macro.
Action Argument: Quy định các tham số cho hành động tương
ứng trên.
Bươc 3: Lưu và đăt tên cho Macro.
Ví dụ: Tạo Macro dùng để mở một Form, như sau:
6
Macro nhóm (Macro Group): Mục đích nhằm tập hợp các Macro liên quan
vơi nhau vào một cửa sổ Macro sheet, mỗi Macro có một tên riêng và thực hiện độc lập
khi được gọi. Khi Macro nào được gọi thì Macro đó thực hiện.
Cách tạo:
Tại cửa sổ Macro sheet, vào menu View, chọn dòng Macro Name. Lúc này
trong cửa sổ Macro sheet xuất hiện thêm một Macro Name, ta đăt tên Macro thành
phần vào cột này và chọn Action vào dòng tương ứng và các dòng tiếp theo. Muốn
gọi Macro thành phần nào ta chọn:
<Tên Macro nhóm>.<Tên Macro thành phần>
Ví dụ: Tạo một Macro để xem thông tin về các Bảng như sau:
Tạo Macro nhóm có tên “Mo”: Dùng để mở bảng (Table) DM_SINHVIEN,
Truy vấn (Query) DS_HSSV, biểu mâu (Form) quản lý HSSV.
Macro điều kiên: Là Macro mà các hành động chỉ thực hiện khi thỏa mãn
một điều kiện nào đó.
Cách tạo:
Tại cửa sổ Macro sheet, vào menu View Conditions. Lúc này trong cửa sổ
Macro Sheet xuất hiện thêm cột Condition, ta nhập điều kiện vào cột này và chọn
Action vào dòng tương ứng. Nếu một điều kiện đúng thực hiện nhiều hành động thì
dòng tiếp theo của cột Condition ta gõ vào dấu ba chấm (…) và chọn tiếp hành động
trong cột Action (nếu không có dấu ba chấm thì hành động đó thực hiện bất kể điều
kiện nào).
1.4. Môt số hành đông thông dụng
Action/ Argument Ý nghĩa
Close
Object Type
Object Name
Save
Đóng cửa sổ (nếu không có tham số thì đóng cửa
sổ Active)
Kiểu đối tượng (Table, Query, Form,Report,…)
Tên đối tượng đóng
Chọn cách lưu khi đóng
Msg box
Message
Beep
Type
Title
Hiển thị hộp thông báo
Nội dung thông báo
Có/ không có tiếng Bíp
Biểu tượng trong hộp thoại
Nội dung tiêu đề
Open Form Mở một Form
7
Form Name Tên Form
View Dạng hiển thị (Design, print preview, Data sheet)
Filter Name Tên query nhập dữ liệu
Where condition Điều kiện lọc dữ liệu
Data mode Chế độ dữ liệu(Add,Edit,Read only)
Open Query Mở một query
Query Name Tên query
View Dạng hiển thị (Design, print preview, Data sheet)
Data Mode Chế độ dữ liệu(Add,Edit,Read only)
Open Report Mở một Report
Report Name Tên report
View Dạng hiển thị (Design, print preview, Data sheet)
Filter Name Tên Report nhập dữ liệu
Where condition Điều kiện lọc dữ liệu
Open Modulo Mở một Modulo
Modulo Name Tên Modulo chứa thủ tục cần mở
Procedure Name Tên thủ tục cần mở
Run Macro Chạy một Macro
Macro Name Tên Macro cần chạy
Repeat Count Số lần lăp chạy Macro(không ghi là một lần)
Repeat Expression Biểu thức điều kiện để lăp (False thì dừng)
Run Code Gọi thực hiện một hàm của VBA
Function Name Tên hàm (các tham số)
Maximize Cực đại cửa sổ hiện hành
Restore Phục hồi cửa sổ về kích thươc cũ
Stop All Macro Dừng thực hiện các Macro
Quit Thoát khỏi Access trở về window
Option Xử lý dữ liệu khi thoát (promt, save all, exit)
Requery Cập nhật lại dữ liệu nguồn cho điều khiển
Set Value Gán giá trị, thuộc tính cho một đối tượng điều khiển
Item Tên đối tượng điều khiển nhận giá trị, thuộc tính
Expression Biểu thức gán (nếu khác Form:Form![tên Form]!tên
ĐK)
Apply Filter Lọc dữ liệu khi xử lý Table, Form, Report
Filter Name Tên truy vấn lọc dữ liệu
Where condition Điều kiện lọc dữ liệu
1.5. Điều kiên trong macro
Khi tạo macro ta có thể quy định điều kiện thực hiện từng hành động của
macro, khi thực hiện: nếu điều kiện đúng thì thực hiện hành động tương ứng, nếu
điều kiện sai thì không thực hiện.
Cách tạo:
Bươc 1: Tại cửa sổ macro đơn, chọn Menu View/Conditions. Cửa sổ tạo
macro xuất hiện thêm cột Condition
Bươc 2: Chọn hành động cần gắn cho macro tại cột Action
Bươc3: Gõ dòng giải thích cho hành động tương ứng tại cột Comment (nếu
cần)
8
Bươc 4: Chọn các đối mục cho mỗi hành động tại mục Action Arguments
Bươc 5: Thiết lập điều kiện thi hành cho mỗi hành động tại cột Condition
Bươc 6: Đăt tên và lưu macro
1.6. Găn kêt các biên cố vơi macro
Macro thường dùng được gắn vơi một nút lệnh trong biểu mâu hoăc một sự
kiện (event) của một ô điều khiển.
Để gắn macro vơi một sự kiện của ô điều khiển ta chọn ô điều khiển, trong
sự kiện thiết kế biểu mâu chọn ô điều khiển cần gắn vơi macro rồi chọn thuộc tính
ứng vơi sự kiện cần gắn macro rồi chọn tên macro (nếu có sẵn) hoăc nhắp chuột vào
nút ba chấm (…) để tạo macro gắn vơi sự kiện. khi đó xuất hiện cửa sổ Choose
Builder, chọn mục macro builder sẽ xuất hiện cửa sổ tạo macro.
1.6.1. Quy trình thực hiên
Bươc 1: R_Click đối tượng cần gán sự kiện (thường là nút lệnh Command
hoăc Text box) chọn properties.
Bươc 2: Xuất hiện màn hình, chọn thẻ Event.
Hình 2: Thuộc tính sự kiện on Click
Bươc 3: Chọn dòng sự kiện (Ví dụ: On Click):
Nếu Macro đã tạo trươc rồi thì ta click vào Combo box trên dòng đó để chọn
Macro gán cho sự kiện của đối tượng.
Nếu chưa tạo Macro thì click vào nút Buid(…) trên dòng đó, xuất hiện hộp
thoại Choose Builder, ta chọn dòng Macro Builder và click ok, xuất hiện cửa sổ
Macro Sheet cùng hộp thoại lưu Macro, ta đăt tên cho Macro đóng hộp thoại lưu và
bắt đầu thiết kế Macro cho sự kiện của đối tượng.
Để gắn một macro vơi một nút lệnh, trong cửa sổ thiết kế biểu mâu chọn nút
lệnh cần gắn vơi macro và chọn tên macro trong thuộc tính On Click
Ví dụ: Để gắn hành động (Action) “Mở biểu mâu”cho nút lệnh (Button) trên biểu
mâu (Form)
Bươc 1: R_Click Button chọn Properties (nhấn F4)
Bươc 2: Trong hộp thoại xuất hiện, thực hiện:
Chọn thẻ Event
Tại dòng On Click, Click vào dấu 3 chấm
9
Hình 3: Thẻ Event trong hộp thoại Property Sheet
Chọn Macro Bulder
Hình 4: Chọn Macro Builder
Hình 5: Chọn hành động mở From
Bươc 3: Lưu hành động đã chọn
Bươc 4: Thực thi sự kiện xem kết quả
1.6.2. Sử dụng biên cố trong mâu biểu, báo biểu
Để có thể kết hợp các đối tượng của Access phải có cơ chế tham chiếu nội
dung của các đối tượng.
Click
vào dấu
3 chấm
10
1) Để tham chiếu đến các ô điều khiển của báo biểu dùng cú pháp:
[Forms]! [Tên biểu mẫu]! [Tên ô điều khiển]
2) Nếu tham chiếu đến ô điều khiển của báo biểu dùng cú pháp:
[Forms]! [Tên báo biểu]! [Tên ô điều khiển]
Những tham chiếu này có thể thực hiện từ truy vấn, báo biểu, biểu mâu và
macro. Việc tham chiếu này cho phép các đối tượng trao đổi dữ liệu vơi nhau.
1.7. Môt số ví dụ
Ví dụ 1: Tạo biểu mâu cho phép nhập vào họ tên và ngày sinh của sinh viên
cần tìm, để thực hiện thao tác tìm sinh viên có họ tên và ngày sinh học sinh – sinh
viên nhập vào từ bàn phím.
Yêu cầu:
1. Cửa sổ nhập điều kiện tìm kiếm có dạng
2. Cửa sổ trình bày kết quả tìm kiếm như một bảng truy vấn chứa thông tin
những mâu tin cần tìm.
Các bươc thiết kế:
Tạo biểu mâu tên “f_tim” chứa hai ô Text box, đăt tên “mTenSV”,
“mNgaysinh” và 2 nút lệnh “Tìm”, “Thoát”
Nút lệnh “Tìm” gắn vơi macro “tim SV”, nút lệnh “Thoát” gắn vơi macro
“thoat” có nội dung chi tiết như sau:
Macro “tim”
Action Action Arguments
OpenQuery Query Name: Tim SV_vd1
View: DataSheet
Data mode: ReadOnly
Macro “thoat”
Action Action Arguments
Close Object Type: Form
Object Name: f_tim
Save: Yes
Tạo truy vấn lựa chọn có tên “tim SV_vd1” lấy dự liệu từ danh mục DMSV,
truy vấn này truy vấn đến các ô Text box chứa dữ liệu cần tìm ở bảng “tim
SV_vd1”
11
Ví dụ 2:Tạo biểu mâu cho phép chọn chế độ in báo cáo “Bang diem SV theo
lop” ra máy in hay xem trên màn hình.
Các bươc thiết kế:
Thiết kế biểu mâu chọn cách in có tên “Chon_in” gồm:
Một Option Group tên “in” vơi hai mục
1. In báo cáo trực tiếp ra máy in
2. Xem báo cáo trên màn hình rồi in
Hai nút lệnh tên “Thực hiện” và “Kết thức” có nội dung như sau:
Macro gắn cho nút lệnh “Thực hiện” là macro có điều kiện có dạng
Action Condition Action Arguments
Open Report [Forms]![Chon_in]![in]=1 Report Name: Bang diem SV theo lop
View: Print
Open Report [Forms]![Chon_in]![in]=2 Report Name: Bang diem SV theo lop
View: Print Preview
Macro gắn cho nút lệnh “kết thức” là macro có chức năng đóng biểu mâu có
dạng:
12
Action Action Arguments
Close Object Type: Form
Object Name: Chon_in
Save: Yes
Ví dụ 3: Tạo biểu mâu kiểm tra mật khẩu trươc khi vào chương trình ứng
dụng trên Access. Cửa sổ kiểm tra mật khẩu có dạng:
Yêu cầu:
Nếu mật khẩu không đúng thì thoát khỏi Access, ngược lại thì đóng cửa sổ
kiểm tra mật khẩu và cho phép làm việc cơ sở dữ liệu của chương trình.
Thiết kế chi tiết:
Tạo biểu mâu “Kiểm tra mật khẩu” như hình minh hoạ gồm: ô text box và
nút lệnh chi tiết như sau:
Ô text box có các thuộc tính:
Name: Mat_khau
Input Mask: Password
Default value: “”
Nút lệnh “Đồng ý” có thuộc tính có thuộc tính On Click: KTMK (gắn vơi macro
KTMK)
Các thuộc tính của biểu mâu:
Caption: Kiểm tra mật khẩu
Selector Record: No
Navigation Button: No
Pop Up: Yes
Modal: Yes
Tạo macro “KTMK” (kiểm tra mật khẩu) có nội dung như sau:
Action Condition Action Arguments
MsgBox [Forms]![Kiểm tra mật
khẩu]![mat_khau] <> “lop13cct”
Message: sai mật khẩu
Quit …
Close Object Type: Form
Object Name: Kiểm tra mật khẩu
13
Bài 2: Lâp trinh VBA
Mục tiêu:
- Hiểu về môi trương lập trình VBA;
- Hiểu một sô khái niệm và cơ chế xử ly của ngôn ngư VBA;
- Xây dựng và xử ly sự kiện trên các biểu mẫu sử dụng bộ lệnh Docmd;
- Nghiêm tuc, ti mi trong quá trình tiếp nhận ly thuyết và thực hành
2.1. Môi trường lâp trinh VBA
Visual Basic for Application (VBA) để giúp người dùng có thể tạo ra các tuỳ
biến mạnh hơn, thân thiện hơn vơi trong công việc của mình. Hơn thế nữa VBA
trên Access đã thể hiện tính chuyên nghiệp trong lập trình, phần nào biến được một
CSDL đơn giản trở thành những sản phẩm đóng gói thương mại.
Màn hình làm việc của VBA:
Hình 2.1.1 Môi trương làm việc VBA
Hệ thống thực đơn và thanh công cụ: Cũng như bất kỳ môi trường làm việc
nào đều có hệ thống thực đơn và thanh công cụ đi kèm. Trên đó có chứa các lệnh để
gọi, thi hành hoăc thiết lập các điều khiển cần thiết.
Cửa sổ Project Explorer: Có rất nhiều các thành phần có thể lập trình được bởi
VBA như: Forms, Reports, Modules. Cửa sổ Project Explorer là cây phân cấp lơp các
đối tượng có chứa mã lệnh VBA, đồng thời giúp lập trình viên dễ dàng trong việc viết
(coding) cũng như quản lý các mã lệnh VBA đã viết.
Cửa sổ viết lệnh: Cửa sổ viết lệnh là nơi soạn thảo các dòng lệnh VBA. Mỗi
cửa sổ sẽ chứa toàn bộ mã lệnh cho một đối tượng như: Forms, Reports, Modules.
Trong mỗi cửa sổ có thể có nhiều phần được viết lệnh, mỗi phần có thể là nội dung
một khai báo, một chương trình con, nội dung một thủ tục đáp ứng sự kiện.
Cửa sổ Intermediate: Cửa sổ Intermediate là nơi giúp thi hành trực tiếp một
câu lệnh nào đó, rất hữu dụng trong việc gỡ lỗi phần mềm.
14
2.2. Các kiểu dư liêu và khai báo
2.2.1. Các kiểu dư liêu:
Tên kiểu Kiểu Field tương Phạm vi
Boolean Yes/No True, False
Byte Byte 0 → 255
Integer Integer -32768 → 32767
Long Long Integer,
AutoNumber -2147483648 → 2147483647
Single Single -3.402823E+38 → -1.401298E-45 và
1.401298E-45 → 3.402823E+38
Double Double
-1.79769313486232E+308 →
-4.94065645841247E-324
và 4.94065645841247E-324 →
1.79769313486232E+308
Currency Currency -922337203685477.5808 →
922337203685477.5807
String Text hoăc Memo Chiều dài từ 0 đến 65500 ký tự
Date Date/ Time Từ 01/01/100 → 31/12/9999
Variant Kiểu bất kỳ (Date,
String, Double)
Tương tự như các kiểu Date,
Double, String ở trên
2.2.2. Khai báo
2.2.3. Kiểu dư liêu tự định nghĩa:
Kiểu dữ liệu tự định nghĩa phải khai báo trong phần
Declarations của module. Để sử dụnh các thành phần (field) trong kiểu tự định
nghĩa thì ghi như sau:
Tên biên. tên file
Biên (Variable)
Là đại lượng có giá trị thay đổi tùy thuộc các xử lý. Biến để lưu trữ tạm thời
các kết quả khi thực hiện các phép tính trong chương trình, các kết quả được so
sánh vơi nhau hoăc lại sử dụng trong các phép tính khác.
Tùy thuộc vào từ khóa khai báo biến và vị trí khai báo mà phạm vi sử dụng
biến trong các thủ tục sẽ thuộc vào 1 trong 3 trường hợp sau:
Loại Từ khóa
khai báo Vị trí khai báo Phạm vi sử dụng
Biến cục bộ Dim Trong các thủ tục Bên trong thủ tục có chứa lệnh
khai báo
Biến thuộc
đơn thể Dim
Trong Declaration
Section của module
Trong bất kỳ các thủ tục thuộc
module có chứa lệnh khai báo
Type Tên_kiểu_định_nghĩa
Tên_field_1 As Kiểu_dữ_liệu
Tên_field_2 As Kiểu_dữ_liệu
…
End Type
15
Biến toàn cục Global hoăc
Public
Trong Declaration
Section của module
Trong bất kỳ thủ tục nào thuộc
bất kỳ module nào của hệ
thống ứng dụng
Biên tĩnh:
Thông thường khi 1 thủ tục chấm dứt thi hành thì giá trị các biến cục bộ
được khai báo trong thủ tục này mất đi và lần gọi thi hành sau đó của thủ tục các
biến cục bộ sẽ được khởi tạo lại.
Nếu muốn giữ lại giá trị của biến cục bộ trong 1 thủ tục sau khi thủ tục này
chấm dứt thi hành thì khai báo biến đó là biến tĩnh theo cú pháp sau:
Static tên_biên
Ví dụ:
Dim I As Integer
Static S As Double
Public B As String
Hằng và hằng ký hiêu
Hằng là đại lượng có giá trị cụ thể và không đổi trong chương trình. Cách
biểu diễn hằng tùy thuộc vào kiểu dữ liệu của hằng. Nếu hằng được sử dụng nhiều
lần tại nhiều nơi khác nhau thì nên khai báo hằng ký hiệu để biểu thị cho giá trị
hằng đó. Hằng ký hiệu sau khi khai báo có thể sử dụng trong các biểu thức nhưng
không được phép thay đổi giá trị của hằng ký hiệu hoăc gán cho hằng ký hiệu 1 giá
trị khác.
Phạm vi sử dụng hằng tùy thuộc vào từ khóa khai báo và giá trị khai báo như
sau:
Loại Từ khoá khai
báo Vị trí khai báo Phạm vi sử dụng
Hằng cụcbộ Const Trong các thủ
tục
Bên trong thủ tục có chứa
lệnh khai báo
Hằngthuộc
đơn thể Const
Trong
Declaration
Section của
module
Trong bất kỳ các thủ tục
thuộc module có chứa lệnh
khai báo
Hằng toàncục
Global
Const hoăc
Public Const
Trong
Declaration
Section của
module
Trong bất kỳ thủ tục nào
thuộc bất kỳ module nào của
hệ thống ứng dụng
Ví dụ:
Const CS = “Trung Tâm Máy tính và Điện tử”
Const PI = 3.14159
Const NDN = #1/1/01# Const SAI = False
Mảng (array)
Mảng là một dãy các phần tử liên tiếp nhau có cùng một tên gọi và dùng chỉ
số thứ tự để chỉ định một phần tử nào đó trong mảng.
Mỗi phần tử được sử dụng giống như một biến. Các phần tử có thể có cùng
kiểu dữ liệu hoăc khác kiểu nếu mảng được khai báo là Variant.
16
Loại
Từ khóa
khai
báo
Vị trí khai báo Phạm vi sử dụng
Mảng cụcbộ Static Trong các thủtục Bên trong thủ tụccó chứa
lệnh khai báo
Mảngthuộc
đơn thể Dim
TrongDeclaration
Section của module
Trong bất kỳ cácthủ tục
thuộc module có chứa lệnh
khai báo
Mảng
toàncục
Global
Dim
hoăc
Public Dim
TrongDeclaration
Section của module
Trong bất kỳ thủtục nào
thuộc bất kỳ module nào của
hệ thống ứng dụng
2.3. Câu truc lênh
Các cấu trúc lệnh là thành phần cơ bản của mỗi ngôn ngữ lập trình. Thông
thường các ngôn ngữ lập trình đều có các cấu trúc lệnh như nhau: lệnh xử lý điều
kiện, lệnh lăp biết trươc số vòng lăp, lệnh lăp không biết trươc số vòng lăp,.. Tuy
nhiên cách thể hiện (cú pháp) mỗi cấu trúc lệnh có thể khác nhau tuỳ thuộc vào mỗi
ngôn ngữ lập trình. Hơn nữa, mỗi ngôn ngữ cũng có thể có một số điểm khác biệt,
đăc trưng trong mỗi cấu trúc lệnh.
Cũng giống như nhiều ngôn ngữ lập trình hiện đại khác, các cấu trúc lệnh
trong VBA đều tuân thủ các nguyên tắc:
Có cấu truc
mỗi cấu trúc lệnh đều có từ khoá bắt đầu và một từ khóa báo hiệu kết thúc.
Thực hiện tuần tự (loại trừ trường hợp đăc biệt thủ tục Goto <Label>)
Có khả năng lồng nhau
Cấu truc rẽ nhánh
Cấu trúc rẽ nhánh hay còn gọi là lệnh lựa chọn. Tức là nếu một điều kiện nào
đó xảy ra sẽ là gì, hoăc trái lại có thể làm gì.
Cú pháp:
If <điều kiện> Then
<thủ tục 1>
[ Else
<thủ tục 2> ]
End If
Chức năng: nếu <điều kiện> = True thì thực hiện các lệnh trong <thủ tục1>.
Trái lại thực hiện các lệnh trong <thủ tục 2>.
Phần trong căp dấu ngoăc vuông [..] có thể có hoăc không có trong câu lệnh,
tuỳ thuộc vào mục đích xử lý.
Ví dụ 1:
Dim SL As Integer, DG As Double, TT As Double
SL = Val(InputBox (“Nhập số lượng:”))
DG = Val(InputBox (“Nhập đơn giá:”))
TT = SL * DG
If TT >= 200000 Then TT = TT * 0.95
Ví dụ 2:
Const PI = 3.14159
Dim ban_kinh As Double
17
ban_kinh = Val(InputBox (“Nhập bán kính:”))
If ban_kinh > 0 then
Dim dientich As Double
Dim chuvi As Double
Dientich = ban_kinh*ban_kinh*PI Chuvi = ban_kinh*2*PI
End If
Cấu truc lựa chọn
Đây là một loại cấu trúc lựa chọn. Thông thường hoàn toàn có thể sử dụng If
.. End If để thực hiện các xử lý liên quan đến kiểu cấu trúc này, nhưng trong những
trường hợp đăc biệt, cấu trúc Select Case .. End Select thể hiện được sự tiện dụng
vượt trội.
Cú pháp:
Select Case <biểu thức>
Case <giá trị 1>
<thủ tục 1>
Case <giá trị 2>
<thủ tục 2>
………
Case <giá trị n>
<thủ tục n>
[Case Else
<thủ tục n+1>]
End Select
Trong đó: <Biểu thức> luôn trả về giá trị kiểu vô hương đếm được như: số
nguyên, xâu ký tự, kiểu logic,..
Vơi cấu trúc này, VBA hoạt động như sau:
Tính giá trị của biểu thức, Kiểm tra <biểu thức> = <giá trị 1> ?. Nếu đúng thực hiện
<thủ tục 1> và kết thúc lệnh, thực hiện lệnh tiếp theo sau từ khoá End Select.Nếu
sai, thực hiện tiếp việc so sánh <biểu thức> = <giá trị i> tiếp theo và xử lý tương tự
qui trình nêu trên.
Trong trường hợp <biểu thức><><giá trị i>, i=1..n khi đó có 2 khả năng:
Nếu có tuỳ chọn Case Else thì VBA sẽ thực hiện <thủ tục n+1>;
Nếu không có tuỳ chọn Case Else, VBA sẽ không thực hiện bất kỳ thủ tục
nào đã liệt kê trong vùng Select .. End Select cả mà chuyển tơi thực hiện lệnh tiếp
theo sau từ khoá End Select.
Cấu truc lặp
Cấu trúc FOR … NEXT
For… Next là một cấu trúc lăp biết trươc số lần lăp trong VBA, tuy nhiên
trong những tình huống đăc biệt, vân có thể sử dụng cấu trúc này như cấu trúc
không biết trươc được số lần lăp.
Cú pháp:
For <biến chạy> = <giá trị 1> To <giá trị 2> [Step <n>]
<thủ tục>
[Exit For]
Next
Trong đó:
<biến chạy> là biến kiểu vô hương đếm được, hay dùng nhất là biến kiểu
nguyên;
18
<giá trị 1>, <giá trị 2> là các giá trị mà biến chạy sẽ nhận và thực hiện dịch
chuyển sau mỗi lần lăp. Có thể dịch chuyển đi 1 đơn vị, có thể dịch chuyển
đi nhiều đơn vị một lần, có thể dịch chuyển tiến, cũng có thể dịch chuyển lùi-
tất cả điều này tuỳ thuộc vào việc có hay không có tuỳ chọn [Step <n>];
Nếu có tuỳ chọn [Step <n>] biến chạy sẽ dịch n đơn vị sau mỗi lần lăp. Khi
đó, nếu n>0 dẽ dịch tiến, ngược lại sẽ dịch lùi;
Mỗi lần lăp, VBA sẽ thực hiện <thủ tục> một lần;
Trong trường hợp đăc biệt nếu găp phải lệnh Exit For trong vòng lăp, ngay
lập tức thoát khỏi lệnh lăp và thực hiện lệnh tiếp ngay sau từ khoá Next. Chính Exit
For đã làm mất đi tính lăp biết trươc được số lần lăp.
Cấu trúc WHILE … WEND
While … Wend là một cấu trúc lăp không biết trươc số lần lăp trong VBA.
Cú pháp:
While <điều kiện>
<thủ tục>
Wend
Trong đó:
While, Wend là các từ khoá của lệnh lăp;
Nếu <điều kiện> = True, các lệnh trong <thủ tục> sẽ được thực hiện. Thực
hiện xong lại quay lên dòng lệnh While để kiểm tra tiếp <điều kiện>;
Nếu <điều kiện> = False, sẽ thoát khỏi vòng lăp và thực hiện lệnh tiếp theo
từ khoá Wend.
Chú ý: Luôn phải chứng minh được rằng, sau một số hữu hạn lần thực hiện
<thủ tục>, giá trị của <biểu thức> phải là False để thoát khỏi vòng lăp. Trong
trường hợp không thể thoát khỏi vòng lăp, có nghĩa người lập trình đã mắc phải lỗi
lăp vô hạn. Có thể dân đến chương trình bị treo.
2.4. Chương trinh con thu tục và hàm
Các thủ tục và hàm trong đơn thể Access có hai loại:
2.4.1. Thu tục (Procedure)
Các chương trình Basic được viết thành những đơn vị riêng lẻ gọi là thủ tục.
Trong mỗi thủ tục sẽ chứa các lệnh Basic để thực hiện một xử lý nhất định hoăc tính
toán một giá trị. Có hai loại thủ tục:
Cú pháp
[Public] [Private] Sub <tên CTC>([<danh sách các tham số>])
<thủ tục>
End Sub
Trong đó:
Sub, End Sub là các từ khoá bắt buộc khai báo cấu trúc một chương trình con
dạng thủ tục;
<tên CTC> là tên gọi thủ tục định khai báo. Tên không được chứa dấu cách
(space) và các ký tự đăc biệt;
<danh sách các tham số> danh sách các tham số cần thiết cho thủ tục. Có hay
không có danh sách này tuỳ thuộc vào thủ tục cần tạo
<thủ tục> thân chương trình con. Nếu không có từ khoá Public trươc Sub,
thủ tục đó chỉ có tác dụng cục bộ: trong một module, trong một report hoăc trong
một form. Khi có từ khoá Public trươc Sub, thủ tục sẽ có tác dụng toàn cục. Tức là
có thể sử dụng bất kỳ nơi nào trên tệp Access đó. Tất nhiên, tất cả những gì khai
báo là Public phải được khai báo trong phần Decralations của một Module nào đó.
19
Ví dụ: Xây dựng thủ tục thực hiện tính tổng hai số:
Sub tong2so(a, b As Double)
tong = a + b ‘tổng là biến được khai báo toàn cục
End Sub
2.4.2. Hàm (Function)
Là loại thủ tục trả về một giá trị kết quả duy nhất tại vị trí tham chiếu đến
hàm đó, vì vậy có thể sử dụng hàm trong các biểu thức. Hàm có thể nhận các đối
mục để sử dụng trong chương trình. Tổ chức của hàm như sau:
Cú pháp
Function <tên hàm>([<danh sách các tham số>]) As <kiểu DL hàm>
<thủ tục>
End Function
Trong đó:
Function, End Function là các từ khoá bắt buộc khai báo cấu trúc một
chương trình con dạng hàm;
<tên hàm> là tên gọi hàm định khai báo. Tên không được chứa dấu cách
(space) và các ký tự đăc biệt;
<danh sách các tham số> danh sách các tham số cần thiết cho hàm. Có hay
không có danh sách này tuỳ thuộc vào hàm cần định nghĩa;
<kiểu DL hàm> kiểu dữ liệu mà hàm sẽ trả lại. Phần này bắt buộc phải được
khai báo vơi mỗi hàm;
<thủ tục> thân chương trình con. Trong đó câu lệnh <tên hàm> = <biểu
thức> phải xuất hiện ít nhất một lần trong thủ tục. Câu lệnh này có tác dụng gán giá
trị cho hàm.
Chú ý: Nếu không có từ khoá Public trươc Function, hàm đó chỉ có tác dụng cục
bộ: trong một module, trong một report hoăc trong một form.
Khi có từ khoá Public trươc Function, hàm sẽ có tác dụng toàn cục. Tức là có
thể sử dụng bất kỳ nơi nào trên tệp Access đó. Tất nhiên, tất cả những gì khai báo là
Public phải được khai báo trong phần Decralations của một Module nào đó.
Ví dụ1: Thiết kế hàm tổng để tính tổng hai số:
Function Tong(a, b As Double) As Double
Tong = a + b
End Function
Ví dụ2: Thiết kế hàm kiểm tra tính nguyên tố của một số:
Function laNguyenTo(so As Integer) As Boolean
Dim uoc As Integer
laNguyenTo = True
If so > 2 Then
For uoc = 2 To Int(Sqr(so))
If so Mod uoc = 0 Then
laNguyenTo = False
Exit For
End If
Next
End If
End Function
20
2.4.3. Đối tương DoCmd
Chúng ta có thể dùng lệnh DoCmd để thi hành các công việc thông thường
trên Access thông qua môi trường VBA. Như: dùng DoCmd để có thể mở form, mở
report, query, lọc dữ liệu, thi hành macro xử lý bản ghi, ứng dụng,.. Hầu hết các
thao tác xử lý trên các đối tuợng của Access đều có thể dùng lệnh doCmd để gọi ra
thực hiện trong môi trường VBA.
Dươi đây liệt kê một số các phép xử lý của lệnh DoCmd thông dụng:
Lệnh đóng một đôi tương
Lệnh này để đóng (Close) hoăc giải phóng đối tượng nào đó ra khỏi bộ nhơ.
Hay dùng lệnh này để đóng form đang hoạt động hoăc đóng một report đang
preview.
Cu pháp như sau:
DoCmd.Close [ObjectType], [ObjectName], [SaveOption]
Trong đó:
ObjectType: chỉ kiểu đổi tượng cần đóng. Cụ thể như sau:
acForrm: Đóng form
acReport: Đóng report
acQuery: Đóng query
acTable: Đóng bảng
ObjectName: chỉ tên đối tượng cần đóng;
SaveOption: chỉ định tuỳ chọn ghi lại cấu trúc (nếu có sự thay đổi). Cụ thể:
SaveNo Không khi lại
SaveYes Luôn ghi lại
SavePromt Hiển thị hộp thoại nhắc để ghi nếu có sự thay đổi
2.4.4. Ky thuât xử lý lôi
Xử lý lỗi là ky thuật rất quan trọng trong lập trình. Đã lập trình thì khó tránh
khỏi lỗi (Errors). Có rất nhiều nguyên nhân gây ra lỗi; các nguyên nhân này có thể
được lường trươc hoăc không được lường trươc. Ky thuật xử lý lỗi bao gồm các ky
năng phát hiện và xử lý các tình huống khi chương trình gây lỗi.
Xử ly lỗi
Là việc xử lý khi đang lập trình găp phải lỗi. Thông thường khi chạy thử
chương trình trong lúc đang xây dựng phần mềm nếu găp phải lỗi, sẽ xuất hiện hộp
thoại thông báo lỗi có dạng:
Hình 2.4.4.1 Cửa sổ thông báo lỗi
21
Các thành phần thông báo lỗi bao gồm
Mã sô lỗi: Mỗi lỗi mà VBA có thể kiểm tra được đều có một mã số, được hiển thị ở
dòng thông báo: Run-time error 'mã số lỗi': Ví dụ trên là : Run-time error '11': Tên
lỗi là: Division by zero - lỗi sai kiểu dữ liệu.
Thành phần xử ly lỗi gồm 2 nut lệnh
Nút End để dừng ngay chương trình, chuyển về chế độ Design - thiết kế bình
thường;
Nút Debug để dừng chương trình chuyển về chế độ Break - sửa lỗi trực tiếp.
Khi đó câu lệnh lỗi sẽ được tô bởi màu nền vàng cho phép người lập trình có thể
sửa được mã chương trình.
Chú ý: Cửa sổ Immediate là công cụ hữu hiệu hỗ trợ việc dò lỗi bởi: hộp thoại này
cho phép thực thi từng câu lệnh trên chế độ hội thoại.
2.4.5 Bây lôi
Sử dụng lệnh On Error Resume Next
Sau khi sử dụng bây On Error Resume Next, từ chỗ đó trở đi, nếu chương
trình găp lỗi, nó sẽ bỏ qua (ignore) hoàn toàn. Điểm này tiện ở chỗ giúp chương
trình EXE của ta tránh găp lỗi thoát khỏi đột ngột như phân tích ở trên. Nhưng nó
cũng bất lợi là khi khách hàng cho hay họ găp những trường hợp lạ, không giải
thích được (vì lỗi đã bị bỏ qua mà không ai để ý), thì ta cũng bí luôn, có thể không
biết bắt đầu từ đâu để gỡ lỗi.
Do đó, trong lúc gỡ lỗi ta không nên dùng nó, nhưng trươc khi giao cho
khách hàng bạn nên cân nhắc ky có nên sử dụng trong các đoạn mã lệnh hay không.
Ví dụ: Sử dụng On Error Resume Next để bỏ qua lỗi:
Function A_chia_B(a, b As Double) As Double
On Error Resume Next
A_chia_B = Null
A_chia_B = a / b
End Function
Trong chương trình con trên, nếu b = 0, lệnh A_chia_B = a / b sẽ găp phải
lỗi. Do có lời khai báo On Error Resume Next nên lệnh lỗi này được bỏ qua (không
thực hiện). Tức là giá trị hàm là Null.
Sử dụng câu lệnh On Error Goto <nhãn>
Khi một thủ tục được đăt câu lệnh này, nếu găp phải một lỗi nào đó, VBA sẽ
chuyển thẳng việc thực hiện đến <nhãn> đã chỉ định. Thông thường các lệnh tiếp
theo của <nhãn> là xử lý các tính huống lỗi.
Ví dụ: Sử dụng phương pháp On Error Goto <nhãn> để bây lỗi:
Function A_chia_B(a, b As Double) As Double
On Error GoTo Loi
A_chia_B = a / b
Msgbox “ Ok! “
Loi:
If Err.Number = 11 Then
MsgBox "Lỗi chia cho 0 !"
End If
End Function
Trong chương trình con trên, trong trường hợp b = 0 câu lệnh A_chia_B = a /
b sẽ gây ra lỗi. Theo như khai báo On Error Goto Loi ban đầu, VBA sẽ bỏ qua tất cả
22
các lệnh sau lệnh lỗi và chuyển thẳng tơi các lệnh sau nhãn Loi: Ở đây là lệnh kiểm
tra lỗi. Nếu Mã lỗi = 11 kết luận ngay một thông báo lỗi tiếng Việt. Lỗi chia cho 0 !
Phương pháp này cũng được dùng phổ biến cả trong quá trình xây dựng để
phát hiện lỗi, cũng như trong phần mềm đã đóng gói gửi đến khách hàng. Mỗi khi
găp lỗi sẽ được thông báo nguyên nhân gây ra lỗi bằng tiếng Việt (chẳng hạn) mà
vân không ảnh hưởng đến hoạt động khác của phần mềm.
Trong phương pháp này, người lập trình nên khai thác tối đa đối tượng Err -
đối tượng mang những thông tin về lỗi đang xảy ra, cụ thể:
Kết quả Hành động
Err.Description Mô tả tên lỗi
Err.Number Đưa ra mã lỗi
23
Bài 3: Lâp trinh cơ sơ dư liêu
Thời gian: 14 giờ (LT:3 giờ; TH: 7 giờ, KT: 2 giờ)
Mục tiêu:
- Biết đươc kiến thức và các ky thuật DAO;
- Sử dụng thành thạo các đôi tương trên DAO;
- Nghiêm tuc, ti mi trong quá trình tiếp nhận ly thuyết và thực hành.
3.1. Ky thuât DAO
DAO (Data Access Objects – Các đối tượng truy xuất dữ liệu) là tập hợp bao
gồm lơp các đối tượng có thể dùng để lập trình truy cập và xử lý dữ liệu trong các
hệ CSDL. Ở đây CSDL Access, ngôn ngữ lập trình VBA.
Nạp thư viện DAO: Để nạp thư viện DAO3.6 vào làm việc, hãy thực hiện như sau:
Bươc 1: Mở cửa sổ lập trình VBA;
Bươc 2: Chọn thực đơn Tools | References .. Hộp thoại sau xuất hiện:
Hình Chọn thực đơn
Hãy chọn (tích) mục Microsoft DAO 3.6 Object Libraly trên danh sách
Available References; chọn xong, nhấn OK để đóng lại.
Sơ đồ liên kết quan ly cơ sở dư liệu
Tầng ứng dụng: bao gồm những giao diện người sử dụng cũng như những
công cụ đơn giản mà người lập trình có thể dùng để xử lý dữ liệu theo các bài toán.
Tầng Kết nối dữ liệu: bao gồm tập hợp các công cụ, phương thức để kết nối
tơi những dữ liệu cần làm việc trong CSDL. Ở đây, tầng kết nối bao gồm các chuẩn
Microsoft Jet 4.0 và các lơp đối tượng DAO.
24
Tầng Cơ sở dữ liệu: bao gồm các bảng, các query trong cơ sở dữ liệu thực
tại.
Như vậy để lập trình trên một CSDL phải sử dụng các đối tượng, các phương
thức ở tầng kết nối như là những công cụ để có thể truy cập được vào CSDL tác
nghiệp xử lý. Tầng kết nối đó chính là Jet 4.0 và DAO 3.6 mà chúng ta sẽ được tìm
hiểu dươi đây.
3.2. Lơp đối tương DAO
Cấu trúc một CSDL bao gồm nhiều thành phần, đòi hỏi lập trình cũng cần có
những thành phần tương ứng để làm việc. Lơp các thành phần tương ứng để có thể
lập trình được trên toàn bộ cấu trúc CSDL là lơp các đối tượng DAO. Chúng có tên
gọi, có những tập thuộc tính, các phương thức làm việc và có quan hệ mật thiết vơi
nhau.
3.2.1. Lơp các đối tương DAO
workspaces
Database
RecordSets
QueryDefs
TableDefs
Relations
Trong đó:
Workspaces: định nghĩa tập hợp các vùng làm việc. Đây có thể coi là lơp làm
việc cao nhất. Về lý thuyết có thể khai báo một vài vùng làm việc (Workspace),
những trên thực tế chỉ cần khai báo một vùng làm việc và vùng này luôn được khai
báo ngầm định cho CSDL hiện tại. Nên sẽ không cần bàn nhiều đến lơp các
WorkSpace này.
Databases: định nghĩa tập hợp các CSDL Access cần làm việc trên một dự
án
RecordSets: định nghĩa các tập hợp bản ghi (Records) cần làm việc.
QueryDefs: định nghĩa tập hợp các Query để làm việc. QueryDefs và
Recordsets là khả năng truy xuất, xử lý dữ liệu (Data Manipulation) của DAO.
TableDefs: định nghĩa tập hợp các bảng (Table) cần làm việc. Đây là khả
năng định nghĩ dữ liệu (Data-Definition Language);
Relations: định nghĩa tập hợp các quan hệ (Relationship) cần làm việc. Mỗi
lơp các đối tượng trên sẽ bao gồm tất cả các đối tượng đối tượng cùng loại trong
một đối tượng mẹ đang mở:
Databases sẽ bao gồm tất cả các CSDL đang đựoc mở trong vùng làm việc
hiện tại;
RecordSets sẽ bao gồm tập hợp tất cả các Recordset đang được mở trên
CSDL hiện tại.
Khi đó, để tham chiếu đến một đối tượng cụ thể cần làm việc, có thể dùng
chỉ số (số thứ tự của đối tượng đó trên tập hợp tất cả các đối tượng đó) hoăc dùng
tên gọi đối tượng đó để tham chiếu.
Ví dụ: liệt kê tên của tất cả các Recordset đang sử dụng trong CSDL db.
Dim db As DAO.Database
25
For i = 0 To db.Recordsets.Count
MsgBox db.Recordsets(i).Name
Next
Để làm việc tơi một đối tượng cụ thể, cần phải tham chiếu từ lơp các đối
tượng mẹ của nó.
Ví dụ: Để hiển thị giá trị của trường (Field) hoten trên tập hợp các bản ghi
(Recordset) rs1 làm như sau:
MsgBox rs1.Fields("hoten").Value
hoăc
MsgBox rs1.Fields![hoten].Value
3.2.2. Đối tương Database
Database là đối tượng dùng làm việc vơi một CSDL (trong trường hợp này
có thể hiểu một CSDL như một tệp Access .MDB).
Lơp các đối tượng con của Database được thể hiện qua sơ đồ sau:
Database
TableDefs
Containers
QueryDefs
Relations
Khai báo
Dim db As DAO.Database ' Gán db cho một CSDL cụ thể
Set db = OpenDatabase(“C:\Baitap\qlbh.mdb”)
'Đăc biệt, lệnh gán db cho CSDL hiện tại như sau:
Set db = CurrentDb
Khi không làm việc vơi CSDL nào đó, có thể ra lệnh đóng để giải phóng bộ
nhơ bằng cách:
db.Close
Sau khi lệnh này thực thi, tất cả các đối tượng con của db nếu đang mở sẽ
được đóng lại để giải phóng bộ nhơ. Bản thân db cũng được giải phóng bộ nhơ
(bằng Nothing), tất nhiên tệp CSDL và dữ liệu vân còn nguyên trên đĩa.
3.2.3. Đối tương RecordSet
Khai báo
Recordset là đối tượng dùng để miêu tả tập hợp các bản ghi của một bảng,
của một query hoăc tập các bản ghi kết quả của việc thi hành một câu lệnh SQL nào
đó.
Lơp các đối tượng con của Recordset được thể hiện qua sơ đồ sau:
26
Khai báo:
Set rs=db.OpenRecordset(<Name>)
Trong đó:
Set rs = db.OpenRecordset là lệnh để tạo ra tập hợp các bản ghi từ CSDL db
gán vào biến kiểu recordset rs;
<Name> là một xâu ký tự chỉ ra nguồn dữ liệu sẽ trả về cho Recordset. Xâu
này có thể là tên một bảng, một Query hoăc một câu lệnh SQL.
Mỗi biến Recordset khi làm việc, phải được chỉ ra Database xuất xứ của nó
(phải được tham chiếu từ một biến kiểu Database đã được khai báo).
Ví dụ: Gán tập hợp các bản ghi từ bảng canbo vào biến Recordset
Dim rs As DAO.Recordset
Set rs = db.OpenRecordset("canbo")
Ví dụ: Gán tập hợp các bản ghi từ một câu lệnh chọn dữ liệu SQL vào biến
Recordset (ở đây là các thông tin hoten, ngaysinh của tất cả các cán bộ nữ từ bảng
canbo).
Dim rs As DAO.Recordset
Set rs = db.OpenRecordset("SELECT hoten, ngaysinh FROM canbo
WHERE gioitinh = False")
Một số thuộc tính của Recordset
Thuộc tính Name: Trả về xâu ký tự trong tham số <name> của lệnh gọi
Recordset.
Ví dụ: MsgBox rs.Name
Thuộc tính AbsolutePosition: Cho biết vị trí bản ghi hiện tại (được tính từ 0).
Trong trường hợp không có bản ghi nào trên recordset hoăc con trỏ bản ghi đang
nằm ở EOF- sẽ không thể lấy được giá trị thuộc tính này. Do vậy để sử dụng thuộc
tính này thường phải đi kèm thuộc tính kiểm tra có tồn tại bản ghi nào hay không
(RecordCount > 0) và con trỏ bản ghi có ở cuối tệp chưa (EOF = False).
Thuộc tính RecordCount: Cho biết tổng số bản ghi trả về trên Recordset.
Thuộc tính EOF: Cho biết con trỏ bản ghi hiện tại có nằm ở EOF hay không?
Nếu có giá trị thuộc tính này là True, trái lại là False.
Thuộc tính Fields: Dùng tham chiếu tơi các trường (Fields) trên tập hợp các
bản ghi mà Recordset trả về. Thực tế Field cũng là một đối tượng và cũng có bộ
thuộc tính và các phương thức của nó. Vơi Field của Recordset thông thường người
ta hay sử dụng thuộc tính Value. Nếu không chỉ định thuộc tính cụ thể nào cho
Field, VBA vân hiểu ngầm định đó là Value.
Ví dụ: Hiển thị giá trị trường hoten trong Recordset rs
Msgbox rs.Fields("hoten").Value
hoăc
Msgbox rs.Fields("hoten")
Một số phương thức của Recordset
Phương thức Close: Để đóng Recordset, giải phóng bộ nhơ. Chỉ thực hiện
hành động này khi không làm việc vơi Recordset nào đó.
Phương thức di chuyển ban ghi của Recorset: Phương thức MoveFirts: Dịch
chuyển con trỏ về bản ghi đầu tiên.
Phương thức MoveLast: Dịch chuyển con trỏ về bản ghi cuối cùng
Phương thức MoveNext: Dịch đến bản ghi kề sau
Phương thức MovePrevious: Dịch đến bản ghi kề trươc
Ví dụ: duyệt và hiển thị toàn bộ Hoten của bảng canbo
27
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("canbo")
If rs.RecordCount > 0 Then
rs.MoveFirst
While rs.EOF = False
MsgBox rs.Fields("hoten").Value
rs.MoveNext
Wend
End If
Phương thức AddNew, Update: Để thêm mơi một bản ghi vào Recordset.
Qui trình thêm một bản ghi mơi như sau:
Ra lệnh Addnew
Gán giá trị cho các trường của bản ghi mơi
Ra lệnh Update
Ví dụ: thêm mơi một hồ sơ cán bộ mơi vào bảng canbo
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("canbo")
rs.AddNew
rs.Fields("canboID") = "CB0001"
rs.Fields("hoten") = "Lang Văn Tiền"
rs.Fields("ngaysinh") = #10/08/1989#
rs.Fields("gioitinh") = True
rs.Fields("chucvuID") = "CV001"
rs.Update
Phương thức Edit, Update
Phương thức Edit để sửa dữ liệu một bản ghi nào đó trên recordset. Qui trình
để sửa một bản ghi như sau:
Định vị tơi bản ghi cần sử trên recordset
Ra lệnh Edit
Gán giá trị mơi cho các trường cần sửa
Ra lệnh Update
Ví dụ: sửa hồ sơ cán bộ có mã CB0001
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT * FROM canbo WHERE
canboID='CB000565'")
If rs.RecordCount > 0 Then
rs.MoveFirst
rs.Edit
rs.Fields("hoten") = "Nguyễn Văn Tiền"
rs.Fields("ngaysinh") = #22/11/1990#
rs.Update
End If
28
Phương thức Delete: Để xoá bản ghi hiện tại ra khỏi Recordset. Khi đó bản
ghi hiện tại sẽ bị xoá bỏ khỏi CSDL. Cần thận trọng mỗi khi ra lệnh này. Thông
thường các lệnh một nút Xoá bản ghi của một mâu nhập liệu (nhập vào biến
Recordset rs) như sau:
Private Sub cmDelete_Click()
Dim tbao
tbao = MsgBox("Đã chắc chắn xoá chưa?", vbYesNo + vbCritical)
If tbao = vbYes Then
rs.Delete
rs.MoveNext
End If
End Sub
3.2.4. Đối tương QueryDef
Đối tượng Querydef dùng để tham chiếu tơi các Query có sẵn (Buil-in) trên
CSDL Access, hoăc cũng có thể lập trình tạo các Query từ các câu lệnh SQL.
Để tạo và kích hoạt một query trên VBA bằng cách thực thi câu lệnh SQL
chúng ta thực hiện như sau:
Khai báo một biến kiểu Database và một biến kiểu QueryDef
Dim db As DAO.Database
Dim qr As DAO.QueryDef
Ra lệnh tạo một Query mơi, có tên rỗng (chi ở trong bộ nhơ)
Set qr = db.CreateQueryDef(<tên query>)
Gán chuỗi lệnh SQL vào thuộc tính SQL của query
qr.SQL = "lệnh SQL cần thi hành"
Ra lệnh thi hành query
qr.Execute
giai phóng bộ nhơ
qr.Close
Trong đó:
Bắt buộc phải khai báo một biến kiểu QueryDef để làm việc (biến qr);
Phải có một biến Database đã được khai báo sẵn (biến db);
Lệnh Set qr = db.CreatQueryDef(<tên query>) để tạo một query mơi lên
CSDL. <tên query> sẽ được hiển thị trên danh sách trong thẻ Queries trên cửa sổ
Database. Nếu <tên query>="", query này sẽ chỉ tồn tại trong bộ nhơ.
Tuỳ thuộc vào mục đích công việc mà có đăt tên query hay không, nếu chỉ
đơn thuần tạo một query để xử lý công việ nào đó rồi giải phóng, nên đăt <tên
query>="";
Lệnh qr.SQL=<câu lệnh SQL> để gán lệnh SQL cần thực thi vào Query. Tuỳ
thuộc vào câu lệnh SQL này mà query sẽ thực hiện những gì.
Ví dụ: xoá tất cả các bản ghi trên bảng cán bộ:
qr.SQL = "DELETE * FROM Sinhvien"
Để tạo và kích hoạt một query trên VBA bằng cách thực thi câu lệnh SQL
chúng ta thực hiện như sau:
29
Khai báo một biến kiểu Database và một biến kiểu QueryDef
Dim db As DAO.Database
Dim qr As DAO.QueryDef
Ra lệnh tạo một Query mơi, có tên rỗng (chi ở trong bộ nhơ)
Set qr = db.CreateQueryDef(<tên query>)
Gán chuỗi lệnh SQL vào thuộc tính SQL của query
qr.SQL = "lệnh SQL cần thi hành"
Ra lệnh thi hành query
qr.Execute
giai phóng bộ nhơ
qr.Close
Trong đó:
Bắt buộc phải khai báo một biến kiểu QueryDef để làm việc (biến qr);
Phải có một biến Database đã được khai báo sẵn (biến db);
Lệnh Set qr = db.CreatQueryDef(<tên query>) để tạo một query mơi lên
CSDL. <tên query> sẽ được hiển thị trên danh sách trong thẻ Queries trên cửa sổ
Database. Nếu <tên query>="", query này sẽ chỉ tồn tại trong bộ nhơ.
Tuỳ thuộc vào mục đích công việc mà có đăt tên query hay không, nếu chỉ
đơn thuần tạo một query để xử lý công việ nào đó rồi giải phóng, nên đăt <tên
query>="";
Lệnh qr.SQL=<câu lệnh SQL> để gán lệnh SQL cần thực thi vào Query. Tuỳ
thuộc vào câu lệnh SQL này mà query sẽ thực hiện những gì.
Ví dụ: xoá tất cả các bản ghi trên bảng cán bộ:
qr.SQL = "DELETE * FROM canbo"
3.2.5. Đối tương TableDef
Đối tượng TableDef được dùng để tham chiếu tơi các bảng dữ liệu (Table)
trên CSDL. Thông qua đối tượng này có thể thiết kế, chỉnh sửa được cấu trúc các
bảng dữ liệu trong chế độ Run-time của VBA như trên chế độ thiết kế bảng Design
View.
Một số thuộc tính quan trọng của TableDef
Thuộc tính Name: Cho biết tên bảng được gán vào biến kiểu TableDef
Thuộc tính RecordCount: Cho biết tổng số bản ghi hiện có trên bảng được
gán bởi biến TableDef
Thuộc tính DateCreated: Cho biết thời gian tạo ra bảng được gán vào biển
kiểu TableDef
Thuộc tính Fields: Để tham chiếu tơi các trường của bảng. Đây là thuộc tính
hay được sử dụng nhất đối vơi TableDef. Thực chất, Field ở đây là một đối tượng,
do đó cũng có tập các thuộc tính và phương thức riêng cho thuộc tính này.
Ví dụ: thủ tục hiển thị tên của tất các các trường trong một bảng (ngầm định trên
một CSDL đã được khai báo và gán biến db - kiểu Database).
Sub LietKeTenTruong(tenbang As String)
Dim tbl As DAO.TableDef
30
Set tbl = db.TableDefs(tenbang)
For i = 0 To tbl.Fields.Count - 1
MsgBox tbl.Fields(i).Name
Next
End Sub
Một số phương thức của TableDef
Phương thức CreateTableDef: Để tạo ra một bảng mơi bằng VBA. Cú pháp tạo
bảng mơi như sau:
Set tbl = db.CreateTableDef(<Tên bảng mơi>)
Các thủ tục tạo trương mơi cho bang
db.TableDefs.Append tbl
Trong đó:
db – là biến kiểu Database đã được gán bởi CSDL cần làm việc (bảng mơi sẽ
được tạo ra trên CSDL này);
<Tên bảng mơi> là tên bảng cần tạo.
Lệnh db.TableDefs.Append tbl là lệnh ghi cấu trúc bảng đang khai báo lên
CSDL đã chỉ định.
Phương thức CreateField: Để tạo ra các trường cho một bảng kiểu TableDef nào
đó. Để thêm một trường mơi lên bảng, sử dụng cú pháp sau:
tbl.Fields.Append tbl.CreateField(<tên trường>,<KiểuDL>,<độlơn>)
Trong đó:
<tên trường> - tên trường mơi cần tạo;
<KiểuDL> - là một tuỳ chọn để khai báo kiểu dữ liệu của trường cần tạo.
Kiểu dữ liệu được khai báo theo các hằng số như sau:
dbBoolean Boolean
dbByte Byte
dbChar Currency
dbDate Date/Time
dbDecimal Decimal
dbDouble Double
dbFloat Float
dbGUID GUID
dbInteger Integer
dbLong dbLong
dbMemo Memo
dbNumeric Numeric
dbSingle Single
dbText Text
dbTime Time
<Độ lơn> là một tuỳ chọn để khai báo độ lơn dữ liệu nếu cần.
Ví dụ:
Sub TaoBangMoi()
On Error GoTo Loi
Dim tbl As DAO.TableDef
Set tbl = db.CreateTableDef("NewTable")
tbl.Fields.Append tbl.CreateField("ID", dbInteger)
tbl.Fields.Append tbl.CreateField("Name", dbText)
tbl.Fields.Append tbl.CreateField("Age", dbByte)
31
tbl.Fields.Append tbl.CreateField("DateBirth", dbDate)
tbl.Fields.Append tbl.CreateField("Comment", dbMemo)
db.TableDefs.Append tbl
Exit Sub
Loi:
If Err.Number = 3010 Then
MsgBox "Đã tồn tại bảng có tên " + tbl.Name
End If
End Sub
3.2.6. Đối tương Relation
Đối tượng Relation dùng để tạo kết nối (RelationShip) giữa 2 bảng trong
CSDL Access.
Ví dụ: tạo kết nối giữa 2 bảng hoadon và khach trong CSDL Quản lý bán hàng.
Sub CreatRelationShip()
On Error GoTo Loi
Dim db As DAO.Database
Dim rls As DAO.Relation
Set db = CurrentDb
Set rls = db.CreateRelation("TaoQuanHe", "khach", "hoadon",
dbRelationUpdateCascade)
rls.Fields.Append rls.CreateField("khachID")
rls.Fields("khachID").ForeignName = "khachID"
db.Relations.Append rls
Loi:
If Err.Number = 3012 Then
MsgBox "Đã tồn tại quan hệ này !"
End If
End Sub
Trong truờng hợp đã tồn tại kết nối này, một thông báo lỗi tiếng Việt "Đã tồn
tại quan hệ này !" xuất hiện.
3.3. Bài toán đặt lọc dư liêu
Những yêu cầu cụ thể về lọc dữ liệu (điều kiện lọc). Kết quả trả về sẽ là một
tập hợp các bản ghi, có thể được kết xuất trên form hoăc được in ra máy in dươi
dạng report.
Quy trình thực hiện
Bươc 1: Xây dựng Subform - form sẽ chứa những kết quả lọc được.
Bươc 2: Xây dựng Mainform - form chứa những thiết lập điều kiện để lọc.
Bươc 3: Thực hiện lọc ra các bản ghi thoả mãn các điều kiện trên Mainform và hiển
thị kết quả lên Subform.
Ví dụ 1: Thực hiện form lọc dữ liệu sau:
32
Hình 3.2.6.1 Kết qua hiển thị
Quy trình thực hiện:
Bươc 1: Xây dựng Form con
Sử dụng các ky năng thông thường để tạo một form con đáp ứng được các
kết quả theo như bài toán. Cụ thể từng bươc như sau:
Tạo mơi form ở chế độ Design view;
Thiết lập thuộc tính Record Source cho form là một Total Query như sau:
Hình 3.2.6.2 Màn hình thiết kế
Thiết lập thuộc tính Defaul View cho form con là Datasheets;
Mở cửa sổ FieldList và thiết kế form như sau:
33
Hình 3.2.6.3 kết qua hiển thị
Đóng thiết kế form con lại và ghi ten là frm_formcon.
Bươc 2: Xây dựng form mẹ
Tạo mơi form ở chế độ Design view;
Đưa hộp Combobox từ thành công cụ Toolbox lên form mẹ (giả sử tên
(Name) của Combo này là Combo0). Sử dụng tính năng Combobox Wizard của
Access để làm việc này. Mục đích là đưa danh sách các khách hàng từ bảng khach
vào hộp Combo để chọn, phục vụ nhu cầu lọc dữ liệu.
Sử dụng đối tượng Sub-form/Sub-report trên thanh công cụ Toolbox để đưa
form con vừa tạo lên form mẹ. Ngầm định tên của subform này là frm_formcon.
Hình 3.2.6.4 Màn hình thiết kế
Bươc 3: Thiết lập lệnh lọc dữ liệu trên form mẹ
Công việc của bươc này là làm sao để sau khi chọn tên một khách hàng ở
hộp Combobox, danh sách các hoá đơn mua hàng của khách đó sẽ được hiển thị lên
form con. Muốn thế, việc lập trình lọc dữ liệu ở đây phải được thực hiện trong thủ
tục đáp ứng sự kiện Combo0_Click.
Giai thuật đáp ứng sự kiện Combo0_Click:
Tạo một biến Recordset để thi hành câu lệnh SQL đưa ra danh sách kết quả
thoả mãn điều kiện đăt lọc:
"SELECT hoadonID, khachID, ngayban, Sum([soluong]*[dongia])"
34
+ " AS tongtien FROM "
+ " hoadon INNER JOIN (hang INNER JOIN hangban ON "
+ " hang.hangID = hangban.hangID) ON hoadon.hoadonID ="
+ " hangban.hoadonID WHERE Trim(khachID)='"+Trim(Combo0)"
+ " GROUP BY hoadonID, khachID, ngayban "
Gán thuộc tính Recorset của form con là biến kiểu recordset vừa tạo ra (chứa
kết quả đã lọc).
Ra lệnh làm tươi dư liệu cho form con.
Chú ý: trươc đó phải khai báo một biến kiểu Database toàn cục trong form và định
nghĩa nó ở thủ tục Form_Load()
Mô ta đoạn Code:
Dim db As DAO.Database
Private Sub Form_Load()
Set db = CurrentDb
End Sub
Private Sub Combo0_Click()
Dim rs As DAO.Recordset
Set rs = db.OpenRecordset("SELECT hoadonID, khachID, "
+ " ngayban, Sum([soluong]*[dongia]) AS tongtien FROM"
+ " hoadon INNER JOIN (hang INNER JOIN hangban ON "
+ " hang.hangID = hangban.hangID) ON hoadon.hoadonID ="
+ " hangban.hoadonID WHERE Trim(khachID)='"+Trim(Combo0)"
+ " GROUP BY hoadonID, khachID, ngayban ")
Set frm_formcon.Form.Recordset = rs
frm_formcon.Requery
End Sub
35
Bài 4: Xây dựng thực đơn và thanh công cụ
Mục tiêu:
- Biết các cách tạo menu và thanh công cụ trong Access;
- Gắn đươc menu và thanh công cụ trên các form giao diện;
- Nghiêm tuc, ti mi trong quá trình tiếp nhận ly thuyết và thực hành.
4.1. Tạo menu
Menu là đối tượng được thiết kế có cấu trúc nhằm gắn kết các chức năng
phần mềm lại để người dùng thuận tiện trong việc khai thác các tính năng cũng như
CSDL. Có nhiều cách tạo menu trong Access, dươi đây chúng tôi trình bày cách
đơn giản, dễ tạo và hiệu quả, đó là: sử dụng khả năng Customize của thanh công cụ.
Trươc khi tạo menu, đảm bảo rằng xây dựng xong đầy đủ các tính năng cần
thiết của phần mềm; bươc này sẽ là cuối cùng, mang tính chất gắn kết các chức
năng lại thành phần mềm hoàn chỉnh.
Giả sử trong CSDL Quản lý lương cán bộ đã làm được những việc sau:
1. Đã tạo xong CSDL
2. Đã tạo form nhập dữ liệu cho bảng chucvu, form nhập dữ liệu cho
bảng phongban, form nhập dữ liệu cho bảng canbo;
3. Đã tạo xong report để in ra Danh sách chức vụ, Danh sách phòng ban;
4. Đã tạo xong form tìm kiếm cán bộ theo tên, in danh sách cán bộ một
phòng ban
5. Đã tạo xong form để giơi thiệu phần mềm (frmAbout)
Dươi đây là hương dân để tạo ra hệ thống menu có cấu trúc như sau:
Hình 4.1: Các mục chọn của menu Hệ thông
36
Hình 4.2: các mục chọn của menu Dư liệu
Hình 4.3: các mục chọn của menu In ấn
Các bước để tọ hệ thống menu trên như sau:
Bươc 1: Tạo một Toolbar mơi
Nhấn chuột phải lên thanh công cụ của Access, chọn Customize
Hộp thoại Customize xuất hiện
37
Hình 4.4: Hộp thoại Customize
Để tạo mơi một thanh công cụ, nhấn nút New. Hộp thoại sau xuất hiện, yêu
cầu gõ vào tên cho thanh công cụ:
Hình 4.5 Tạo thanh công cụ
Hãy gõ tên cho thanh công cụ, giả sử Quản lý lương. Gõ xong nhấn OK. Khi
đó mà hình làm việc xuất hiện một thanh công cụ trắng. Công việc tiếp theo là xây
dựng hệ thống Menu trên thanh công cụ này.
Hình 4.6 Chọn đôi tương
Bươc 2: Xây dựng các mục cấp 1
Các mục cấp 1 là: Hệ thống, Dữ liệu và In ấn. Để xây dựng các mục này,
trên hộp thoại Customize mở thẻ Commands. Ở danh sách Categories chọn New
Menu và lần lượt kéo mục New Menu trên danh sách Commands thả lên Toolbar
38
đang thiết kế:
Hình 4.7 Chọn menu
Hãy lần lượt kéo thả đủ số menu cấp 1 (3 menu cấp 1). Tiếp theo lần lượt
thay đổi tiêu đề cho 3 menu này bằng cách:
Nhấn chuột phải lên menu cần thay đổi;
Gõ tiêu đề mơi vào hộp Name (hình dươi):
Hình 4.8 Đặt tên
Bươc 3: Xây dựng các mục cấp con
Ba mục tạo trên là cấp 1, các mục còn lại nằm trong 3 mục đó đều là mục
con, cháu. Bươc này sẽ xây dựng toàn bộ các mục con như vậy.
Mỗi mục con có thể là lời gọi một Form, một Report, một bảng,.. (gọi tắt là
đối tượng) ra để làm việc. Muốn mở đối tượng nào, hãy xác định chủng loại đối
tượng đó bên danh sách Categories; tiếp theo dùng chuột kéo-thả đối tượng cần đưa
lên menu từ danh sách Commands lên vị trí xác định trên menu đang thiết kế.
39
Hình 4.9 Tạo mục cấp con
Hình trên minh hoạ cách đưa lời gọi đến form frmAbout lên menu Hệ thống.
Tương tự hãy đưa các form và report còn lại lên vị trí thích hợp trên menu
Quản lý lương. Cách đăt tên cho các menu này thực hiện tương tự như cách đăt tên
cho 3 menu mẹ đã trình bày.
Đăc biệt mục Exit lấy ở File | Exit.
Bươc 4: Quyết định là Menu hay ToolBar
Vơi các bươc làm việc như trên, Access ngầm hiểu là đang tạo một ToolBar.
Bươc này hương dân cách tuỳ chọn lại là menu hay toolbar? Cách làm như
sau:
Trở về thẻ ToolBars của hộp thoại Customize, chọn tên toolbar cần làm việc
(Quản lý lương) và nhấn nút Properties:
Hình 4.10 Lựa chọn Menu
40
Hộp thoại Toolbar Properties xuất hiện cho phép thiết lập các thuộc tính cho
Toolbar đang chọn:
Hình 4.11 Lập thuộc tính
Toolbar Name - để thiết lập tên cho ToolBar;
Type - để xác định kiểu là ToolBar hay Menu?
Docking - để tuỳ chọn các kiểu khoá Menu: không cho phép thay đổi lại
(Can't Change); cho phép thay đổi lại Any Allow);
Show on Toolbars Menu – cho phép hiển thị trên hệ thống thanh công cụ và
menu;
Allow Customizing – cho phép định nghĩa lại các mục;
Allow Resizing – cho phép thay đổi kích cỡ hiển thị;
Allow Moving – cho phép di chuyển được;
Thiết lập xong nhấn Close
4.2. Tạo menu sử dụng công cụ
Trong Access, ngoài menu chuẩn ta có thể tạo một menu cho chương trình
để thực hiện các chức năng của chương trình như mở Form xuất nhập dữ liệu, lập
phiếu thu chi, in ấn các báo cáo…
4.2.1. Ta thực hiên như sau:
Vào menu View, chọn lệnh Toolbars (hoăc R_click vào thanh menu), chọn
Customize, trong thẻ Toolbar của hộp thoại Customize ta click vào nút New, xuất
hiện hộp thoại New Toolbar, ta gõ tên menu cần đăt vào khung Toolbar Name. OK
Click vào Propeties, xuất hiện hộp thoại: trong khung Type ta chọn Menubar
Chọn thẻ Command, trong khung Categories dòng New Menu và kéo chuột
từ nút New Menu sang thả vào thanh Menu vừa tạo.
R-click vào tên Menu vừa tạo để thay đổi các tiêu đề, biểu tượng như trường
hợp Toolbar
Vào thẻ Commands chọn các biểu tượng muốn tạo ra trên Menu, lần lượt kéo
chúng thả vào Menu, sau đó R-click đổi lại tên, biểu tượng (nếu cần).
Thường ta tạo các Menu mở hộp Form nhập liệu, các báo cáo,…trong All
Form, All Report.)
4.2.2. Găn Menu vào chương trinh:
Để gắn Menu vào chương trình ta thực hiện một trong 2 cách sau:
41
Cách 1: Tạo một Macro có tên là AutoExec có: Action : SetValue,
Argument : Item: Application Menubar; Expression: Tên của Menu vừa tạo, nằm
trong căp dấu ngoăc kép.(ví dụ:”TuTao”)
Cách 2: Vào Menu Tool, chọn lệnh StarUp, xuất hiện hộp thoại StarUp vơi
các tuỳ chọn như sau, chọn xong click OK.
4.3. Tạo menu sử dụng macro
Ta có thể sử dụng Macro để xây dựng hệ thống Menu cho phép lựa chọn
công việc dễ dàng. Thông qua Menu, các đối tượng trong Database được liên kết
thành một khối thống nhất, thuận tiện cho người sử dụng.
Sau đây trình bày cách tạo một hệ thống Menu gồm các mục sau:
4.3.1. Cách tạo
Bươc 1: Tạo Menu cấp 1:
Trong cửa sổ Database, chọn Macro / New, xuất hiện cửa sổ Macro, khai báo
các thông tin như sau:
Hình 4.12 Cửa sổ Macro
Bươc 2: Tạo Menu cấp 2
Chọn Macro / New, chọn View / Macro Names để thêm cột Macro Name,
khai báo các thông tin như sau:
42
Hình 4.13 Cửa sổ tạo menu
Hình 4.14 Tạo menu cấp 2
Action Arguments cho Macro Xem Danh sách Cán bộ
Report Name: R_DSCanbo
View : Print Preview
Hình 4.15 gán hành động
Bươc 3: Tạo Menu cấp 3
43
Hình 4.16 tạo menu cấp 3
Bươc 4: Gắn Menu vừa tạo lên một Form (hoăc Report)
Trong cửa sổ Database, chọn Form / New
Kích chuột vào biểu tượng Properties trên thanh công cụ Form
Hình 4.17 Gắn menu vào form
Menu Bar: ghi tên của Macro dành cho Menu cấp 1
Lưu ý: Để tạo Menu, trươc khi tạo các Macro, các nguồn số liệu như Table, Query,
Report (nếu có) cần phải chuẩn bị trươc.
Trang trí thêm cho Form các thành phần như:
Tiêu đề chương trình
Hình vẽ để minh hoạ
Các trang trí khác (nếu muốn)
4.3.2. Sử dụng:
Mở Form đã gắn vơi thực đơn được tạo, có kết quả sau:
44
Hình 4.18 kết qua
Khi ta đưa trỏ chuột chọn menu thì menu đó sổ xuống một thực đơn các cấp
theo menu đã tạo.
Đưa trỏ chuột vào chỉ mục cần thực thi và bấm chọn thì menu đó thi hành.
4.4. Tạo thanh công cụ
Một Menu hay Toolbar sau khi đã tạo ra, muốn đi kèm vơi đối tượng nào
phải thực hiện gắn kết vào đối tượng đó bằng cách thiết lập thuộc tính Toolbar - nếu
muốn gắn Toolbar hoăc Menu Bar – nêu muốn gắn menu bar.
Các bước tiến hành:
Bươc 1: Mở đối tượng cần gắn kết Menu hoăc ToolBar (ví dụ một form) ở chế độ
Design View:
Bươc 2: Chọn Menu Bar hoăc ToolBar cần gắn kết bằng cách thiết lập thuộc tính
ToolBar hoăc Menu Bar.
Tạo form chính: Form chính là form chứa hệ thống menu (hoăc toolbar) của
phần mềm, nó xuất hiện ngay sau khi khởi động (Start-Up Object). Vơi mỗi phần
mềm đóng gói hầu hết phải tạo form chính. Để từ đây có thể mở đến các chức năng
phần mềm cần làm việc.
Trong một tệp Access, form chính là một form được thiết kế ở chế độ Design
view; có gắn Menu (hoăc ToolBar) và được thiết lập khởi động đầu tiên mỗi khi tệp
này được mở.
Dươi đây là hương dân cách tạo form chính cho CSDL Quản lý lương như
thể hiện ở mục 1. Tạo menu:
Bươc 1: Tạo frmMain
Tạo một form mơi ở chế độ Design View;
Đăt tên form này là frmMain;
Thiết lập một số thuộc tính cho form như sau:
Menu Bar: Quản lý
Caption: Quản lý
Record: Seletor No
Navigation Button: No
Diving Line: No
Để mỗi khi form này khởi động sẽ tự động phóng cực đại cửa sổ, hãy mở cửa
sổ VBA và viết lệnh cho sự kiện Form_Open như sau:
Private Sub Form_Open(Cancel As Integer)
DoCmd.Maximize
End Sub
Bươc 2: Thiết lập các thông tin về ứng dụng
Mở thực đơn Tools | Startup.., hộp thoại Startup xuất hiện:
45
Hình 4.4.1 Tạo thanh công cụ
Gõ tiêu đề phần mềm vào ô Application Title.
Chọn form chính ở hộp Display Form/Page (chọn frmMain).
Chọn Menu cho ứng dụng ở hộp Menu Bar (chọn menu Quản lý lương).
Hộp Application Icon để chọn một biểu tượng cho ứng dụng (loại tệp *.ico);
Cho phép hiển thị cửa sổ Database hay không?;
Cho phép hiển thị thanh trạng thái?
Cho phép thay đổi menu bar và toolbar?
Thiết lập xong nhấn OK để đóng lại.
4.5. Tạo menu tăt
Trươc khi tạo menu, chúng ta cần phải đảm bảo đã xây dựng xong đầy đủ
các tính năng cần thiết của phần mềm; bươc này sẽ là cuối cùng, mang tính chất gắn
kết các chức năng lại thành phần mềm hoàn chỉnh.
Quy trình tạo hệ thống menu:
Bươc 1: Tạo một Toolbar mơi.
Nhấn chuột phải lên thanh công cụ của Access, chọn Customize. Hộp thoại
Customize có các lựa chọn sau:
Hình 4.5.1 Tạo menu tắt
46
Để tạo mơi một thanh công cụ, nhấn nút New. Hộp thoại sau xuất hiện, yêu
cầu gõ vào tên cho thanh công cụ:
Hãy gõ tên cho thanh công cụ. Gõ xong nhấn OK. Khi đó mà hình làm việc
xuất hiện một thanh công cụ trắng. Công việc tiếp theo là xây dựng hệ thống Menu
trên thanh công cụ này.
Hình 4.5.2 Cách tạo
Bươc 2: Xây dựng các mục cấp 1
Để xây dựng các mục này, trên hộp thoại Customize mở thẻ Commands. Ở
danh sách Categories chọn New Menu và lần lượt kéo mục New Menu trên danh
sách Commands thả lên Toolbar đang thiết kế, đăt tên cho danh mục menu.
47
Hình 4.5.3 Đặt tên
Bươc 3: Xây dựng các mục cấp con
Mỗi mục con có thể là lời gọi một Form, một Report, một bảng,.. (gọi tắt là
đối tượng) ra để làm việc. Muốn mở đối tượng nào, hãy xác định chủng loại đối
tượng đó bên danh sách Categories; tiếp theo dùng chuột kéo-thả đối tượng cần đưa
lên menu từ danh sách Commands lên vị trí xác định trên menu đang thiết kế.
Đặc biệt mục Exit lấy ở File | Exit.
Bươc 4: Quyết định là Menu hay ToolBar
Vơi các bươc làm việc như trên, Access ngầm hiểu là đang tạo một ToolBar.
Chúng ta có thể tuỳ chọn lại là menu hay toolbar. Cách làm như sau:
Trở về thẻ ToolBars của hộp thoại Customize, chọn tên toolbar cần làm việc,
nhấn nút Properties: Hộp thoại Toolbar Properties xuất hiện cho phép thiết lập các
thuộc tính cho Toolbar đang chọn:
Thiết lập xong nhấn Close.
48
Bài 5: Xây dựng ưng dụng Thời gian: 20 giờ (LT:6 giờ; TH: 13 giờ; KT:1 giờ)
Mục tiêu:
- Trình bày các kiến thức về quy trình xây dựng ứng dụng;
- Xây dựng đươc các ứng dụng vơi các form, và báo cáo hiệu qua và thân thiện;
- Xây dựng đươc tính bao mật cho ứng dụng;
- Chủ động, sáng tạo, ti mi trong quá trình thực hành tạo các ứng dụng.
5.1. Phân tích yêu cầu
5.1.1. Khảo sát bài toán
Bài toán quan ly nhân sự:
Yếu tố nhân sự và tiền lương là yếu tố quyết định sự tồn tại và phát triển của
bất kỳ một tổ chức, doanh nghiệp nào, nó đóng vai trò cốt lõi trong tổng thể hệ
thống quản trị nhân sự của doanh nghiệp đó. Tổ chức quản lý nhân sự và kế toán
tiền lương như thế nào để mang lại hiệu quả nhất? Đó là bài toán mà tất cả mọi
người quản lí cần quan tâm và giải quyết. “Ứng dụng access trong công tác quản lý
nhân sự và kế toán tiền lương” xây dựng một chương trình vơi các ứng dụng thích
hợp trong việc quản lý nhân sự, tính lương, xử lý các số liệu kế toán, ghi sổ, in sổ
liên quan đến phần hành kế toán tiền lương và các báo cáo kế toán.
Việc ứng dụng khoa học ky thuật vào quá trình sản xuất và quản lý không
còn là mơi lạ đối vơi các doanh nghiệp Việt Nam. Đăc biệt trong quá trình quản lý
hiện nay, hầu hết các doanh nghiệp đều sử dụng hệ thống công nghệ thông tin phát
triển vơi sự trợ giúp đắc lực từ các phần mềm quản lý, kế toán… nó giúp các doanh
nghiệp có một bộ phận quản lý tốt hơn, xử lý nhanh chóng các chứng từ, giúp các
doanh nghiệp nhanh chóng đưa ra được các quyết định đúng đắn kịp thời cho sự
phát triển của doanh nghiệp. Trong các phần mềm phổ biến trên thị trường hiện nay,
MS OFFICE vơi MS Access là hệ quản trị cơ sở dữ liệu thông dụng, dễ học, dễ
dùng, có thể tiếp cận một cách trực quan và nhanh chóng nhất, mà hầu hết các
doanh nghiệp đều có bộ công cụ dành cho văn phòng này. Và điểm nổi bật là nó tuy
đơn giản nhưng có thể đạt được các chức năng của phần mềm chuyên nghiệp khác
nhau như: quản lý nhân sự, quản lý các chứng từ, các bảng chấm công, báo cáo
thống kê, biểu mâu, tìm kiếm...Dựa trên những ưu điểm đó, nhóm đã tập trung
nghiên cứu và xây dựng nên một chương trình quản lý nhân sự và tiền lương chạy
trên nền MS Access mang tên “Ứng dụng access trong công tác quản lý nhân sự
và kê toán tiền lương”, đề tài nghiên cứu xây dựng một chương trình vơi các ứng
dụng thích hợp trong việc quản lý nhân sự, tính lương, xử lý các số liệu kế toán, ghi
sổ, in sổ liên quan đến phần hành kế toán tiền lương và các báo cáo kế toán…
5.1.2. Khái quát về quá trình quản lý nhân sự
Quá trình quản lý nhân sự bao gồm ba quá trình chính đó là:
Quan ly hồ sơ: tuyển dụng và đào tạo nhân sự, quản lý hồ sơ thông tin của
nhân viên
Quan ly lương: quản lý các thông tin lương cơ bản, tính lương tháng, thưởng
và phụ cấp cho cán bộ công nhân viên
Quan ly danh mục: Khi một đối tác hay một cổ đông muốn biết thông tin về
các phòng ban, hệ thống quản lý nhân sự cần đưa ra thông tin các tổ chức, các
phòng ban trong công ty. Đồng thời, khi họ muốn biết thông tin những người lãnh
đạo trong các bộ phận bất kì, thông qua các danh mục trong hệ thống nhân sự phòng
HCNS có thể đưa ra danh sách các chức vụ trong công ty cùng lý lịch của họ. Danh
49
mục còn cung cấp cho nhân viên lịch làm việc của tuần hoăc tháng tiếp theo để họ
có thể chủ động trong công việc...
5.1.3. Khái quát chung về kê toán tiền lương
Tiền lương là biểu hiện bằng tiền của một bộ phận sản phẩm xã hội mà người
lao động được sử dụng để bù đắp hao phí lao động của họ trong quá trình sản xuất
kinh doanh. Tiền lương (hay tiền công) gắn liền vơi thời gian và kết quả lao động
mà người lao động đã tham gia thực hiện trong quá trình sản xuất kinh doanh của
doanh nghiệp.
5.2. Thiêt kê các thành phần cua ưng dụng
5.2.1. Xác định các kiểu thực thể và thực thể:
Các kiểu thực thể:
Tài khoản sử dụng 1; Chấm công; bảng lương; Trình độ văn hóa; Chứng từ phát
sinh; Nhân viên; Phòng ban; chức vụ.
Thực thể:
Căn cứ vào kiểu thực thể ta đưa ra được các thực thể tương ứng.
5.2.2. Mô hình quan hê dư liêu và quy trình dòng thông tin
Mô hình quan hệ dư liệu:
Hình 5.1: Mô hình quan hệ dư liệu
Quy trình dòng thông tin:
50
Hình 5.2: Sơ đồ dòng dư liệu
5.3. Xây dựng form giao diên chính
Kế toán tổng hợp:
Hình 5.3: Biểu mẫu chính kế toán tổng hơp
Chức năng quản lý nhân sự:
Form quản lý hồ sơ nhân viên: gồm các chức năng quản lý hồ sơ, thông tin
lương cơ bản.
Form chấm công: chấm công cho các nhân viên
51
Hình 5.4: Biểu mẫu chấm công
Ngày công tính lương đươc tính theo công thức:
Ngày Công tính lương = Ngày bình thường + 1,5 * Chủ Nhật + Ngày Lễ
Chức năng Kế toán chi tiết:
Report phiếu lương: chi tiết thông tin lương cho từng nhân viên. Ở đây các
khoản được tính theo công thức như sau:
TONGLUONG = IIf([NGAYTL]=26, [LGCB]+[PHUCAP]+[THUONG],
IIf([NGAYTL]<26,([LGCB]/26*[NGAYTL])+[PHUCAP]+[THUONG],IIf([NGA
YTL]>26,([LGCB]/26*[NGAYTL])+[PHUCAP]+[THUONG])))
BHXH = 0,05*[LGCB]
BHYT = 0,01*[LGCB]
BHTN = 0,01*[LGCB]
THUETNCN =
IIf([TONGLUONG]=5000000,0,05*[TONGLUONG],IIf([TONGLUONG]>50000
00 And
[TONGLUONG]<=10000000,[TONGLUONG]*,1,IIf([TONGLUONG]>10000000
And
[TONGLUONG]<=18000000,[TONGLUONG]*,15,IIf([TONGLUONG]>1800000
0,[TONGLUONG]*,2,0))))
LUONGTHUCTE = [TONGLUONG] - [BHYT] - [BHXH] - [BHTN] -
[THUETNCN] - [TU]
52
Hình 5.5: Bang thanh toán lương, bang kê các khoan trích nộp theo lương
Report Bảng thanh toán lương, bảng kê các khoản trích theo lương (hình 3):
theo dõi tình hình thanh toán lương cho tất cả nhân viên có trong dữ liệu và thông
tin về các khoản trích nộp theo lương theo quy định của nhà nươc.
Chức năng Kế toán tổng hợp:
Chọn NHẬT KÝ CHUNG để xem sổ nhật ký chung và nhập các nghiệp vụ
kinh tế phát sinh
Hình 5.6: Sổ nhật ky chung
Sau khi nhập các nghiệp vụ kinh tế phát sinh, chương trình sẽ tự động lên các
sổ cái các tài khoản.
53
Hình 5.7: Sổ cái, nhật ky chung
5.4. Kêt luân và hương phát triển
Ngày nay, tất cả các doanh nghiệp đều nhận thức được tính quan trọng của
việc xây dựng hệ thống quản lý hiệu quả nhân sự và kế toán tiền lương. Đối vơi một
doanh nghiệp đây là yếu tố cơ bản của quá trình sản xuất và là yếu tố mang tính chất
quyết định đến sự tồn tại và phát triển của mỗi doanh nghiệp.
Trong điều kiện nền kinh tế ngày càng phát triển, khoa học ky thuật công
nghệ ngày càng hiện đại, các doanh nghiệp cần phải hoàn thiện công tác tính và trả
lương để vừa mang tính khoa học, khách quan và hợp lý, phù hợp vơi tình hình thực
tế của doanh nghiệp, nhằm giảm chi phí hoạt động kinh doanh và tối đa hoá lợi
nhuận. Từ đó góp phần khuyến khích người lao động hăng say làm việc, phát huy
khả năng sáng tạo, nâng cao trách nhiệm quản lý làm tăng năng suất lao động và là
đòn bẩy kinh tế quan trọng, đem lại lợi nhuận cao cho doanh nghiệp, giúp doanh
nghiệp ngày càng phát triển hơn.
5.5. Xây dụng hê thống menu, thanh công cụ
Mỗi một chức năng ta có thể tạo các cấp độ Menu cho chương trình cho phù hợp và
tiện cho người sử dụng
5.6. Bảo mât ưng dụng
Sử dụng VBA để thiết kế giao diện kiểm tra mật khẩu như sau:
54
Nút lệnh “Đồng ý” có đoạn Code như sau:
Private Sub Command4_Click()
DoCmd.Maximize
If IsNull(tn) Then
MsgBox "NHAP VAO MAT KHAU ", 64 , "THONG BAO"
Else
If tn = "123456" And ten = "ketoan" Then
DoCmd.Close
DoCmd.OpenForm "F_MAIN"
Else
MsgBox "pass'123456'ten'nhom4'", 64, "thong bao"
End If
End If
End Sub
55
TÀI LIỆU CẦN THAM KHẢO
[1]:Phạm Văn Ất, Ky thuật lập trình Access trên Windows, NXB Hà Nội, 2002;
[2]:Dương Thùy Trang, Tham khảo nhanh Microsoft Access 2003, NXB Giao thông
vận tải, 2006;
[3]:Trương Công Phuc, Tự học và ứng dụng Microsoft Access 2007, NXB Hồng
Đức, 2008.