You are on page 1of 121

Bài giảng Access

Chương 0: Giới thiệu


Cơ sở dữ liệu (CSDL, database) là một bộ sưu tập các dữ liệu tác nghiệp được lưu trữ lại
và được các hệ ứng dụng của một xí nghiệp cụ thể nào đó sử dụng.

Hệ quản trị cơ sở dữ liệu (HQTCSDL, Database Management System-DBMS) là hệ


thống phần mềm cho phép:
• Định nghĩa, tạo lập: xác định kiểu, cấu trúc, ràng buộc dữ liệu, lưu trữ dữ liệu
trên các thiết bị nhớ.
• Thao tác: truy vấn, cập nhật, kết xuất,... các CSDL cho các ứng dụng khác nhau
Ví dụ: HQTCSDL MS SQL Server, MS Access, DB2, PostGreSQL, MySQL, Oracle,
FoxPro, Foxbase,...

Hệ cơ sở dữ liệu (HCSDL, Database System) là một hệ thống gồm 4 thành phần:


• Hệ quản trị cơ sở dữ liệu
• Phần cứng
• CSDL và phần mềm ứng dụng
• Những người sử dụng
Ví dụ: hệ quản lý đào tạo, hệ quản lý nhân sự, hệ quản lý kinh doanh,...

Các tính năng của hệ quản trị CSDL:


• Quản lý dữ liệu tồn tại lâu dài.
• Truy xuất dữ liệu một cách hiệu quả.
• Hỗ trợ ít nhất một mô hình dữ liệu.
• Đảm bảo tính độc lập dữ liệu.
• Hỗ trợ các ngôn ngữ cấp cao nhất định cho phép người sử dụng định nghĩa cấu
trúc của dữ liệu, truy nhập và thao tác dữ liệu.
• Điều khiển truy nhập.
• Sao lưu và phục hồi dữ liệu.

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 1


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access

Chương 1: Tạo bảng dữ liệu đơn giản


1.1. Khởi động Access và tạo mới một CSDL
Access nằm trong bộ MS Office của Microsoft. Ta khởi động bằng cách chọn Start /
Programs / Microsoft Office / Microsoft Access 2003. Để thuận tiện cho các lần sử dụng
sau, ta cũng có thể tạo Shortcut cho Access và để nó trên màn hình nền Windows.
Đây là màn hình Access 2003:

Thanh tiêu đề
Thanh menu

Thanh công cụ

Blank database

Thanh trạng thái

Nhấn chọn Blank database, hộp thoại sau xuất hiện:

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 2


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access

Ta đặt tên CSDL là tck45.mdb và định vị cho nó được đặt tại thư mục mong muốn
D:\TailieuGiangday\CSDL\HeQTCSDLAccess (cái này tùy bạn!).
Các bạn lưu ý, phần mở rộng của Access là mdb (phiên bản 2007 về sau có khác đôi
chút).
Cửa sổ sau xuất hiện:

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 3


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access
Chúng ta tạm đóng CSDL trên lại.

1.2. Mở một CSDL đã có


Bây giờ chúng ta mở Access, chọn File\Open hoặc nhấn Ctrl+O hoặc nhấn vào nút có
biểu tượng Open trên thanh công cụ. Hộp thoại Open xuất hiện. Ta chọn tập tin mdb cần
mở, sau đó nhấn nút Open.

Quan sát, chúng ta thấy CSDL Access có các thành phần như: Tables, Queries, Forms,
Reports, Pages, Macros và Modules. Chúng ta sẽ lần lượt tìm hiểu về các thành phần này.

1.3. Tạo bảng sử dụng đồ thuật (Table Wizard)


Đồ thuật là một trình công cụ hướng dẫn bạn đi qua tất cả các bước cần thiết trong quy
trình tạo một thành phần chuẩn của Access như bảng, bộ hỏi, biểu mẫu, báo cáo, trang
truy cập dữ liệu. Nó là một cách tiếp cận hữu ích cho những người mới làm quen với
Access.
Làm theo các bước sau:
Bước 1: Trong cửa sổ tck45: Database, với tab Tables bên trái đang được kích hoạt, nhấn
vào phím New. Access sẽ mở ra hộp thoại New Table cho phép xác định cách tạo bảng.

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 4


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access

Có hai mục không được giới thiệu ở đây, đó là: Import Table (nhập khẩu một bảng đã
được tạo ra trong trình ứng dụng khác) và Link Table (tạo một bảng được kết nối với một
bảng khác trong tập tin khác).
Bước 2: Nhấn chọn mục Table Wizard, sau đó nhấn OK. Hộp thoại Table Wizard xuất
hiện:

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 5


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access

Bước 3: Chọn Sample Tables là Students, sau đó lần lượt chọn các mục trong danh sách
Sample Fields và chuyển nó vào Fields in my new table:

Nếu muốn đổi tên cột, ta chọn mục tương ứng rồi nhấn vào nút Rename Field...
Bước 4: Sau đó nhấn Next. Hộp thoại sau xuất hiện:

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 6


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access

Bước 5: Nếu muốn bạn có thể đổi tên bảng. Ở đây tôi để nguyên là Students.
Bước 6: Nhấn Next chuyển sang hộp thoại tiếp theo.

Bước 7: Nhấn Finish để hoàn tất quá trình tạo bảng sử dụng đồ thuật.

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 7


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access

Tới đây, chúng ta có thể nhập dữ liệu trực tiếp vào bảng nếu muốn. Tạm thời chúng ta
chưa nhập gì cả.
Chúng ta sẽ xem bảng Students trong chế độ Design:

Chọn bảng Students và nhấn nút Design, cửa sổ sau xuất hiện:

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 8


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access

Bước 8: Nhập dữ liệu vào bảng.

1.4. Các thao tác hiệu chỉnh hàng, cột và dữ liệu trong
bảng
• Sử dụng thanh trượt để dịch chuyển:

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 9


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access

• Di chuyển đến các khoản tin (record, dòng)

• Thêm khoản tin mới

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 10


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access

Nhấn vào đây để tạo


khoản tin mới

• Sao chép dữ liệu kề bên trên: nhấn CTRL + ' hoặc sử dụng kỹ thuật Copy-Paste
• Xóa khoản tin:

Nhấn vào đây để


xóa khoản tin

Nhấn Record
Selector để chọn
toàn bộ khoản tin

Nhấn Yes để xóa thực sự


Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 11
Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access

• Thay đổi ngoại hình của bảng: độ lớn cửa sổ, cột, hàng
• Gắn chặt một (hoặc nhiều) trường vào một vị trí nhất định: Chọn cột, kích chuột
phải, nhấn Freeze Columns hoặc chọn cột, chọn Format, Freeze Columns. Nếu
muốn bỏ tính chất này, ta chỉ việc chọn Unfreeze All Columns. Sau đó, nếu cần,
có thể dùng kỹ thuật kéo thả các cột về vị trí mong muốn.
• Che dấu và hiện lại cột: Format/Hide Columns và Format/Unhide Columns
• Sắp xếp các khoản tin: Chọn cột, nhấn Sort Ascending hoặc Sort Descending.
• Các chức năng trong Tools/ Options.
• Thay đổi skin cho bảng: Format/Datasheet
• Thay đổi font chữ: Format/Font
• In bảng: Print Preview và Print, File/Page Setup

1.5. Sử dụng trợ giúp trong Access


Nhấn F1 hoặc chọn trên menu Help

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 12


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access

Chương 2: Bảng và biểu mẫu


2.1. Các kiểu dữ liệu
Nhấn nút để chuyển đổi giữa chế độ thiết kế và xem bảng dữ liệu

Trong chế độ thiết kế:

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 13


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access

Các kiểu dữ liệu:


Kiểu dữ liệu Mô tả
Text Dạng dữ liệu phổ biến nhất. Có thể chứa chữ cái, chữ số và các kí tự như
&, %, =, ?. Có thể dài tới 255 kí tự.
Memo Tương tự như Text nhưng có thể chứa tới 65535 kí tự. Thường dùng để
cung cấp các chú giải. Trường Memo không thể là một trường khóa,
không thể lập chỉ mục.
Number Giá trị số. Có thể có những kích cỡ như sau:
Byte: số nguyên từ 0 đến 255
Integer: số nguyên từ -32768 đến 32767
Long Integer: số nguyên trong khoảng -2,147,483,648 đến
+2,147,483,647
Single: số có độ chính xác đơn trong khoảng -3.40283*1038 đến
-1.401298*10-45 và 1.401298*10-45 đến 3.40283*1038
Double: số có độ chính xác kép trong khoảng -1.7976931348623*10308
đến -4.94065645841247*10-324 và 4.94065645841247*10-
324
đến 1.7976931348623*10308
Replication ID: Số nhận dạng duy nhất toàn cục
Date/Time Ngày và giờ được lưu trữ theo một dạng thức cố định đặc biệt, giá trị
trong khoảng từ ngày 1.1.100 đến 31.12.9999. Có nhiều định dạng.
Currency Một dạng số, có thể có tới 15 chữ số bên trái và 4 chữ số nằm bên phải
dấu thập phân.
AutoNumber Giá trị số mà Access tự động điền cho từng khoản tin mới bỏ sung vào
bảng. Có thể là số tuần tự hoặc ngẫu nhiên, có độ dài là Long Integer
hoặc Replication ID. Có thể sử dụng làm khóa chính. Không thể cập
nhật.

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 14


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access
Yes/No Đúng/sai, có/không, bật/tắt.
OLE Object Có thể chứa đối tượng đồ họa hoặc các đối tượng khác (bảng tính, tập tin
âm thanh, video) được tạo bởi trình ứng dụng windows có hỗ trợ OLE.
Đối tượng có thể được nhúng vào trường hay được kết nối (link) với
trường.
Hyperlink Có thể là đường dẫn đến một tập tin trong ổ cứng hay trên máy chủ của
mạng hay một địa chỉ URL dẫn đến một đối tượng trên mạng. Access sẽ
chuyển đến đối tượng đó khi nhấn vào link.
Lookup Không phải một dạng dữ liệu. Đồ thuật được sử dụng để tạo một trường
Wizard cho phép tra cứu các giá trị trong một bảng hay chọn giá trị từ một danh
sách.

2.2. Sử dụng các thuộc tính trường


• Độ lớn của trường (Field Size): dùng cho văn bản và số.
o Đối với kiểu văn bản: đây chính là số kí tự tối đa có thể nhập vào. Nếu
nhập quá, Access sẽ xén phần còn lại.
o Đối với kiểu số: kích thước được xác định qua định dạng Format. Nếu
nhập vào ba số 0 thì sẽ ra lệnh cho Access tự điền chữ số 0 vào bên trái
khi không đủ 3 chữ số.
• Xác định mặt nạ nhập liệu (Input Mask): Kiểm soát quá trình hiển thị dữ liệu. Đây
là một mẫu kí tự xác định cách thể hiện dữ liệu trên màn hình và loại dữ liệu được
nhập vào. Danh sách một số kí tự giữ chỗ thường được sử dụng trong hộp văn bản
Input Mask:
Kí tự Access sẽ thực hiện
0 chữ số từ 0 đến 9, bắt buộc nhập, không cho phép dấu cộng + và trừ -
9 chữ số hay dấu cách, không bắt buộc nhập, không cho phép dấu cộng + và
trừ -
# chữ số hay dấu cách, không bắt buộc nhập, vị trí trống được chuyển thành
dấu cách, cho phép dấu cộng + và trừ -
L chữ cái từ A đến Z, bắt buộc nhập
? chữ cái từ A đến Z, không bắt buộc nhập
A chữ cái hay chữ số, bắt buộc nhập
a chữ cái hay chữ số, không bắt buộc nhập
& kí tự hoặc dấu cách, bắt buộc nhập
C kí tự hoặc dấu cách, không bắt buộc nhập
< chuyển tất cả các chữ cái đứng sau nó thành dạng chữ thường
> chuyển tất cả các chữ cái đứng sau nó thành dạng chữ hoa
\ bổ sung kí tự đứng liền sau nó vào mục dữ liệu
! căn phải cả mục dữ liệu

Chúng ta sử dụng các kí tự trên để sửa mặt nạ nhập liệu cho phù hợp với cách ghi số điện
thoại hiện thời ở Việt Nam:
Phần 3 chữ số đầu là dành cho các tổng đài di động, ví dụ (090) 1234 567 hoặc (091)
1234 567.

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 15


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access
Phần 7 chữ số sau của máy di động hoặc toàn bộ số của máy cố định được phân thành 2
nhóm, cách nhau bởi dấu cách, ví dụ: ( ) 821 4351 hoặc ( ) 896 6027
Ta làm như sau:
Trong chế độ thiết kế, nhấn chuột chọn dòng PhoneNumber. Tìm đến dòng Input Mask,
nhập vào như sau: !\(999")"000\ 0000

Quan sát dữ liệu trong bảng, ta thấy có thay đổi cách thể hiện:

• Bổ sung tựa đề (Caption): khi sử dụng thuộc tính Caption, bạn có thể dùng một
đoạn văn bản khác để thay thế cho tên trường khi hiển thị bảng. Ví dụ: sửa tựa đề
cho StudentsID thành "Mã sinh viên":

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 16


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access

Chuyển sang chế độ View để xem kết quả:

• Ấn định giá trị ngầm định: Thuộc tính Default Value cho phép bạn xác định một
giá trị trường mà Access sẽ tự động nhập vào bảng. Ví dụ, đa số sinh viên ở Hà
Nội, nên ta có thể ngầm định trường StateOrProvince là "Hà Nội"

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 17


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access

• Bắt buộc nhập liệu: Thuộc tính Required chuyển thành Yes.
• Thuộc tính tạo chỉ mục Indexed: giúp tìm kiếm và sắp xếp dựa trên trường này
nhanh hơn.
• Thuộc tính Validation Rule: quy tắc hợp lệ.
• Thuộc tính Validation Text: văn bản hợp lệ (gợi nhắc)
• Thuộc tính Unicode Compression: giảm lượng bộ nhớ cần thiết để lưu trữ cơ sở
dữ liệu.
2.3. Tạo bảng không sử dụng đồ thuật
Xóa bảng Students đi, không dùng đồ thuật, tạo lại bảng với các trường sau:
• StudentID: mã sinh viên, khóa chính.
• StudentName: tên sinh viên.
• StudentBirth: ngày tháng năm sinh của sinh viên.
• StudentAddress: địa chỉ nơi ở của sinh viên.
• StudentPhone: số điện thoại liên hệ, theo quy cách !\(999")"000\ 0000
• ClassID: mã lớp, là khóa ngoài.
Hãy tạo bảng Lecturers, Class, Subjects, Learn:
Bảng Lecturers gồm các trường sau:
• LecturerID: mã giảng viên, là khóa chính.
• LecturerName: tên giảng viên.
• LecturerPhone: điện thoại theo quy cách !\(999")"000\ 0000
• Faculty: khoa, gồm có: Công nghệ thông tin, điện tử viễn thông, hóa học, cơ khí,
kinh tế quản lý, ngoại ngữ, tại chức.
Bảng Class gồm có các trường sau:

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 18


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access
• ClassID: mã lớp, là khóa chính.
• ClassName: tên lớp.
• Monitor: trưởng lớp.
Bảng Subjects gồm có các trường sau:
• SubjectID: mã môn học, là khóa chính.
• SubjectName: tên môn học.
Bảng Learn gồm:
• LecturerID: mã giảng viên.
• ClassID: mã lớp.
• SubjectID: mã môn học.
• Time: thời gian biểu học.

Xem mối quan hệ giữa các bảng:

2.4. Sử dụng form (biểu mẫu) để nhập và xem dữ liệu


2.4.1. Tạo một form tự động

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 19


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access

Trong tab Tables, chọn bảng cần tạo form tự động, sau đó nhấn chọn Autoform. Kết quả,
ta sẽ được một form như sau:

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 20


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access
Lần lượt tạo các form theo cách trên.

2.4.2. Sử dụng đồ thuật biểu mẫu

Chọn tab Forms, chọn Create form by using Wizard, nhấn New. Đồ thuật xuất hiện:

Nhấn OK, hộp thoại tiếp theo xuất hiện:

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 21


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access

Chọn bảng Class và đưa tất cả các trường trong mục "Available Fields" sang mục
"Selected Fields"

Nhấn Next, hộp thoại sau xuất hiện:

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 22


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access

Lần lượt check vào các radio button để xem giao diện của form khi hình thành sẽ như thế
nào.
Nhấn Next, hộp thoại sau sẽ xuất hiện:

Lần lượt chọn các mục để xem skin của form.


Nhấn Next, hộp thoại cuối cùng để hoàn tất:

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 23


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access

Nhấn Finish để hoàn thành công việc tạo form sử dụng đồ thuật.
Form của chúng ta có hình thù như sau:

2.4.3. Hiệu chỉnh giao diện của các form tự động vừa tạo
Chuyển sang chế độ thiết kế, thêm nhãn và căn chỉnh lại các điều khiển trên form

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 24


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access

Một số chức năng trong Format:

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 25


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access

Trong chế độ thiết kế, ta có thể cho hiện các vùng Form Header/Footer, Page
Header/Footer bằng cách kích chuột phải trên form rồi chọn các mục tương ứng:

Form được chia thành 5 khu vực:

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 26


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access
• Khu vực Form Header (đầu biểu mẫu) có thể chứa các thông tin ví dụ như một
tiêu đề mà bạn muốn nó xuất hiện ở phần bên trên của biểu mẫu (hiện thời nó
đang được để trống).
• Khu vực thứ hai Detail chứa các hộp trống được gọi là Control (điều kiểm) cho
các trường mà bạn đã chọn cho biểu mẫu này. Các điều kiểm là nơi bạn có thể
nhập thông tin. Mỗi điều kiểm có thể đi kèm với một hộp màu xám được gọi là
một nhãn (Label) chứa tên hoặc tựa đề của trường.
• Khu thứ ba Form Footer, hoạt động tương tự như Form Header.
• Hai khu vực còn lại là Page Header và Page Footer, chúng có thể chứa các phần
tử mà bạn muốn xuất hiện trên mỗi trang, trong trường hợp một biểu mẫu chiếm
nhiều trang giấy. Ngoài ra, cửa sổ còn hiển thị các đường thước nằm ngang và
nằm dọc cũng như các ô lưới giúp bạn định vị các điều kiểm và nhãn trong biểu
mẫu.

Để chọn nhiều điều kiểm, ta giữ phín SHIFT và dùng chuột chọn điều kiểm. Nếu muốn
chọn tất cả các điều kiểm trên form, ta nhấn Ctrl + A hoặc chọn Edit/ Select All.

Để xem các thuộc tính của điều kiểm, ta chọn điều kiểm rồi nhấn chuột phải, chọn
Properties:

Ta có thể thay đổi font chữ, màu sắc, kích thước,...

Có thể đổi từ ComboBox sang List Box nếu số giá trị là nhỏ:

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 27


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access

2.5. Tạo biểu mẫu của nhiều bảng (Multi table Form)

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 28


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 29


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access
Chương 3: Bộ hỏi, báo biểu, trang truy cập dữ liệu và bảng công tắc

3.1. Sử dụng lệnh Find và các bộ lọc (Filter)


Bước 1: Mở CSDL và một bảng nào đó, ví dụ bảng Students.
Bước 2: Nhấn vào phím Find trên thanh công cụ.

Bước 3: Hộp thoại Find And Replace xuất hiện, tìm đến hộp văn bản Find What, nhập
vào một giá trị cần tìm

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 30


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access
Lưu ý: nếu chỉ so khớp một phần giá trị trong một trường thì chọn Math là "Any Part of
Field"
) Hướng dẫn sinh viên sử dụng Replace

Filter
Khi làm việc với một bảng lớn, thường ta sẽ tập trung vào một tập hợp con các khoản tin
(record, dòng, bộ) trong bảng. Đó là tập hợp chứa các khoản tin có một số thuộc tính
chung nào đó. Để lọc ra nhóm các khoản tin này, bạn có thể sử dụng các bộ lọc (Filter).

Apply Filter
hoặc Remove
Filter

Filter By Filter By
Selection Form

Làm theo các bước sau:


Bước 1: Chọn một giá trị trong một cột bằng cách kích đúp vào giá trị đó
Bước 2: Nhấn Filter By Selection, bạn sẽ được kết quả:

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 31


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access

3.2. Sử dụng bộ hỏi (Queries)


Một vài ví dụ về các bộ hỏi lựa chọn phổ biến:
Giáo vụ khoa muốn tìm ra danh sách những sinh viên có điểm thi lần 1 môn Hệ quản trị
cơ sở dữ liệu <5 để lập danh sách thi lại.
Trưởng phòng kinh doanh của một công ty muốn có danh sách của tất cả các nhà cung
cấp có bán tất cả các vật dụng cần thiết cho một công việc cụ thể.

3.2.1. Lựa chọn một số trường cụ thể


Trong tab Tables, chọn bảng, sau đó chọn Query như sau:

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 32


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access

Hoặc chọn tab Queries rồi nhấn chọn New


Hộp thoại sau sẽ xuất hiện:

Trong hộp thoại New Query, nhấn chọn Simple Query Wizard rồi nhấn OK, hộp thoại
Simple Query Wizard xuất hiện:

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 33


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access

1. Chọn bảng
nguồn dữ liệu

2. Chọn trường trong bảng rồi nhấn phím > chuyển


sang danh sách của bộ hỏi

Hộp thoại tiếp theo xuất hiện:

Nhấn chọn Detail để có bộ hỏi chi tiết, sau đó nhấn phím Next, hộp thoại thứ ba của
Simple Query Wizard xuất hiện, bao gồm ba mục:
• Yêu cầu bạn đặt tên cho bộ hỏi
• Báo rằng đồ thuật đã đủ thông tin để tạo bộ hỏi

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 34


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access
• Hỏi bạn muốn mở bộ hỏi để xem thông tin hay mở bộ hỏi để chỉnh thiết kế của bộ
hỏi.

Kết quả chúng ta được như sau:

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 35


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access

3.2.2. Chọn một số khoản tin cụ thể

Nếu muốn lựa chọn các trường của một số khoản tin cụ thể, ta làm như sau:
Bước 1: Trong cửa sổ CSDL, nhấn vào thanh Queries để nhìn danh sách các bộ hỏi, nhấn
đúp vào phím Create Query In Design View (tạo bộ hỏi trong chế độ thiết kế).

Kết quả: Access sẽ hiển thị hộp thoại Show Table:

Bước 2: Chọn bảng Students, nhấn vào nút Add để bổ sung bảng này vào danh sách các
bảng dữ liệu nền cho bộ hỏi. Sau đó, nhấn nút Close. Kết quả là, trên cửa sổ màn hình
xuất hiện một cửa sổ thiết kế bộ hỏi với thanh tựa đề cho biết đây thuộc loại bộ hỏi chọn
lọc (Select Query).

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 36


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access

Nửa bên trên, ta thấy có hộp Students liệt kê tất cả các trường trong bảng Students, dấu
hoa thị đại diện cho tất cả các trường. Phía bên dưới của cửa sổ là một bảng ô lưới, được
gọi là QBE (Query By Example) trợ giúp cho bạn thiết kế bộ hỏi.
Bước 3: Đưa các trường vào lưới.

) Test thử việc hiển thị các trường bằng cách check vào dòng Show, nhấn nút Run để
chạy thử.

Trong cột ClassID, dòng Criteria, nhập số 2 vào, chạy thử để xem kết quả

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 37


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access

Nhập chuỗi "Phạm Ngọc Sáng" vào dòng Criteria, cột StudentName:

Tiêu chuẩn Criteria không phân biệt xâu chữ hoa và chữ thường nên kết quả như nhau khi
ta viết "Phạm Ngọc Sáng" hay "PHạm NGọc SáNg". Khi bạn nhập dữ liệu xong, Access
tự bao giá trị bởi một cặp ngoặc kép.

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 38


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access

3.2.3. Kí tự đại diện "*"

3.2.4. Kí tự "?" đại diện cho duy nhất một kí tự.

Like "CNTT-K4?"

3.2.5. Sử dụng các toán tử toán học


Chương trình Access cho phép bạn sử dụng các toán tử toán học để nhập tiêu chuẩn lựa
chọn như dấu =, dấu <, >, <=, >=.

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 39


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access

>#10/10/1982#

3.2.6. Sử dụng các toán tử logic


a. Toán tử And

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 40


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access
b. Toán tử Or
Nếu bạn nhập nhiều cột, Access hiểu rằng bạn muốn lọc ra các khoản tin thỏa mãn tất cả
các tiêu chuẩn đó. Trong trường hợp bạn muốn đưa ra điểm HệQTCSDL là 8 hoặc 10 thì
sao?

8 Or 10

Một trường hợp khác: Đưa ra StudentID mà điểm HệQTCSDL là 10 hoặc điểm Hóa học
là 8 (phép hoặc trên 2 thuộc tính):

10
8

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 41


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access
c. Toán tử Not và toán tử Null
Bạn sử dụng toán tử Not để xác định các khoản tin không thỏa mãn một tiêu chuẩn nào
đó, bạn sử dụng toán tử Null để xác định tất cả các khoản tin chưa được nhập giá trị (còn
trống) cho một trường xác định.

Thử nhập vào là Not


10 và Not<10

3.2.7. Sắp xếp với bộ hỏi


Quan sát lại bảng Mark, chúng ta thấy rằng, các bản ghi được sắp xếp theo StudentID,
còn điểm môn Hệ QTCSDL và Hóa học thì không theo một trật tự nào cả. Bây giờ chúng
ta sẽ sắp xếp theo các cột này.

Ascending

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 42


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access

3.3. Sử dụng báo biểu (Reports)


Tạo báo biểu cũng tương tự như tạo biểu mẫu (form).

3.3.1. Tạo AutoReports


Chúng ta bắt đầu tạo một báo biểu với bảng Lecturers.
Trong tab Table, chọn bảng Lecturers, rồi nhấn chọn AutoReports

Kết quả như sau:

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 43


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access

Chuyển sang chế độ Design để xem:

3.3.2. Tạo báo biểu với đồ thuật báo biểu

Nhấn Design, hộp thoại sau xuất hiện:

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 44


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access

Nhấn Next.

Chọn Faculty, nhấn phím > để gom nhóm theo thuộc tính này. Nhấn Next.

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 45


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access

Lựa chọn rồi nhấn Next.

Lần lượt chọn từng Layout để xem.

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 46


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access

Nhấn Finish, chuyền sang chế độ view để xem kết quả (hoặc chọn Preview the Report rồi
nhấn Finish).

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 47


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access
Khi nhấn chọn New để tạo báo biểu mới, ta thấy có các lựa chọn sau:

Loại báo biểu tự động Columnar tạo ra các nhãn và các điều kiểm được xếp hàng dọc từ
trên xuống dưới.
Loại báo biểu tự động Tabular tạo ra một báo biểu tự động với các nhãn và điều kiểm sắp
xếp theo hàng ngang.

3.4. Hiệu chỉnh báo biểu


Tương tự như hiệu chỉnh form

3.5. Tạo Mailing Labels


Các bước như sau:
Chọn tab Reports, nhấn New:

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 48


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access

Hộp thoại sau xuất hiện:

Chọn Label Wizard, chọn nguồn dữ liệu là bảng Students. Nhấn OK.
Label Wizard hiển thị hộp thoại đầu tiên của nó, hỏi xem bạn muốn tạo nhãn chuẩn hay
tùy biến, kích cỡ, đơn vị đo lường cùng các thông tin tương tự:

3. Chọn
kiểu nhãn

1. Chọn
đơn vị đo
lường

2. Chọn
loại nhãn

Nhấn Next, hộp thoại thứ hai xuất hiện:

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 49


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access

Sau khi lựa chọn các giá trị cho phù hợp, nhấn Next. Hộp thoại thứ ba xuất hiện:

Nhấn chọn các mục tương ứng, đưa sang Prototype label. Chú ý, nếu muốn xuống dòng
thì trước khi đưa sang, ta nhấn Enter. Nhấn Next, hộp thoại thứ tư xuất hiện, cho bạn biết
có thể sắp xếp các nhãn sử dụng:

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 50


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access

Sau khi lựa chọn, nhấn Next. Hộp thoại tiếp theo xuất hiện:

Nhấn Finish để hoàn tất. Kết quả:

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 51


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Access

3.6. Sử dụng trang truy cập dữ liệu


Giới thiệu cho sinh viên CSDL mẫu Northwind trong Access.

Nguyễn Hồng Phương – Email: phuongnh@it-hut.edu.vn 52


Khoa Công nghệ thông tin, ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

Chương 4
Lập trình trên Access
4.1 Lập trình đơn giản bằng Macro
Macro: tập các thao tác thường được dùng trong các xử lý dữ liệu, được chuyển thành các
hành động và ta có thể sử dụng nó thay vì phải viết một đoạn chương trình xử lý. Macro
thường được gắn với các sự kiện của đối tượng cơ sở dữ liệu như Form, Report. Macro
cũng được đưa vào để tạo Menu cho chương trình.
4.1.1. Tạo Macro mới
Tại cửa sổ Database, chọn Macro, sau đó chọn New. Hộp thoại tạo mới Macro xuất hiện:

Thực hiện Macro bằng một trong ba cách:


• Khi khởi động cơ sở dữ liệu.
• Khi kích hoạt nút lệnh hay chọn một mục trong Menu Pull Down.
• Khi kích hoạt một sự kiện nào đó.
Khi ra lệnh thực hiện Macro các hành động được thực hiện từ trên xuống dưới.
4.1.2. Các hành động trong Macro
Có khoảng 50 hành động Macro. Một số những hành động thông dụng:
Addmenu: Thêm một cột mới cho Menu. Các tham số của hành động này:
9 Tên mục chọn trên màn hình (Menu Name)
9 Tên macro ứng với cột (Menu Macro Name)

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 1


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

9 Thông báo trên dòng trạng thái (Status Bar Text)


Close: Đóng cửa sổ Form, Report, Table… Các tham số của hành động này:
9 Kiểu đối tượng (Object Type)
9 Tên đối tượng (Object Name)
9 Cách ghi (Save)
ApplyFilter: Sử dụng bộ lọc trên Form. Các tham số:
9 Tên truy vấn lọc (Filter Name)
9 Điều kiện lọc (Where Condition)
GotoRecord: chuyển con trỏ bản ghi đến bản ghi trước, sau, đầu, cuối hoặc bản ghi có số
hiệu nào đó. Các tham số:
9 Kiểu đối tượng (Object Type)
9 Tên đối tượng (Object Name)
9 Bản ghi (Record)
9 Offset: số hay biểu thức chỉ bản ghi muốn chuyển tới.
Maximize: phóng to cực đại cửa sổ hiện hành.
Minimize: thu nhỏ cực tiểu cửa sổ hiện hành.
MoveSize: thay đổi kích thước cửa sổ hiện hành.
MsgBox: hiện thông báo ra màn hình. Các tham số:
9 Message: nội dung thông báo đưa ra.
9 Beep: sẽ phát ra tiếng kêu nếu là yes, ngược lại thì không.
9 Type: kiểu icon hiển thị, gồm: None, Critical, Warning?. Warning! và
Information.
9 Title: tiêu đề của cửa sổ thông báo.
OpenForm: mở form, gồm có 6 tham số:
9 Form Name: tên form cần mở, chọn trong danh sách.
9 View: mở form ở một trong bốn chế độ: Design, Form (ngầm định), Datasheet,
Print.
9 Filter Name: áp dụng bộ lọc, có thể là query hoặc một bộ lọc được lưu trữ như là
một query. Sử dụng bộ lọc này để giới hạn hoặc sắp xếp các bản ghi cho form.
9 Where Condition: Điều kiện lọc. Nhập vào một mệnh đề WHERE hoặc một biểu
thức (expression) chọn ra các bản ghi cho form.
9 Data Mode: phương thức hiện dữ liệu, có thể thêm (Add), sửa (Edit) hay chỉ đọc
(Read Only).
9 Window Mode: kích thước của cửa sổ, gồm: Normal (ngầm định), Hidden, Icon,
Dialog.
OpenReport: mở báo cáo. Các tham số giống như OpenForm, gồm:
Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 2
Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

9 Report Name
9 View
9 Filter Name
9 Where Condition
SetValue: đặt giá trị cho một trường hoặc một control nào đó.
RepaintObject: cập nhật lại control khi control khác thay đổi.
Requery: thực hiện lại truy vấn nguồn của control để cập nhật lại giá trị. Tham số:
9 Control Name
RunApp: thực hiện một ứng dụng trong Window. Tham số:
9 Command Line: đường dẫn tới tệp .exe
RunCode: thực hiện chương trình viết bằng VBA
RunCommand: thực hiện một mục chọn trên menu chính của Access.
RunMacro: thực hiện một Macro.
RunSQL: thực hiện lệnh SQL.
SetWarnings: bật / tắt chế độ hiển thị thông báo của hệ thống ra màn hình
ShowToolbar: bật / tắt các thanh công cụ chuẩn của Access.
ShowAllRecords: hủy bỏ mọi thao tác lọc dữ liệu trên form, bảng hay kết quả truy vấn.
TransferDatabase: chuyển dữ liệu giữa tệp CSDL hiện hành và tệp CSDL khác được tạo
bởi Excel, Access hay hệ quản trị CSDL khác thông qua ODBC (tương tự chức năng xuất
nhập khẩu trên Menu chính).
TransferText: chuyển dữ liệu giữa bảng và tệp văn bản.
4.1.3 Ứng dụng của Macro:
™ Xử lý các sự kiện
™ Tạo Menu:
Tạo một macro tương ứng với Menu chính. Có thể tạo các macro khác. Macro tương
ứng với Menu chính sẽ gọi đến các macro khác này.
Ví dụ về tạo Menu: Xây dựng chương trình quản lí cán bộ gồm các chức năng sau:
Nhập số liệu Khai thác Kết thúc chương trình
DS cán bộ Tìm kiếm Về Access
DS tỉnh In DSCB Về Window
DS chức vụ
trong đó, "Tìm kiếm" là menu con gồm bốn chức năng:
Theo chuyên môn
Theo ngoại ngữ
Theo năm sinh
Tìm kiếm tổng hợp

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 3


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

Chức năng "Tìm kiếm tổng hợp" sẽ tìm kiếm theo cả ba yếu tố là chuyên môn, ngoại
ngữ và năm sinh.
Trước hết, chúng ta tạo một số bảng chứa dữ liệu để dùng cho việc tạo ví dụ về
Menu.
9 Các bảng cần xây dựng như sau:
ƒ Bảng thứ nhất DSCB (Danh sách cán bộ) gồm các trường và kiểu như
hình minh họa dưới đây:

ƒ Bảng thứ hai là DSTINH (danh sách tỉnh) gồm hai trường:

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 4


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

ƒ Bảng thứ ba DSCV (danh sách chức vụ) gồm các trường:

9 Các truy vấn tham số như sau:


ƒ Truy vấn NĂM SINH dùng để tìm kiếm theo năm sinh:

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 5


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

ƒ Truy vấn NGOẠI NGỮ: dùng để tìm kiếm theo ngoại ngữ

ƒ Truy vấn CHUYÊN MÔN: dùng để tìm kiếm theo chuyên môn

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 6


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

9 Báo biểu:
Báo biểu In DSCB lấy bảng DSCB làm nền, dùng để thực hiện chức năng in danh sách
cán bộ. Báo biểu được thiết kế như sau:

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 7


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

9 Các mẫu biểu:


ƒ Form [MB DSCB] buộc vào bảng DSCB, được dùng như một SubForm của
Form TKCB (sẽ xây dựng ngay sau đây). Form [MB DSCB] dùng để thể hiện
các cán bộ thỏa mãn các điều kiện về năm sinh, ngoại ngữ và chuyên môn.
Form được thiết kế như sau:

ƒ Form TKCB (Tìm kiếm cán bộ) kiểu Unbound (không buộc với một nguồn dữ
liệu nào) dùng như form chính, gồm bốn điều khiển: ba điều khiển TextBox được
đặt tên là NS, NN, CM và một điều khiển SubForm có dạng như sau:

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 8


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

Đặt lại hai thuộc tính của SubForm [MB DSCB] như sau:
• Link Child Fields: NAM SINH, NGOAI NGU, CHUYEN MON.
• Link Master Fields: NS, NN, CM.
ƒ Form CTQLCB (chương trình quản lí cán bộ) dùng để bắt đầu thực hiện chương
trình. Chúng ta sẽ tạo Macro [MENU CHINH], sau đó đưa vào thuộc tính Menu
Bar của Form này., khi thực hiện mẫu biểu, ta sẽ nhận được hệ menu của chương
trình. Form CTQLCB được thiết kế như sau:

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 9


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

9 Các Macro dùng để xây dựng hệ Menu:


ƒ Macro [MENU CHINH] gồm các hành động:
Action Menu Name Menu Macro Name
AddMenu Nhập số liệu SO LIEU
AddMenu Khai thác KHAI THAC
AddMenu Kết thúc chương trình KET THUC
Ta thiết kế Macro như sau:

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 10


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

ƒ Macro [SO LIEU] gồm các hành động sau:


Macro Name Action Table Name
Ds Cán bộ OpenTable DSCB
Ds Tỉnh OpenTable DS TINH
Ds Chức vụ OpenTable DSCV
Macro được thiết kế như sau:

ƒ Macro [KHAI THAC] gồm các hành động sau:


Macro Name Action
Tìm kiếm AddMenu
In DSCB OpenReport
Các tham số của hành động AddMenu như sau:

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 11


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

Các tham số của hành động OpenReport:

ƒ Macro [TIM KIEM] gồm các hành động sau:


Macro Name Action Query/Form Name
Theo chuyên môn OpenQuery CHUYEN MON
Theo ngoại ngữ OpenQuery NGOAI NGU
Theo năm sinh OpenQuery NAM SINH
Tìm kiếm tổng hợp OpenForm TKCB
Macro được thiết kế như sau:

ƒ Macro [KET THUC] gồm các hành động sau:

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 12


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

Chương trình hoạt động như sau:


Khi form CTQLCB hiện lên thì hệ menu cũng hiện theo.

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 13


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

4.2 Sử dụng bảng công tắc (Switchboard)


Bảng công tắc cho phép nhanh chóng truy cập những thành phần được sử dụng thường
xuyên trong CSDL mà không cần phải hiểu những thành phần đó là gì và chúng liên quan
với nhau ra sao.
4.2.1 Tạo một bảng công tắc đơn giản
Trong Database Window, từ Menu chính nhấn vào Tools / Database Utilities /
Switchboard Manager
Chọn Yes khi Access báo không tìm thấy bảng công tắc nào và hỏi xem có muốn tạo mới
không ?

Nhấn chọn Edit để hiệu chỉnh bảng công tắc

Nhấn vào phím New để bổ sung mục công tắc mới

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 14


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

Cứ lần lượt làm như vậy với các chức năng khác.
Kết quả ta có bảng công tắc như sau:

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 15


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

4.2.2 Hiệu chỉnh một bảng công tắc


Ta có thể thay đổi định dạng của bảng công tắc bằng nhiều cách khác nhau:
™ Trong chế độ thiết kế, ta kích chuột phải, chọn Fill/Back Color để thay đổi màu
nền.
™ Để chèn hình ảnh vào: Từ Menu chính, chọn Insert/ Picture...

4.3 Ngôn ngữ lập trình VBA(Visual Basic for Application)


4.3.1 Đặc điểm và vai trò của chương trình
Các chương trình Access VBA được tổ chức và hoạt động trong môi trường Access nhằm
xây dựng các ứng dụng Access phức tạp hơn, hoàn chỉnh hơn sau khi đã sử dụng các
công cụ của Access.
Quá trình lập trình được thực hiện trên nền của một chương trình đã được tạo bằng các
công cụ của Access (Table, Form, Query, Report, Macro).
4.3.2. Tổ chức chương trình
Các đoạn mã (code) được viết trong các module.
Có hai loại module: module của Form/Report và module chung.
Module gồm các thủ tục và hàm .
Thủ tục trong module của Form/Report gồm có hai loại: thủ tục xử lý sự kiện và thủ tục
thông thường.
Các thủ tục thông thường và các hàm của các module được sử dụng thông qua lời gọi.
Thủ tục xử lý sự kiện chỉ thực thi khi sự kiện đó xảy ra.
Phương pháp lập trình hướng sự kiện: Lập các thủ tục tương ứng với từng sự kiện.
Trong Access, ta có thể xử lý sự kiện trên các đối tượng sau: Form, Report, Control của
form.
4.3.3 Phân loại sự kiện
Có ba loại sự kiện: sự kiện trên Form, sự kiện trên Report và sự kiện trên control của
Form/Report.
Một số ví dụ về sự kiện:
™ Các sự kiện trên Form
Open: Xảy ra khi form được mở, các điều khiển chưa được tải lên form. Có thể hủy
bỏ không mở nữa bằng cách đặt giá trị cho tham số Cancel. Tuy chưa tải các điều
khiển lên form nhưng form được coi là đang mở, do đó có thể sửa thiết kế.
Load: Xảy ra khi form đã mở, điều khiển đã tải lên form. Thường xử lý khi muốn
kiểm tra mật khẩu truy nhập, ẩn hiện một số điều khiển.

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 16


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

Timer: Sự kiện xảy ra một cách định kỳ sau một khoảng thời gian xác định bởi thuộc
tính Time Interval.
™ Các sự kiện trên Report
Open: Xảy ra mở báo cáo, tương tự sự kiện open của form. Thích hợp để thay đổi
một số điểm trong thiết kế báo cáo, chẳng hạn tiêu đề, nguồn dữ liệu.
Close: Xảy ra khi đóng báo cáo
No Data: nguồn dữ liệu không có bản ghi nào. Có thể không in hoặc mở báo cáo đó
bằng cách tác động lên tham số cancel.
™ Các sự kiện trên điều khiển (control)
Change: Có ở những điều khiển mà giá trị có thể thay đổi như hộp văn bản... Sự kiện
này xảy ra khi giá trị của điều khiển bị thay đổi.
AfterUpdate: Xảy ra sau sự kiện Change, khi người dùng chấp nhận sự thay đổi bằng
cách nhấn enter hoặc làm mất con trỏ.
GotFocus, LostFocus: Xảy ra khi điều khiển có hoặc mất con trỏ. Sự kiện này cũng
xảy ra trên form chứa điều khiển.
4.3.4. Cấu trúc của module
™ Module chuẩn (còn gọi là module chung)
9 Các tùy chọn:
ƒ Option Base 0/1: Xác định cận dưới ngầm định của mảng là 0 hay
1.
ƒ Option Explicit: Không cho phép khai báo ngầm định các biến.
ƒ Option Compare Text/Binary: Cách so sánh xâu kí tự.
9 Khai báo các hằng, biến, mảng cấp chương trình: dùng từ khóa
Public/Global.
9 Khai báo các hằng, biến, mảng cấp module: dùng từ khóa Dim/Private.
9 Các thủ tục/hàm phạm vi sử dụng cấp chương trình.
9 Các thủ tục/hàm phạm vi sử dụng cấp module: dùng từ khóa Private.
Để tạo module: Chọn tab Modules / New. Cửa sổ soạn thảo mã chương trình sẽ hiện ra
như sau:

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 17


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

™ Module lớp (module của Form/Report)


9 Các tùy chọn:
ƒ Option Base 0/1: Xác định cận dưới ngầm định của mảng là 0 hay
1.
ƒ Option Explicit: Không cho phép khai báo ngầm định các biến.
ƒ Option Compare Text/Binary: Cách so sánh xâu kí tự.
9 Khai báo các hằng, biến, mảng cấp module: dùng từ khóa Dim/Private.
9 Các thủ tục xử lý sự kiện
9 Các thủ tục/hàm thông thường
4.3.5 Cấu trúc của thủ tục và hàm
™ Cấu trúc của một thủ tục thường
[Static][Public][Private] Sub<Tên thủ tục>(<Danh sách các tham số và kiểu>)
[Các câu lệnh]
[Exit Sub]
[Các câu lệnh]
End Sub

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 18


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

™ Cấu trúc của một hàm


[Static][Public][Private] Function<Tên hàm>(<Danh sách các tham số>) As Kiểu
[Các câu lệnh]
[Exit Function]
[Các câu lệnh]
End Function
™ Cấu trúc một thủ tục xử lí sự kiện
9 Sự kiện trên Form
Private Sub Form_<Tên sự kiện>(<Danh sách các tham số và kiểu>)
[Các câu lệnh]
End Sub
9 Sự kiện trên Report
Private Sub Report_<Tên sự kiện>(<Danh sách các tham số và kiểu>)
[Các câu lệnh]
End Sub
9 Sự kiện trên control
Private Sub <Tên điều khiển>_<Tên sự kiện>(<Danh sách các tham số và
kiểu>)
[Các câu lệnh]
End Sub
4.3.6 Các quy định khi viết chương trình VBA
™ Mỗi lệnh thường viết trên một dòng. Nếu muốn xuống dòng ta dùng dấu gạch
dưới “_”
™ Mỗi dòng được phép viết nhiều lệnh, khi đó các lệnh phân cách nhau bằng dấu “:”
™ Không phân biệt chữ hoa hay chữ thường.
™ Cách viết chú thích:
9 Chú thích trên toàn bộ dòng: mở đầu dòng bằng dấu nháy đơn (có thể
dùng từ Rem thay cho dấu nháy đơn như trong các phiên bản trước).
9 Chú thích trên phần còn lại của dòng: phần chú thích bắt đầu bằng dấu
nháy đơn.
4.3.7 Dịch và chạy chương trình
™ Dịch chương trình:
Khi kết thúc mỗi dòng lệnh, Access sẽ tự động kiểm tra cú pháp của dòng lệnh đó. Để
dịch toàn bộ chương trình, ta chọn Debug từ Menu chính ->chọn Compile
™ Chạy chương trình:

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 19


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

9 Thủ tục xử lý sự kiện kích hoạt sự kiện


9 Thủ tục và hàm khác có thể chạy thử từ của sổ Immediate Window (mở
cửa sổ này từ Menu View hoặc nhấn tổ hợp phím Ctrl + G). Gõ vào như
sau:
<Tên thủ tục><danh sách các tham số thực sự>
?<Tên hàm>(<danh sách các tham số thực sự>)
4.3.8 Cách gọi chương trình con trong VBA
™ Gọi thủ tục
<Tên thủ tục><Danh sách tham số thực sự>
Call <Tên thủ tục>(<Danh sách tham số thực sự>)
Các tham số thực sự có thể không đặt đúng trình tự mà tham số hình thức tương ứng
xuất hiện trong chương trình con. Khi đó, ta viết danh sách tham số thực sự dưới
dạng: <Tên tham số hình thức>:=<tham số thực sự>[,<Tên tham số hình
thức>:=<tham số thực sự>…]
™ Gọi hàm
Lời gọi hàm xuất hiện trong biểu thức với quy cách như sau:
<Tên hàm>(<Danh sách các tham số thực sự>)
Khi ta không quan tâm tới giá trị mà hàm trả lại, có thể gọi hàm như thủ tục:
<Tên hàm><Danh sách các tham số thực sự>

4.4 Các kiểu dữ liệu, hằng, biến, mảng dùng trong


chương trình
4.4.1 Các kiểu dữ liệu
™ Số nguyên: Integer (%), Long (&), Byte
™ Số thực: Single (!), Double (#)
™ Logic: Boolean
™ Tiền tệ: Currency (@)
™ Xâu kí tự: String ($), String*n
™ Ngày/giờ: Date
™ Variant: Biến thuộc kiểu dữ liệu này có thể nhận giá trị là số, xâu kí tự, ngày/giờ
hoặc giá trị Null.
4.4.2 Quy tắc đặt tên biến
™ Bao gồm các chữ cái, chữ số và dấu gạch dưới
™ Kí tự đầu phải là chữ cái
™ Không được trùng với các từ dành riêng của Access

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 20


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

™ Không dùng kí hiệu .!@&%#$


™ Tối đa 255 kí tự
4.4.3 Khai báo biến
™ Nếu đoạn mã trên vùng đầu của module, ta sử dụng tùy chọn Option Explicit thì
các biến phải được khai báo tường minh, nghĩa là biến có kiểu xác định. Ngược
lại, nếu không có tùy chọn trên, các biến không khai báo sẽ ngầm định có kiểu là
Variant.
™ Khai báo biến bằng lệnh Dim:
Dạng lệnh như sau:
Dim <tên biến>[As<kiểu>][,<tên biến>[As<kiểu>]..]
Ví dụ: Dim a As Integer, s As string
9 Biến tĩnh: ta thay từ khóa Dim bằng từ khóa Static.
9 Biến toàn cục: ta thay từ khóa Dim bằng từ khóa Public.
9 Biến địa phương: ta thay từ khóa Dim bằng từ khóa Private.
4.4.4 Mảng
™ Cách khai báo
9 Trong hàm/thủ tục
Dim/ReDim/Static <Tên_mảng>(Chỉ số 1, chỉ số 2,..., chỉ số n) [As <Kiểu>]
9 Trong phần khai báo của đơn thể Form/Report
Dim/Private <Tên_mảng>(Chỉ số 1, chỉ số 2,..., chỉ số n) [As <Kiểu>]
9 Trong phần khai báo của đơn thể dùng chung
Dim/Private/Public <Tên_mảng>(Chỉ số 1, chỉ số 2,..., chỉ số n) [As <Kiểu>]
™ Hai cách xác định miền giá trị của chỉ số
Cách 1: Dùng câu lệnh Option base 0/1 viết trong phần khai báo. Theo cách này, ta
quy định chỉ số cận dưới là 0 hoặc 1. Ví dụ:
Option base 0
Dim a(5) ‘ Chỉ số từ 0 đến 5
Option base 1
Dim b(6) As Integer‘ Chỉ số từ 1 đến 6
Cách 2: Dùng cách viết Cận_dưới to Cận_trên Ví dụ:
Option base 1
Dim a(4,-2 to 5,6)
sẽ khai báo một mảng 3 chiều kiểu Variant, trong đó:
9 Chỉ số thứ nhất chạy từ 1 đến 4
9 Chỉ số thứ hai chạy từ -2 đến 5

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 21


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

9 Chỉ số thứ ba chạy từ 1 đến 6


Chú ý: Các cận đều phải là hằng số nguyên và có thể nhận giá trị âm. Miền giá trị của
chỉ số mảng nằm trong khoảng –32768 đến 32767.
™ Phạm vi sử dụng của mảng
9 Cấp thủ tục:Khai báo trong thủ tục
9 Cấp đơn thể: Khai báo trong phần khai báo của đơn thể, dùng từ khóa Private
hoặc Dim.
9 Cấp chương trình: Khai báo trong phần khai báo của đơn thể sử dụng chung,
dùng từ khóa Public.
™ Mảng động
Ta khai báo như sau:
Dim/Private/Public <Tên_mảng> [As <Kiểu>]
Khi nào dùng mảng động, ta dùng ReDim để xác định chính xác chiều và kích thước
mỗi chiều. Kích thước mỗi chiều có thể cho bởi các biến hoặc biểu thức. Ví dụ:
Redim a(1 to n,m)
™ Đối là mảng:
Đối mảng được khai báo theo cách mảng động, ví dụ:
Sub Nhap(a()as Double, n as Integer)
Function max(a()as Double, n as Integer) As Double
Trong lời gọi: dùng tên mảng, ví dụ:
Dim a(10) as Double, n as Integer, gt as Double
Nhap a,n ‘Gọi thủ tục
gt = max(a,n) ‘ Gọi hàm
4.4.5 Kiểu tự định nghĩa (tự tạo)
™ Định nghĩa kiểu
Tương tự kiểu bản ghi của Pascal hay Struct của C, để định nghĩa một kiểu, ta sử
dụng cấu trúc sau:
[PUBLIC/PRIVATE] TYPE Tên_Kiểu
Tên_thành_phần As Kiểu
Tên_thành_phần As Kiểu
.......
Tên_thành_phần As Kiểu
END TYPE
Chú ý:
9 Không cho phép khai báo các thành phần kiểu đối tượng.

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 22


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

9 Thành phần của kiểu tự định nghĩa có thể là mảng.


9 Có thể khai báo các mảng kiểu tự định nghĩa.
9 Mệnh để TYPE chỉ được viết trong phần “Decleration Section” của đơn thể,
do đó ta có thể dùng nó để khai báo các biến mảng trong toàn đơn thể.
™ Phạm vi sử dụng
Nếu dùng PUBLIC thì phạm vi sử dụng của kiểu tự định nghĩa là trong toàn chương
trình.
Nếu dùng PRIVATE thì phạm vi sử dụng của kiểu tự định nghĩa là trong toàn đơn
thể chứa định nghĩa kiểu tự tạo.
Mặc định là PUBLIC
Trong đơn thể của Form/Report không cho phép định nghĩa kiểu tự tạo.
™ Ví dụ:
TYPE Point
x AS Double
y AS Double
END TYPE
TYPE Polygon
n AS Integer
p(1 to 100) AS Point
END TYPE

4.5 Các phép toán


4.5.1 Số học
Lũy thừa (^)
Nhân (*), chia (/), chia lấy phần nguyên (\), chia lấy phần dư (mod)
Cộng (+), trừ (-)
4.5.2 So sánh
Bằng (=), khác (<>), nhỏ hơn (<), lớn hơn (>), nhỏ hơn hoặc bằng (<=), lớn hơn hoặc
bằng (>=).
4.5.3 Ghép xâu
Phép + chỉ dùng ghép xâu kí tự.
Phép & dùng ghép các kiểu dữ liệu khác nhau.
Ví dụ:
“Ha” + “ ” + “Noi” cho kết quả là chuỗi “Ha Noi”
“1996” & “4” cho kết quả là chuỗi “19964”

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 23


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

“A” & 2 cho kết quả là chuỗi “A2”


5 & 6 cho kết quả là chuỗi “56”
“A” + 4 sẽ sinh ra lỗi
4.5.4 Logic
Not, And, Or, Xor, Imp (Implication), Eqv (Equivalance).
Các phép toán trên có thể thực hiện trên các giá trị logic (True và False) hoặc trên các giá
trị nguyên (sẽ thực hiện trên từng bit) theo quy tắc trong bảng sau:
Thực hiện trên các giá trị logic (-1 là true, 0 là false)

x y x And y x Or y x Xor y x Eqv y x Imp y


0 0 0 0 0 -1 -1
0 -1 0 -1 -1 0 -1
-1 0 0 -1 -1 0 0
-1 -1 -1 -1 0 -1 -1

Thực hiện trên các giá trị nguyên (theo từng bit)

x y x And y x Or y x Xor y x Eqv y x Imp y


0 0 0 0 0 1 1
0 1 0 1 1 0 1
1 0 0 1 1 0 0
1 1 1 1 0 1 1

4.6 Các hàm thường dùng


4.6.1 Hàm toán học
Fix(x) cho giá trị nguyên là phần nguyên của x. Ví dụ: Fix(3.5) = 3; Fix(-6.7) = -6
Int(x) cho giá trị nguyên lớn nhất không vượt quá x. Ví dụ: Int(3.5) = 3; Int(-6.7) = -7
Abs(x) cho giá trị tuyệt đối của x
Rnd(n) cho số ngẫu nhiên từ 0 đến 1
Exp(x) cho giá trị ex
Log(x) cho giá trị logarit cơ số e của x
Sqr(x) tính căn bậc hai của x
Atn(x) tính arctan của x
Tan(x) tính tang của x
Sin(x) tính sin của x
Cos(x) tính cosin của x
4.6.2 Hàm xâu kí tự
Space(n): xâu gồm n dấu cách.

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 24


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

Left[$](s,n): xâu gồm n kí tự trái nhất của xâu s.


Right[$](s,n): xâu gồm n kí tự phải nhất của xâu s.
Mid(s,i,n): xâu gồm n kí tự của s tính từ kí tự i.
Len(s): độ dài xâu s.
Instr(n,s,t,[c]): kiểm tra xem xâu t có là xâu con của xâu s tính từ kí tự thứ n, nếu có trả
về vị trí đầu tiên gặp xâu t, nếu không thì trả về trị 0.
Lcase(s): chuyển các chữ cái trong xâu s thành chữ thường.
Ucase(s): chuyển các chữ cái trong xâu s thành chữ hoa.
LTrim(s): bỏ khoảng trống bên trái xâu s.
RTrim(s): bỏ khoảng trống bên phải xâu s.
Trim(s): bỏ khoảng trống bên trái và bên phải xâu s.
Str(numeric): đổi số thành chuỗi.
Format(numeric, chuỗi định dạng): đổi số thành chuỗi theo định dạng. Chuỗi định dạng
được dùng để quy định số chữ số thập phân như sau: “0.00” -> 2 chữ số thập phân;
“0.000” -> 3 chữ số thập phân.
4.6.3 Hàm ngày giờ
Date(): cho kết quả kiểu Variant chỉ ngày hệ thống.
Date$(): cho kết quả kiểu chuỗi chỉ ngày hệ thống.
Time(): cho kết quả kiểu Variant chỉ giờ hệ thống.
Time$(): cho kết quả kiểu chuỗi chỉ giờ hệ thống.
Now(): ngày giờ hiện hành.
Day(d): ngày của d.
Month(d): tháng của d.
Year(d): năm của d.
Weekday(d): thứ của ngày d.
4.6.4 Hàm cho kiểu dữ liệu Variant
IsDate(x): trả về giá trị True nếu x có quy cách ngày, ngược lại trả về False.
IsNumeric(x): trả về giá trị True nếu x có quy cách số, ngược lại là False.
IsNull(x): trả về giá trị True nếu x là null.
4.6.5 Các hàm liên quan nhiều kiểu dữ liệu
™ IIf(<Điều kiện>,<Biểu thức 1 >,<Biểu thức 2>) Nhận giá trị của biểu thức 1 nếu
điều kiện đúng, nhận giá trị của biểu thức 2 nếu điều kiện sai.
™ Choose(<Chỉ số>,<Biểu thức 1>,…,<Biểu thức n>) Chỉ số chỉ nhận giá trị từ 1
đến n. Hàm trả về giá trị của biểu thức i nếu chỉ số bằng i.

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 25


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

™ Format(<Biểu thức>,<Khuôn dạng>) Biểu diễn biểu thức bằng khuôn dạng đã chỉ
ra. Khuôn dạng có sẵn như “Long Date”, “Standard” hoặc khuôn dạng tự xác lập
như “DD/MM/YYYY”.
4.6.8 Hàm InputBox và MsgBox
™ Hàm InputBox
InputBox[$](<Lời nhắc>[,<Tiêu đề>][,<Giá trị ngầm định>][,<Tọa độ x>,<Tọa
độ y>])
Hàm này dùng để nhập giá trị cho các biến nhớ. Nếu chọn OK, biến nhận giá trị được
nhập, chọn Cancel biến nhận giá trị null.
Nếu InputBox$ thì hàm trả về chuỗi được nhập vào.
Ví dụ: để nhập bán kính của một đường tròn và gán cho biến R, ta có thể dùng hàm
InputBox theo mẫu:
R = InputBox("Nhap vao ban kinh","Cua so nhap du lieu")

Ta sẽ nhận được hộp thoại như sau:

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 26


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

™ Hàm MsgBox
Cú pháp:
MsgBox(<Lời nhắc>[,<Kiểu nút>][,<Tiêu đề>])
9 Lời nhắc là một biểu thức chuỗi, nội dung của nó sẽ được đưa ra hộp thoại.
9 Chú ý: Xuống dòng dùng chr(10).
9 Tiêu đề là một biểu thức chuỗi được hiển thị trong thanh tiêu đề của hộp thoại.
Nếu bỏ qua đối số này thì tiêu đề sẽ là “Microsoft Access”.
9 Kiểu nút: là một tổng các số nguyên dùng để xác định: các nút lệnh sẽ hiển
thị, các biểu tượng, nút mặc định được chọn.
Nhóm các nút lệnh gồm có:

Giá trị Ý nghĩa


0 Hiển thị nút OK
1 Hiển thị các nút OK và Cancel
2 Hiển thị các nút Abort, Retry và Ignore
3 Hiển thị các nút Yes, No và Cancel
4 Hiển thị các nút Yes và No
5 Hiển thị các nút Retry và Cancel

Nhóm các biểu tượng gồm có:

Giá trị Ý nghĩa


0 Không hiện biểu tượng
16 Hiện biểu tượng Critical Message
32 Hiện biểu tượng Warning Query
48 Hiện biểu tượng Warrning Message
64 Hiện biểu tượng Information Message

Nhóm nút mặc định được chọn gồm có:

Giá trị Ý nghĩa


0 Nút đầu tiên (tính từ trái sang phải)
256 Nút thứ hai
512 Nút thứ ba

Ví dụ: nếu kiểu nút = 4 + 16 + 256 thì trên hộp thoại sẽ hiện: Hai nút Yes và No,
biểu tượng Critical Message, nút No được chọn sẵn:

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 27


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

Kết quả ta nhận được:

Chúng ta có thể gọi hàm trên theo cách gọi của thủ tục, khi đó ta không cần nhận giá
trị trả về. Nếu chúng ta sử dụng hàm trên theo cách gọi hàm thì chúng ta sẽ nhận được
giá trị trả về. Giá trị trả về của hàm tương ứng với các nút như sau:

Giá trị hàm Nút được chọn


1 OK
2 Cancel
3 Abort
4 Retry
5 Ignore
6 Yes
7 No

4.7 Các cấu trúc lập trình


4.7.1 Lệnh If
™ Viết trên một dòng:
If <điều kiện> then [<nhóm lệnh 1>] [else<nhóm lệnh 2>]
™ Viết trên nhiều dòng:
If <điều kiện> then
<nhóm lệnh 1>

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 28


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

[ else
<nhóm lệnh 2>]
End If
4.7.2 Lệnh Select Case
Select Case <biểu thức>
[Case <danh sách các giá trị 1>]
[<nhóm lệnh 1>]

[Case <danh sách các giá trị n>]
[<nhóm lệnh n>]
[Case Else
nhóm lệnh (n+1)]
End Select
Danh sách các giá trị có thể viết theo ba cách sau:

™ Cách 1: Biểu thức 1, biểu thức 2,…, biểu thức k


Ví dụ: 1.5, a+b, 8.6 thì danh sách các giá trị gồm ba số: 1.5, a+b và 8.6

™ Cách 2: Biểu thức 1 To biểu thức 2


Ví dụ: 2.2 To 10.2 thì miền giá trị gồm các số trong đoạn từ 2.2 đến 10.2
“A” To “C” thì miền giá trị gồm các chuỗi có kí tự đầu là A, B và C.

™ Cách 3: Is phép_so_ sánh biểu_thức


Ví dụ: Is < a thì miền giá trị gồm các số nhỏ hơn a.

Chú ý: Ta có thể kết hợp sử dụng nhiều lần cả ba cách trên để xác định một miền giá trị.
Ví dụ: 3.2, 1.6, 10 To 15, Is < 1, Is > 200 thì miền giá trị gồm:
Các số 3.2 và 1.6
Các số nằm trong đoạn [10, 15]
Các số nhỏ hơn 1 và các số lớn hơn 200.
Một ví dụ về Select Case
Public Function Thu(ts As Date)As String
Select Case Weekday(ts)
Case 1
Thu = “Chu nhat”
Case 2
Thu = “Thu hai”
Case 3

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 29


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

Thu = “Thu ba”


Case 4
Thu = “Thu tu”
Case 5
Thu = “Thu nam”
Case 6
Thu = “Thu sau”
Case 7
Thu = “Thu bay”
End Select
End Function
4.7.3 Vòng lặp xác định For ... Next
For <biến> = <giá trị đầu> To <giá trị cuối> [Step<bước nhảy>]
<các lệnh>
[Exit For]
<các lệnh>
Next [biến đếm]
Chú ý:
Bước nhảy có thể âm hoặc dương.
Nếu không dùng lựa chọn Step<bước nhảy> thì bước bằng 1.
Toán tử Exit For dùng để thoát khỏi vòng lặp.
4.7.4 Vòng lặp xác định For Each Next
For Each <phần tử> In <nhóm>
<các lệnh>
[Exit For]
<các lệnh>
Next <phần tử>
™ Vòng lặp này dùng để duyệt lần lượt các phần tử trong nhóm.
™ Nhóm có thể là mảng hoặc tuyển tập đối tượng (Collection).
™ Nếu nhóm là mảng thì phần tử phải là biến kiểu Variant.
™ Nếu nhóm là tuyển tập đối tượng thì phần tử có thể là một biến kiểu Variant hoặc
một biến kiểu đối tượng chung (Object) hoặc biến kiểu đối tượng của tuyển tập.
4.7.5 Vòng lặp không xác định Do Loop
Có các dạng sau:

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 30


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

™ Dạng 1:
Do [{While/Until}<điều kiện>]
[<các lệnh>]
[Exit Do]
[<các lệnh>]
Loop
™ Dạng 2:
Do
[<các lệnh>]
[Exit Do]
[<các lệnh>]
Loop[{While/Until}<điều kiện>]
4.7.6 Vòng lặp While Wend
While <điều kiện>
[<các câu lệnh>]
Wend
4.7.7 Các lệnh nhảy và kết thúc chương trình
™ Nhảy không điều kiện
9 Cú pháp:
Goto <Label>
9 Sự hoạt động:
Chuyển tới câu lệnh có nhãn Label và chương trình tiếp tục thực hiện từ lệnh này.
™ Nhảy tới đoạn chương trình con
9 Cú pháp:
Gosub Label
....
Label:
....
Return “Trở về câu lệnh ngay sau Gosub”
9 Sự hoạt động:
Chuyển tới câu lệnh có nhãn Label và tiếp tục thực hiện từ lệnh này cho tới khi
gặp Return thì quay trở lại câu lệnh đứng ngay sau Gosub.
™ Nhảy có lựa chọn
9 Cú pháp:
On BT Goto/Gosub nhãn_1,..,nhãn_n

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 31


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

Trong đó BT là biểu thức nguyên và thoả mãn điều kiện 0 ≤ BT ≤ 255


9 Sự hoạt động:
Nếu BT = 1 thì nhảy tới nhãn_1
Nếu BT = 2 thì nhảy tới nhãn_2
.......
Nếu BT = n thì nhảy tới nhãn_n
Nếu BT = 0 hoặc BT > n thì bỏ qua On BT Goto/Gosub để thực hiện lệnh tiếp
theo.
Nếu BT < 0 hoặc BT > 255 thì có lỗi.
™ Nhảy khi có lỗi
9 Cú pháp:
On Error Goto Label
.....
Exit Sub
Label:
Xử lí lỗi
⎧ next ⎫
Resume ⎨ ⎬
⎩nhan ⎭
Hoạt động: Khi có lỗi, chương trình không dừng mà chuyển đến câu lệnh có nhãn
Label.
Các lỗi có thể xảy ra:
9 Xóa một bảng / truy vấn không tồn tại.
9 Tạo mới một bảng / truy vấn đã tồn tại.
9 Nhận giá trị Null từ một ô điều khiển của form / report.
9 Chia cho số 0.
9 Và các lỗi khác...
Khi gặp các lỗi này, chương trình bị rối loạn và có thể bị treo máy.
Các hàm:
9 Error$: cho biết lõi gì đã xảy ra.
9 Err: cho biết số hiệu lỗi.
Câu lệnh Resume: hướng dẫn sự hoạt động tiếp tục của chương trình, thường được
viết theo hai cách:
9 Resume Next
Theo cách này, chương trình tiếp tục từ câu lệnh ngay sau câu lệnh gây lỗi.
9 Resume Tiep_tuc

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 32


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

Chương trình tiếp tục từ câu lệnh có nhãn Tiep_tuc.


Ví dụ: Thủ tục xóa một bảng có tên nhập vào từ bàn phím. Lỗi có thể gặp là bảng
không tồn tại. Khi có lỗi, chương trình đưa ra thông báo và kết thúc thủ tục:
Sub DeleteTable()
Dim DB As Database
Dim tableName As String
Set DB = CurrentDB()
On Error Goto Xu_li_loi
tableName = InputBox("Input the name of the table that will be deleted:")
DB.TableDefs.Delete tableName
MsgBox “Table” + tableName + “was deleted”
Exit_Program:
Exit Sub
Xu_li_loi:
MsgBox “Table” + tableName + “is not available”
MsgBox Error$
Resume Exit_Program
End Sub

4.8 Các thao tác trên tệp


Cho phép chuyển dữ liệu ra lưu trữ ở ngoài tệp mdb.
™ Mở tệp: Tệp cần được mở trước khi thực hiện các thao tác trên nó. Để mở tệp, ta
dùng mệnh đề OPEN:
OPEN Tên_tệp [FOR Kiểu_tệp] [ACCESS quyền_truy_nhập] AS[#]Số_hiệu_tệp
[LEN = Reclen]
Giải thích các tham số:
9 Tên_tệp: biểu thức chuỗi xác định tên tệp và đường dẫn, bắt buộc phải có
tham số này. Ví dụ: “file01.ad”, “C:\ABC\hoso.xyz”
9 Kiểu_tệp: Xác định cách thức truy nhập trên tệp, gồm các giá trị sau:
Giá trị Ý nghĩa
Random Đây là kiểu tệp mặc đinh. Đọc ghi theo mẫu tin. Cho phép thực hiện cả ba
thao tác: ReadWrite (default), ReadOnly, WriteOnly.
Binary Cho phép đọc/ghi từ một vị trí bất kỳ tính theo byte trên tệp bằgn cách
dùng mệnh đề GET (để đọc) và PUT (để ghi). Cho phép thực hiện cả ba
thao tác: ReadWrite (default), ReadOnly, WriteOnly.
Input Đọc trên các tệp tuần tự bằng cách sử dụng mệnh đề Input.

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 33


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

Output Ghi trên các tệp tuần tự bằng cách sử dụng mệnh đề Write.
Append Ghi bổ sung trên các tệp tuần tự bằng cách sử dụng mệnh đề Write.
Quyền_truy_nhập: Xác định quyền truy nhập trên tệp gồm:
Giá trị Ý nghĩa
Read Chỉ có quyền đọc
Write Chỉ có quyền ghi
Read Write Có quyền đọc và ghi. Chỉ đúng đối với các kiểu tệp Random và Binary.
9 Số_hiệu_tệp: là một biểu thức nguyên có giá trị từ 1 đến 255. Sau khi mở tệp,
số hiệu tệp sẽ gắn với tệp cho đến khi tệp được đóng lại. Mọi thao tác sẽ thực
hiện thông qua số hiệu tệp.
9 Reclen: là một biểu thức nguyên có giá trị từ 1 đến 32767. Đối này thực sự có
tác dụng đối với kiểu tệp Random để xác định độ lớn của bản ghi (số kí tự
trong mỗi bản ghi). Giá trị mặc định của Reclen là 128 byte.
Ví dụ: Hàm kiểm tra sự tồn tại của tệp trong thư mục hiện hành, đối số là tên tệp cần
kiểm tra. Hàm trả về True nếu tệp tồn tại, ngược lại là False. Đoạn mã có dùng hàm
xác định một số hiệu tự do chưa dùng FreeFile:
Function Ton_tai(Ten_tep As String) As Integer
So_hieu As Integer
So_hieu = FreeFile ‘Chọn một số hiệu chưa dùng
Ton_tai = True
On Error Goto Loi
OPEN Ten_tep FOR Input AS So_hieu
Close So_hieu ‘Đóng tệp
Exit Function
Loi:
Ton_tai = False
Resume Next
End Function
™ Đóng tệp
Mệnh đề Close dùng để đóng 1 hoặc tất cả các tệp đang mở. Cú pháp như sau:
Close [[#]Số_hiệu_tệp], [[#]Số_hiệu_tệp]....
Nếu viết Close không kèm theo tham số gì thì có nghĩa là ta đóng tất cả các tệp đang
mở.
Ngoài ra, ta cũng có thể đóng tất cả các tệp đang mở bằng mệnh đề Reset.
™ Ghi lên tệp tuần tự (văn bản)

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 34


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

Write #<số_hiệu_tệp>,[<danh sách biểu thức>]

Mệnh đề này dùng để ghi dữ liệu kiểu số, chuỗi và kiểu DATE/TIME lên một tệp
tuần tự. Mỗi câu lệnh Write sẽ ghi một dòng văn bản lên tệp. Dòng văn bản gồm các
giá trị ứng với các biểu thức được phân cách nhau bởi dấu phẩy. Mỗi giá trị chuỗi
được bao bọc trong 2 dấu nháy kép. Giá trị kiểu DATE được ghi lên tệp theo định
dạng #2006-11-20# (tức là: năm-tháng-ngày). Giá trị kiểu TIME được ghi lên tệp
theo dạng #10:27:39# (giờ:phút:giây). Một câu lệnh WRITE không kèm theo biểu
thức sẽ ghi một dòng trống lên tệp. Kết quả, ta nhận được một tệp văn bản, nội dung
của nó có thể xem được bằng các hệ soạn thảo văn bản. Ví dụ: Chúng ta sẽ viết một
thủ tục ghi một số thứ lên một file với tên là “test.abc”, sau đó chúng ta sẽ kiểm tra
nội dụng file này. Chú ý: thư mục “C:\access” đã tồn tại.

Dịch và chạy thử chương trình trong cửa sổ Immediate.


Mở thư mục access trong ổ C ra, ta thấy có file “test.abc”. Dùng trình soạn thảo
Notepad mở file này, ta có kết quả như sau:

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 35


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

™ Đọc từ tệp tuần tự (văn bản)


Input #<số_hiệu_tệp>,[<danh sách các biến>]
Mệnh đề này dùng để đọc dữ liệu kiểu số, kiểu chuỗi và kiểu DATE/TIME từ một tệp
văn bản và chứa vào các biến tương ứng với chú ý: dữ liệu trên tệp và biến tương ứng
(biến chứa dữ liệu) phải cùng kiểu. Danh sách các biến phân cách nhau bởi dấu phẩy.
Ví dụ: đọc tệp chứa các số sau:

Ta viết chương trình như sau:

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 36


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

Khi thực thi thủ tục trên, ta thu được kết quả như sau:

™ Ghi trên tệp ngẫu nhiên / nhị phân


Mệnh đề Put dùng để ghi giá trị của một biến (kiểu số, chuỗi và DATE/TIME) lên
một tệp ngẫu nhiên / nhị phân. Kết quả, ta nhận được một tệp nhị phân. Cú pháp như
sau:
PUT #<số_hiệu_tệp>, [số_hiệu_bản_ghi ,] <tên_biến>
trong đó:
số_hiệu_bản_ghi: là một biểu thức nguyên dương biểu thị số hiệu bản ghi đối với tệp
ngẫu nhiên (hoặc số hiệu byte đối với tệp nhị phân). Việc ghi sẽ thực hiện từ bản ghi
hoặc byte này.. Nếu vắng mặt, việc ghi sẽ bắt đầu từ bản ghi hoặc byte hiện tại trên
tệp. Bản ghi (hoặc byte) đầu ứng với số_hiệu_bản_ghi = 1.

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 37


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

Chú ý về độ dài của bản ghi:


Độ dài của bản ghi được quy định bởi đối Len trong mệnh đề OPEN. Nó chỉ thực sự
cần thiết đối với tệp Random. Cách xác định độ dài bản ghi:
9 Với các biến có độ dài xác định (mọi kiểu trừ String) thì độ dài bản ghi cần
lớn hơn hoặc bằng độ dài của biến.
9 Riêng đối với biến kiểu chuỗi có độ dài biến đổi cần lường trước độ dài cực
đại (số kí tự tối đa cần nhập). Độ dài bản ghi ≥ (độ dài cực đại + 2) (2 byte
dùng để ghi nhận độ dài của chuỗi).
Kết quả thực hiện:
9 Đối với tệp ngẫu nhiên, mỗi câu lệnh PUT sẽ:
ƒ Đưa nội dung của biến vào một phòng đợi có độ dài Len byte, sau đó
ghi cả Len byte của phòng đợi lên tệp tại bản ghi thứ
số_hiệu_bản_ghi.
ƒ Nếu phòng đợi quá nhỏ không chứa được giá trị của biến thì sẽ thông
báo lỗi: Bad Record Length.
9 Đối với tệp nhị phân:
ƒ Ghi giá trị của biến lên tệp tại byte thứ số_hiệu_bản_ghi.
ƒ Số byte được ghi sẽ bằng độ lớn của biến.
™ Đọc từ tệp ngẫu nhiên/ nhị phân
Mệnh đề GET dùng để đọc dữ liệu từ một tệp Random / Binary và chứa vào một biến.
Cú pháp như sau:
GET #<số_hiệu_tệp>,[số_hiệu_bản_ghi ,] <tên_biến>
trong đó:
số_hiệu_bản_ghi: là một biểu thức nguyên dương biểu thị số hiệu bản ghi đối với tệp
ngẫu nhiên (hoặc số hiệu byte đối với tệp nhị phân). Việc đọc sẽ thực hiện từ bản ghi
hoặc byte này.. Nếu vắng mặt, việc đọc sẽ bắt đầu từ bản ghi hoặc byte hiện tại trên
tệp. Bản ghi (hoặc byte) đầu ứng với số_hiệu_bản_ghi = 1.
Chú ý:
9 Đối với tệp Random, đối số Len trong mệnh đề OPEN để đọc cần bằng độ dài
bản ghi trên tệp cần đọc.
9 Dữ liệu chứa trên tệp và biến nhận dữ liệu tương ứng phải có cùng kiểu.
Kết quả thực hiện:
9 Đối với tệp ngẫu nhiên, mỗi câu lệnh GET sẽ:
ƒ Đọc len byte từ tệp và chứa vào phòng đợi (có độ dài Len byte).
ƒ Lấy một số byte từ phòng đợi (bằng độ dài của biến) và gán cho biến.

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 38


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

9 Đối với tệp nhị phân, mỗi câu lệnh GET sẽ đọc một số byte bằng độ dài của
biến từ tệp và đưa vào biến.
Ví dụ:

Kết quả:

™ Các hàm dùng trong thao tác tệp:


9 Eof(<số_hiệu_tệp>): Hàm này trả về giá trị True nếu con trỏ tệp đặt tại cuối
tệp, ngược lại, hàm trả về trị False.
9 Lof(<số_hiệu_tệp>): cho biết độ dài của tệp tính theo byte. Ví dụ: để xác
định số bản ghi trên một tệp Random, ta chia độ dài tệp cho độ dài bản ghi:
Open “DSTS.xyz” For Random As #1 Len = 20
So_ban_ghi = LOF(1)/20

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 39


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

9 Seek(<số_hiệu_tệp>): cho biết vị trí hiện tại của con trỏ tệp. Đó là một giá trị
nguyên trong khoảng từ 1 đến 2147483647. Đối với tệp Random, hàm cho
biết số hiệu của bản ghi tính từ 1 mà con trỏ tệp đang định vị. Đối với các tệp
còn lại, hàm cho biết số hiệu byte tính từ 1 mà con trỏ tệp đang định vị.
Mệnh đề Seek:
SEEK [#]<số_hiệu_tệp>, Vị_trí
trong đó, Vị_trí là số nguyên dương trong khoảng từ 1 đến 2147483647 xác định vị
trí mà con trỏ tệp sẽ di chuyển tới.
9 Đối với tệp Random, Vị_trí là số hiệu bản ghi tính từ 1.
9 Đối với tệp Binary, Vị_trí là số hiệu byte tính từ 1.
9 Chú ý:
ƒ Nếu Vị_trí = 0 hoặc âm thì sẽ báo lỗi
ƒ Nếu Vị_trí lớn hơn số bản ghi hiện có (Ví dụ: trên tệp chỉ có 6 bản ghi
mà Vị_trí = 9) thì con trỏ tệp sẽ định vị tại cuối tệp.

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 40


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

Chương 5
Sử dụng đối tượng trong Access
5.1 Khái niệm đối tượng và tập hợp đối tượng
5.1.1 Các kiểu dữ liệu đối tượng
Các kiểu dữ liệu đối tượng thường dùng của Access như sau:
™ Form
™ Report
™ Control
™ DBEngine, Workspace, DataBase, TableDef, QueryDef, Recordset, Index, Field,
Parameter
™ Connection, Command, Catalog, Table, Column, Key
™ CommandBar, CommandBarControl, CommandBarButton,...
Chúng ta cũng khai báo các biến kiểu đối tượng bằng lệnh Dim.
5.1.2 Tập hợp đối tượng
™ Tập hợp đối tượng là đối tượng định sẵn của Access. Các đối tượng cùng kiểu là
đối tượng con của tập hợp đối tượng.
™ Tên: ta thêm “s” vào đằng sau. Ví dụ: Forms, TableDefs, QueryDefs...
™ Để biểu diễn một đối tượng trong tập hợp, có những cách sau:
9 <Tập hợp>(i), trong đó i = 0, 1, 2,...
9 <Tập hợp>(“<Tên đối tượng>”)
9 <Tập hợp>!<Tên đối tượng> (nếu tên đối tượng không có dấu cách)
9 <Tập hợp>![Tên đối tượng] (nếu tên đối tượng có dấu cách)
5.1.3 Đối tượng khởi thuỷ. Cách biểu diễn các thành phần của
một đối tượng
™ Đối tượng khởi thủy không là đối tượng con của bất kỳ đối tượng nào.
™ Đối tượng khởi thủy đứng đầu trong biểu diễn của các thành phần đối tượng
™ Các đối tượng khởi thủy thường dùng là:
9 Của Access: Forms, Reports
9 Của DAO: DbEngine
9 Của ADO: Connections, Catalog
9 Của MsOffice: CommandBars
™ Khi biểu diễn thành phần nào đó của đối tượng, phải tuân theo quy định sau:

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 41


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

Xuất phát từ đối tượng khởi thủy -> Các đối tượng trực thuộc đối tượng vừa được
biểu diễn -> Các thành phần của đối tượng.
™ Nếu tên đối tượng không theo quy định về tên trong lập trình thì phải bao bằng
cặp ngoặc vuông.
5.1.4 Một vài điểm đặc biệt khác
™ Từ khóa Me
Được dùng để chỉ đối tượng mà trên đó đoạn mã chương trình đang chạy. Nó có thể
là form hoặc report.
™ Tham chiếu đến đối tượng
Để một biến đối tượng tham chiếu đến một đối tượng cùng kiểu, ta dùng lệnh Set:
Set <tên biến đối tượng> = <biểu thức đối tượng>
™ Lệnh With
Tương tự như trong Pascal, chúng ta không cần viết tên đối tượng khi thực hiện thao
tác.
With <Đối tượng>
[<Các lệnh>]
End With

5.2 Đối tượng của Access


5.2.1 Phân cấp các đối tượng của Access
Access

Forms

Controls

Reports

Controls

DoCmd

5.2.2 Đối tượng DoCmd


DoCmd.<Phương thức><Danh sách các tham số>
Có thể phân biệt hai loại tham số:

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 42


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

™ Tên của một đối tượng do người dùng tự đặt như tên bảng, tên Form....
™ Các hàng chuẩn của Access.
Chúng ta sẽ có dịp biết đến các tham số này ngay dưới đây:
™ Phương thức Close
DoCmd.Close <Kiểu đối tượng>, <Tên đối tượng>, <Cách ghi>
trong đó:
9 <Kiểu đối tượng>: xác định kiểu đối tượng cần đóng, chọn trong các hằng
chuẩn sau: acTable, acQuery, acForm, acReport, acMacro, acModule.
9 <Tên đối tượng>: xác định tên của đối tượng cần đóng.
9 <Cách ghi>: có ghi lại các thay đổi của đối tượng trước khi đóng hay
không, chọn một trong các hằng: acSaveNo (không ghi), acSaveYes (có
ghi), acSavePrompt.
9 Ví dụ: DoCmd.Close acForm, “MainForm”, acSaveYes sẽ đóng mẫu
biểu MainForm và ghi lại mọi thay đổi của mẫu biểu này trước khi đóng.
™ Phương thức OpenForm
DoCmd.OpenForm <Tên form>, <View>, <Tên bộ lọc>, <Điều kiện lọc>,
<DataMode>, <WindowMode>
9 <Tên form>: chuỗi biểu thị tên biểu thức cần mở.
9 <View>: chọn trong các hằng sau: acDesign, acForm, acNormal (mặc
định), acPreview.
9 <Tên bộ lọc>: chuỗi biểu thị tên của một truy vấn dùng để săp xếp và/hoặc
lọc ra các thông tin cần thiết.
9 <Điều kiện lọc>: chuỗi chứa điều kiện chọn lọc thông tin.
9 <DataMode>: chọn trong các hằng sau: acFormAdd, acFormEdit,
acFormPropertySettings (mặc định), acFormReadOnly.
9 <WindowMode>: chọn trong các hằng sau: acDialog, acHidden, acIcon,
acWindowNormal (mặc định).
9 Ví dụ: mở form “danh sach thi sinh” theo dạng form View để cập nhật dữ
liệu cho những thí sinh có tổng điểm lớn hơn hoặc bằng 18, ta viết như
sau:
DoCmd.OpenForm “danh sach thi sinh”, acNormal, , “[tong
diem]>=18”, acFormEdit
™ Phương thức OpenTable
dùng để mở một bảng, có 3 tham số theo thứ tự sau:

Tham số Ý nghĩa / Giải thích

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 43


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

Table Name biểu thức chuỗi biểu thị tên bảng cần mở.
View chọn trong các giá trị sau: acViewDesign, acViewNormal (mặc
định – dạng Datasheet View), acViewPreview.
DataMode chọn trong các giá trị sau: acAdd, acEdit (mặc định), acReadOnly.
Ví dụ: mở bảng “danh sach can bo” để cập nhật dữ liệu, ta viết như sau:
DoCmd.OpenTable “danh sach can bo”, acViewNormal, acEdit
™ Phương thức OpenQuery
dùng để mở một truy vấn, có 3 tham số theo trình tự:

Tham số Ý nghĩa / Giải thích


Query chuỗi biểu thị tên truy vấn cần mở.
Name
View chọn trong danh sách sau: acViewDesign, acViewNormal (mặc
định), acViewPreview.
DataMode chọn trong các giá trị sau: acAdd, acEdit (mặc định), acReadOnly.
™ Phương thức OpenReport
dùng để mở một báo biểu, có 4 tham số theo thứ tự:

Tham số Ý nghĩa / Giá trị


Report Name chuỗi biểu thị tên báo biểu cần mở.
View chọn trong danh sách sau: acViewDesign, acViewNormal (mặc
định – in báo biểu), acViewPreview.
Filter Name chuỗi biểu thị tên của một truy vấn dùng để săp xếp và/hoặc lọc
ra các thông tin cần thiết.
WhereCondition chuỗi chứa điều kiện chọn lọc thông tin.
™ Phương thức Open Module
dùng để mở một đơn thể, có 2 tham số theo thứ tự sau:

Tham số Ý nghĩa / Giá trị


ModuleName chuỗi biểu thị tên đơn thể cần mở.
ProcedureName chuỗi xác định tên thủ tục của đơn thể.
Ví dụ: mở đơn thể “chuong trinh” để xem, sửa, bổ sung các hàm, thủ tục của nó bắt
đầu từ thủ tục có tên “tinh_toan”:
DoCmd.OpenModule “chuong trinh”, “tinh_toan”
™ Các phương thức trên các control
9 Sơn lại các đối tượng

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 44


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

Để đối tượng hiện nội dung mới nhất mà nó vừa thay đổi, ta dùng phương thức
RepaintObject có 2 tham số như sau:

Tham số Ý nghĩa / Giải thích


ObjectType chọn trong danh sách sau: acDefault, acForm, acMacro, acModule,
acQuery, acReport, acTable.
ObjectName chuỗi biểu thị tên đối tượng cần sơn lại.
Ví dụ: sau khi gán giá trị cho các ô điều khiển của mẫu biểu [hoc sinh], ta dùng
câu lệnh sau để thấy sự thay đổi của mẫu biểu trên màn hình:
DoCmd.RepaintObject acForm, “hoc sinh”
9 Đặt con trỏ chuột tại một ô điều khiển
Để dịnh vị con trỏ tại một ô điều khiển, ta dùng câu lệnh:
DoCmd.GotoControl “Tên ô điều khiển”
Ví dụ: DoCmd.GotoControl “Noi sinh” sẽ định vị con trỏ tại ô điều khiển [Noi
sinh].
9 Hiện nội dung vừa thay đổi của một ô điều khiển
Có khi nội dung của một ô điều khiển đã thay đổi nhưng trên mẫu biểu, ta vẫn chỉ
quan sát được nội dung cũ của nó. Điều này thường xảy ra đối với các hộp
ComboBox. Để hiển thị nội dung mới nhất của một ô điều khiển, ta dùng câu lệnh
sau:
DoCmd.Requery “Tên ô điều khiển”
9 Di chuyển đến một bản ghi mới
Để di chuyển đến một bản ghi mới, biến nó thành bản ghi hiện hành, ta dùng
phương thức GotoRecord có 4 tham số:

Tham số Ý nghĩa / Giá trị


ObjectType chọn trong danh sách sau: acActiveDataObject (mặc định),
acDataForm, acDataQuery, acDataTable.
ObjectName chuỗi biểu thị tên đối tượng chứa bản ghi cần di chuyển đến.
Record chọn trong danh sách: acFirst, acGoto, acLast, acNewRec, acNext
(mặc định), acPrevious.
Offset biểu thức nguyên (giả sử có giá trị là n).
Nếu tham số Record là acNext hoặc acPrevious thì sẽ di chuyển
xuống phía dưới hoặc lên phía trên n bản ghi.
Nếu tham số Record là acGoto thì sẽ di chuyển đến bản ghi có số
thứ tự là n (tính từ 1).
Ví dụ:

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 45


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

DoCmd.GotoRecord acDataForm, “Tim kiem”, acGoto, m


sẽ di chuyển đến bản ghi thứ m của mẫu biểu [Tim kiem].
™ Phương thức SetMenuItem
Phương thức này dùng để điều khiển trạng thái của Menu. Cú pháp như sau:
DoCmd.SetMenuItem menuIndex [, CommandIndex / SubMenu] [, Command
Index ] [, Flag]

Tham số Ý nghĩa / Giải thích


menuIndex là một giá trị nguyên tính từ 0, xác định chỉ số của menu trong hệ
menu.
CommandIndex / là một số nguyên tính từ 0, xác định chỉ số của nút lệnh hoặc chỉ số
SubMenu của menu con của menu có chỉ số menuIndex.
CommandIndex là một số nguyên tính từ 0, xác định chỉ số của nút lệnh trong menu
con có chỉ số CommandIndex/SubMenu. Tham số này chỉ dùng khi
tham số thứ hai là chỉ số của menu con.
Flag Quy định trạng thái mới của đối tượng được xác định bởi ba tham
số trên, là một trong các hằng sau:
acMenuCheck (đánh dấu).
acMenuGray (bị xám, không cho phép thực hiện nút lệnh).
acMenuUncheck (không đánh dấu).
acMenuUngray (không bị xám, đây là trạng thái mặc định).
Chúng ta sẽ tạo một hệ menu để minh họa chức năng của phương thức
SetMenuItem như sau:

File Chọn hình học Chức năng


Open Tam giác Tính diện tích
Về Access Đoạn thẳng Tính độ dài
Về Window
trong đó:
ƒ Chức năng Open bị xám đi, chưa sử dụng được do ta chưa cài đặt.
ƒ Khi form hiện lên lần đầu, "Tam giác" được chọn.
ƒ Vì "Tam giác" được chọn nên chức năng "Tính độ dài" bị xám đi (không sử
dụng được).
Ta viết đoạn mã trong thủ tục xử lý sự kiện Open của Form:

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 46


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

Hình minh họa kết quả như sau:

5.2.3 Tập hợp đối tượng Forms và Reports


™ Forms
Tập hợp đối tượng Forms là đối tượng sẵn có của Access dùng tham chiếu đến các
Form đang mở. Có thể dùng cách biểu diễn đối tượng qua tập hợp đối tượng và đối

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 47


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

chiếu trên cây phân cấp các đối tượng của Access để biểu diễn các đối tượng trong
tập hợp.
Ví dụ: Forms(i), i = 0, 1, ... để chỉ form được mở thứ i.
Forms!Form1.Control!Label1 hoặc Forms!Form1!Label1 để chỉ nhãn Label1 trên
Form1
Trong Access có form chính và form phụ. Muốn tham chiếu đến các điều khiển trên
form phụ, ta sử dụng cơ chế phân cấp sau:
9 Đối tượng khởi thủy Forms.
9 Các form đang mở.
9 Các điều khiển trên các form đang mở (trong đó có subform: đảm bảo sự nhất
quán giữa tên của điều khiển subform và tên subform).
9 Đối tượng form là đối tượng con của điều khiển subform.
Một số thuộc tính hay dùng trong Form:

Thuộc tính Ý nghĩa


Name Tên đối tượng
Visible hiển thị hay không hiển thị của form hay control
Count xác định số đối tượng thành phần của tuyển tập.
ControlType xác định kiểu của các control trong form/report. Nhận các giá trị sau:
acLabel, acRectangle, acLine, acImage, acCommandButton,
acOptionButton, acCheckBox, acTextBox, acListBox, acComboBox,…
Value biểu thị giá trị của các ô điều khiển TextBox, ListBox, ComboBox.
Ví dụ 1: In danh sách các mẫu biểu đang mở
Cách 1:
Sub LietKe()
Dim n As Integer, I As Integer
n = Forms.Count
For i = 0 To n-1
MsgBox "Tên form thứ" & str(i) & "là:" & Forms(i).Name
Next
End Sub
Cách 2:
Sub LietKe()
Dim fm As Form, i%
i=0
For Each fm In Forms

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 48


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

MsgBox "Tên form thứ" & str(i) & "là:" & fm.Name
i=i+1
Next
End Sub
Ví dụ 2: dùng phép gán để thay đổi giá trị của các thuộc tính hoặc control. Giả sử "ho
ten" là một textBox trên form "ho so".
Dim f As Form
DoCmd.OpenForm "ho so" ' Mở mẫu biểu [ho so]
Set f = Forms![ho so] ' gắn biến f vào mẫu biểu
f![ho ten] = "Nguyen Van A" ' xuất hiện dòng chữ Nguyễn Văn A trên ô [ho ten]
f.Visible = True ' hiện mẫu biểu
f![ho ten].Visible = False ' ẩn điều khiển [họ ten]
™ Reports
Tập hợp đối tượng Reports là đối tượng sẵn có của Access dùng tham chiếu đến các
báo cáo đang mở. Cách biểu diễn các thành phần trong tập hợp đối tượng Reports
tương tự như tập hợp đối tượng Forms. Muốn tham chiếu đến các điều khiển trên
report phụ, có thể sử dụng cơ chế phân cấp sau:
9 Đối tượng khởi thủy Reports.
9 Các báo cáo đang mở.
9 Các điều khiển trên các báo cáo đang mở (trong đó có điều khiển subreport:
đảm bảo sự nhất quán giữa tên điều khiển subreport và tên subreport).
9 Đối tượng report là đối tượng con của điều khiển subreport.
9 Điều khiển xuất hiện trên report phụ của report đang xét.
Chú ý: báo biểu cũng tương tự như mẫu biểu.

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 49


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

5.3 Đối tượng của DAO (Data Access Object)


5.3.1 Mối quan hệ giữa các đối tượng chủ yếu của DAO

DbEngine

Workspaces

Databases

TableDefs QueryDefs Recordsets

Fields Indexes Fields Parameters Fields

Fields

a. Tập hợp đối tượng Databases. Đối tượng kiểu Database


™ Tập hợp đối tượng Databases:
9 Thuộc tính:
Count: số CSDL đang mở
9 Phương thức:
.Refresh: Cập nhật lại các đối tượng ứng với những thay đổi trên lược đồ của
CSDL.
™ Đối tượng kiểu Database:
9 Thuộc tính
Name: Tên đầy đủ của CSDL
Updatable (True/False): Có cập nhật được CSDL không.
9 Phương thức:
.CreateTableDef: Tạo bảng mới
Set <tên biến TableDef> = <Tên biến Database>.CreateTableDef([<tên
bảng>])
Tên bảng là xâu kí tự. Nếu không chỉ rõ tên bảng, phải gán giá trị cho thuộc tính
Name của biến kiểu TableDef.
.CreateQueryDef: Tạo truy vấn mới

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 50


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

Set <tên biến QueryDef> = <Tên biến Database>.CreateQueryDef([<tên


query>][,<Văn bản SQL>])
Tên truy vấn và văn bản SQL đều là xâu kí tự. Nếu không chỉ rõ trong phương
thức, phải gán giá trị cho các thuộc tính Name và SQL của biến kiểu QueryDef.
.Execute: Thực hiện truy vấn hành động (bổ sung, loại bỏ, thay đổi), tạo bảng...
<Tên biến CSDL>.Execute <Nguồn>,<Cách thức>
Nguồn: Xâu kí tự chỉ tên hoặc văn bản SQL của truy vấn.
Cách thức: cho phép chọn một số hằng của DAO, có chấp nhận mất nhất quán dữ
liệu không...
.OpenRecordset
Set <tên biến kiểu Recordset> = <Tên biến CSDL>.OpenRecordset
(<Nguồn>[,<Kiểu>])
Nguồn: xâu kí tự chỉ tên bảng, tên truy vấn hoặc văn bản SQL của truy vấn.
Kiểu: Kiểu của Recordset. Chọn các hằng của DAO như: dbOpenTable,
dbOpenDynaset, dbOpenSnapshot.
b. Tập hợp đối tượng kiểu TableDefs. Đối tượng kiểu TableDef
™ Tập hợp đối tượng TableDefs: Tham chiếu các bảng trong CSDL
9 Thuộc tính:
Count: số bảng trong CSDL
9 Phương thức:
.Append: thêm một bảng mới vào CSDL
<Tập hợp>.Append <tên biến bảng>
.Delete: xóa một bảng khỏi CSDL
<Tập hợp>.Delete “<tên bảng>” (có thể là giá trị thuộc tính Name)
™ Đối tượng kiểu TableDef
9 Thuộc tính:
.Name: tên bảng
.RecordCount: số bản ghi trong bảng
.ValidationRule: xem trong phần thiết kế bảng
.ValidationText
9 Phương thức:
.CreateField: tạo trường mới cho bảng
Set <tên biến trường> =<tênbiến TableDef>.CreateField(<tên>[,<kiểu>][,<độ
rộng>])
Tham Ý nghĩa

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 51


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

số
<tên> do người dùng đặt theo quy tắc.
<độ tính bằng byte đối với text.
rộng>
<kiểu> nhận một trong các giá trị nguyên sau: dbBoolean, dbByte, dbInteger, dbLong,
dbCurrency, dbSingle, dbDouble, dbDate, dbBinary, dbText,
dbLongBinary(kiểu OLE), dbMemo.
.CreateIndex: tạo chỉ số mới cho bảng
Set <biến chỉ số> = <tên biến TableDef>.CreateIndex(“<tên>”)
.OpenRecordset
c. Tập hợp đối tượng Fields
™ Phương thức
.Append: thêm trường mới vào bảng
<Tên đối tượng>.Fields.Append <tên biến trường>
.Delete: xóa một trường trong bảng
<Tên đối tượng>.Fields.Delete “<tên trường>”
d. Xây dựng CSDL nhờ biến đối tượng
™ Tạo bảng mới: dùng phương thức của đối tượng DataBase.
™ Tạo trường mới: dùng phương thức của đối tượng kiểu TableDef.
™ Thêm trường vào bảng: dùng phương thức của tập hợp đối tượng Fields.
™ Thêm bảng vào CSDL: dùng phương thức của tập hợp đối tượng TableDefs.
™ Ví dụ 1: thủ tục tạo bảng với tên bảng và số cột cho trước
Public Sub CreateTable(name As String, quantityOfColum As Integer)
Dim db As Database, tb As TableDef, fd As Field
Dim i As Integer, fieldName As String
Set db = CurrentDb
Set tb = db.CreateTableDef(name)
For i = 1 To quantityOfColum
fieldName = “Colum” & i
Set fd = tb.CreateField(fieldName, dbInteger)
tb.Fields.Append fd
Next
db.TableDefs.Append tb
End Sub

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 52


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

Ví dụ 2: tạo một bảng mới tên là [Ho so] gồm trường [Ho ten] kiểu text, trường
[Nam sinh] kiểu Integer.
Sub TaoBang()
Dim DB As Database, TB As TableDef, FD As Field
'DB gắn với CSDL hiện hành
Set DB = DBEngine.Workspaces(0).Databases(0)
' Tạo bảng [Ho so] và gắn vào biến TB
Set TB = DB.CreateTableDef("Ho so")
' Tạo trường [Ho ten] kiểu Text, rộng 25 byte
Set FD = TB.CreateField("Ho ten", dbText, 25)
' Bổ sung vào tuyển tập các trường của bảng
TB.Fields.Append FD
' Tạo trường [Nam sinh] kiểu Integer
Set FD = TB.CreateField("Nam sinh", dbInteger)
' Bổ sung vào tuyển tập các trường của bảng
TB.Fields.Append FD
' Bổ sung bảng vào tuyển tập các bảng của CSDL hiện hành
DB.TableDefs.Append TB
End Sub
e. Tập hợp đối tượng QueryDefs. Đối tượng kiểu QueryDef
™ Tập hợp đối tượng QueryDefs
9 Thuộc tính:
.Count: số lượng truy vấn trong CSDL.
9 Phương thức:
.Append: thêm truy vấn mới vào CSDL.
<Tập hợp>.Append <tên biến QueryDef>
.Delete: xóa một truy vấn khỏi CSDL
<Tập hợp>.Delete “<tên truy vấn>” (có thể là thuộc tính Name)
™ Đối tượng kiểu QueryDef
9 Thuộc tính:
.Name: Tên truy vấn.
.SQL: Văn bản SQL của truy vấn.
9 Phương thức:
.Execute: thực hiện truy vấn (hành động - tạo lập CSDL)

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 53


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

.OpenRecordset: tạo Recordset, giống phương thức của đối tượng Database,
không có tham số nguồn.
Ví dụ: Tạo một truy vấn [DSHS Gioi] gồm các học sinh có điểm trung bình >= 8:
Sub hsGioi()
Dim DB As Database
Dim QR As QueryDef
Dim st As String
Set DB = CurrentDB
Set QR = DB.CreateQueryDef()
QR.Name = "DSHS Gioi"
st = "Select distinctrow DSHS.* from DSHS"
st = st + "Where [Diem TB]>=8"
QR.SQL = st
DB.QueryDefs.Append QR
' Mở truy vấn để xem
DoCmd.OpenQuery "DSHS Gioi"
End Sub
f. Tập hợp đối tượng Recordsets. Đối tượng kiểu Recordset
Đây là đối tượng quan trọng nhất trong các đối tượng của DAO. Chúng được dùng để
thực hiện các thao tác trên CSDL như tìm kiếm, bổ sung, loại bỏ, thay đổi,... trong
chương trình.
™ Tập hợp đối tượng Recordsets
9 Thuộc tính:
.Count: tổng số recordset đang sử dụng
9 Phương thức:
.Refresh: tạo lại các recordset khi lược đồ CSDL thay đổi
™ Đối tượng kiểu Recordset
9 Dùng để tham chiếu đến một tập hợp các bản ghi trên CSDL. Tập hợp này
có thể nằm trong một bảng hay một truy vấn. Có ba loại recordset chính:
Bảng, Dynaset, Snapshot. Ngoài ra còn một số loại khác dùng khi nhận dữ
liệu từ các nguồn khác thông qua ODBC. Phiên bản Access 2000 trở lên
không phân biệt rõ sự khác nhau giữa các loại recordset.
9 Để truy nhập đến từng trường của recordset, người ta có thể dùng các cách
thức sau:
ƒ Qua tập hợp đối tượng Fields:

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 54


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

<Biến Recordset>.Fields(i) i = 0, 1, 2,...


<Biến Recordset>.Fields(“<tên>”)
<Biến Recordset>.Fields!<tên>
ƒ Truy nhập trực tiếp vào trường:
<Biến Recordset>.(“Tên”)
<Biến Recordset>!<Tên>
9 Thuộc tính của đối tượng kiểu Recordset:
.AbsolutePosition: vị trí con trỏ bản ghi của Recordset, giá trị : 0, 1, 2,...
.BOF (T/F) : đúng khi con trỏ ở bên trái bản ghi đầu tiên
.EOF (T /F) : đúng khi con trỏ ở bên phải bản ghi cuối cùng
.Filter : xâu kí tự thể hiện điều kiện lọc các bản ghi trong recordset
.NoMatch (T/F) : dùng khi tìm kiếm bằng các phương thức FindFirst,
FindLast, FindNext, FindPrevious.
.RecordCount: số bản ghi trong recordset.
9 Phương thức của đối tượng kiểu Recordset
.AddNew: thêm bản ghi trắng vào recordset. Chúng chỉ được cập nhật vào
CSDL khi ta gọi phương thức Update.
.Close: đóng recordset.
.Delete: xóa bản ghi hiện hành trong recordset.
.Edit: sửa bản ghi hiện hành trong recordset. Chúng chỉ được cập nhật vào
CSDL khi ta gọi phương thức Update.
.Update: Cập nhật những thay đổi trên recordset.
.CancelUpdate: bỏ qua không cập nhật những thay đổi trên recordset.
.FindFirst | .FindLast | .FindNext | .FindPrevious <điều kiện>: chuyển con
trỏ đến bản ghi đầu tiên, cuối cùng, ngay sau bản ghi hiện hành, ngay trước
bản ghi hiện hành thỏa mãn điều kiện nếu có. Nếu không có, chuyển đến EOF.
.MoveFirst | .MoveLast | .MoveNext | .MovePrevious: chuyển con trỏ đến
bản ghi đầu tiên, cuối cùng, ngay sau bản ghi hiện hành, ngay trước bản ghi
hiện hành.
Phương thức OpenRecordset
dùng để tạo một biến Recordset. Có thể dùng phương thức này với các đối
tượng: Database, TableDef, QueryDef.
Cách viết:
Set <biến Recordset> = Đối_tượng.OpenRecordset(Nguồn, loại)
trong đó:

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 55


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

Tham số Ý nghĩa
Đối_tượng là một biến đối tượng kiểu Database, TableDef, QueryDef
Nguồn là chuỗi kí tự biểu thị tên bảng, truy vấn hoặc câu lệnh SQL. Tham số
Nguồn chỉ sử dụng với đối tượng Database, còn với đối tượng TableDef và
QueryDef thì nguồn chính là các đối tượng này.
Loại là một trong các giá trị sau: dbOpenTable, dbOpenDynaset,
dbOpenSnapshot
Loại mặc Nếu bỏ qua tham số loại thì Access sử dụng loại mặc định theo quy tắc
định sau:
Với đối tượng là bảng của CSDL hiện hành thì loại mặc định là
dbOpenTable.
Với đối tượng là truy vấn hoặc là bảng của CSDL không hiện hành thì loại
mặc định là dbOpenDynaset.
Ví dụ 1: Đếm số bản ghi của một Recordset
Sub Dem_so_ban_ghi()
Dim DB As Database, rec As RrecordSet, total
Set DB = CurrentDB
Set rec = DB.OpenRecordSet("DSCB")
total = rec.RecordCount
MsgBox "Tong so ban ghi la:" & str(total)
rec.Close
DB.Close
End Sub
Ví dụ 2:
Xét bảng DSCB trong đó có các trường Bac_luong và Nam_len_luong. Nếu năm lên
lương trước 1998 thì bậc lương sẽ được cộng thêm 200,000. Thủ tục được viết như sau:
Sub Dieu_chinh_luong()
Dim DB As database, rec As RecordSet
Set DB = CurrentDB
Set rec = DB.OpenRecordSet("DSCB")
Do Until rec.EOF
if rec![Nam_len_luong] <=1998 then
rec.Edit
rec![Bac_luong] = rec![Bac_luong] + 200000
rec.Update

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 56


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

End if
rec.MoveNext
Loop
rec.Close
DB.Close
End Sub
5.4 Đối tượng dữ liệu ADO (ActiveX Data Object)
Để sử dụng ADO, chúng ta cần quan tâm đến các thư viện sau:
Thư viện ADODB chứa các thao tác đơn giản nhất, cho phép kết nối đến CSDL, thao tác
trên bản ghi.
Thư viện ADOX cho phép giải quyết các vấn đề liên quan đến thiết kế dữ liệu (bảng, truy
vấn) và an toàn dữ liệu.
Thư viện JRO cho phép tạo lập những bản sao của CSDL.
Muốn sử dụng các thư viện của ADO, ta phải tham chiếu đến thư viện đó (dùng thư viện
nào thì tham chiếu thư viện ấy). Trên của sổ Code, dùng hộp thoại References
5.4.1 Phân cấp các đối tượng chủ yếu của thư viện ADODB
Connection

Commands

Parameters

Recordsets

Fields

Errors

5.4.2 Đối tượng kiểu Connection


™ Cách thực hiện kết nối đến CSDL
9 Khai báo:
Dim <tên biến> As [New] Connection
9 Kết nối đến CSDL khác: Ta gọi phương thức
<Tên biến Connection>.Open <Dòng kết nối>
<Dòng kết nối> là xâu kí tự, thường bao gồm các tham số:
ƒ Provider: loại CSDL. Ví dụ: “provider =microsoft.jet.OLEDB.4.0”
ƒ DataSource: tên CSDL, bao gồm cả đường dẫn
Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 57
Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

9 Truy nhập CSDL hiện hành:


Set <Tên biến Connection> = CurrentProject.Connection
™ Thuộc tính của đối tượng kiểu Connection
.Connection String: những thông tin liên quan đến kết nối, bao gồm cả những thông
tin được chỉ ra trong dòng kết nối, ngoài ra còn có user name, password, mật mã
hóa...

Ví dụ: Ta viết đoạn thủ tục sau:

Khi chạy đoạn mã trên, ta thu được kết quả là thông tin về chuỗi kết nối:

.Mode: xác định quỳên được làm đối với CSDL, ngầm định là adModeUnknown
Các giá trị của thuộc tính này như bảng sau:

Giá trị Ý nghĩa


adModeUnknown Chưa thiết lập việc phân quyền sử dụng hoặc không phân
quyền sử dụng.
adModeRead Chỉ đọc.
adModeWrite Chỉ ghi.
adModeReadWrite Có thể đọc ghi.
adModeShareDenyWrite Ngăn cản người khác mở CSDL để ghi.
adModeShareDenyRead Ngăn cản người khác mở CSDL để đọc.
adModeShareExclusive Ngăn cản người khác mở CSDL.
adModeShareDenyNone Ngăn cản người khác làm mọi việc với CSDL.
™ Các phương thức của đối tượng kiểu Connection

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 58


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

.Open: dùng để mở một kết nối.


.Close: đóng kết nối.
.Execute: thực hiện truy vấn trong CSDL được tham chiếu, có thể thực hiện cả truy
vấn chọn.
5.4.3 Đối tượng kiểu Recordset
™ Các phương thức của đối tượng kiểu Recordset
.Open : tương tự phương thức OpenRecordset của DAO, dùng để tạo RecordSet, thực
hiện kết nối (hiện hoặc ngầm). Cách sử dụng:
<Tên biến Recordset>.Open[<Nguồn>],[<Kết nối>],[<Kiểu con trỏ>],[<Kiểu
khóa>][,<Tuỳ chọn>]
Trong đó :
9 Nguồn: tên bảng, văn bản SQL hay tên biến kiểu Command.
9 Kết nối (ActiveConnection): Xác định kết nối của Recordset, là xâu kí tự như
kiểu dòng kết nối.
9 Kiểu con trỏ (CursorType): có thể nhận một trong các giá trị sau:

Giá trị Ý nghĩa


adOpenForwardOnly Con trỏ chỉ có thể di chuyển về phía trước, ngầm định.
adOpenKeyset Không nhìn thấy những thay đổi do người khác thực hiện, di
chuyển 2 chiều.
adOpenDynamic Quan sát được những thay đổi của những người dùng khác. Có
thể thêm, sửa, xóa. Có thể di chuyển hai chiều mà không cần lưu
giữ bookmark.

9 Kiểu khóa (LockType): chỉ định cách xử lí đối với những truy nhập của người
khác khi ta mở Recordset:

Giá trị Ý nghĩa


adLockReadOnly Không cập nhật được dữ liệu, ngầm định.
adLockPessimistic Khóa bản ghi khi người dùng sửa.
adLockOptimistic Khóa bản ghi khi sử dụng phương thức Update

Có thể không xác định các tham số chỉ kết nối, kiểu con trỏ và kiểu khóa mà gán
trực tiếp vào các thuộc tính ActiveConnection, CursorType và LockType.
9 Tùy chọn (Options): Cách thức mà hệ thống đánh giá tham số nguồn:

Giá trị Ý nghĩa


adCmdText Hệ thống coi nguồn là văn bản của một command
adCmdTable ADO sinh ra một truy vấn để trả về tất cả các dòng của một bảng có
tên chỉ bởi nguồn.
adCmdTableDirect Lấy toàn bộ các bản ghi trong bảng có tên chỉ bởi nguồn.
Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 59
Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

adCmdStoredProc Nguồn là thủ tục.


adCmdUnknown Kiểu của nguồn chưa xác định, ADO sẽ tự xác định lấy.
Các phương thức di chuyển con trỏ: giống Recordset của DAO
.MoveFirst | .MoveLast | .MoveNext | .MovePrevious

Tìm kiếm:
.Find: chuyển con trỏ đến bản ghi đầu thỏa mãn điều kiện (nếu có), đến cuối tệp EOF
(nếu không có).
Các phương thức: .AddNew, .Delete, .Edit, .Update, .Close giống như trong DAO.
™ Các thuộc tính của đối tượng kiểu Recordset
.ActiveConnetion, CursorType, LockType
.Filter: bộ lọc của recordset, có ích khi tìm kiếm với điều kiện phức tạp. Khi không
muốn lọc nữa, gán <tên biến Recordset>.Filter = adFilterNone.
Ví dụ: Viết thủ tục trên form cho phép tìm kiếm thông tin nhân viên theo điều kiện
And

Form trên gồm có các điều khiển sau:

Điều khiển Thuộc tính Giá trị của thuộc tính


Nhãn (Label) Name Label1
Caption Tìm kiếm thông tin nhân viên
Hộp liệt kê (ListBox) Name LstKetqua
RowSourceType Table/Query

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 60


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

RowSource để trống (sẽ gán trong chương trình)


Hộp văn bản (TextBox) Name Text0
Hộp văn bản Name Text2
Nút lệnh Name Command4
Caption Tìm
Nút lệnh Name Command5
Caption Thoát
Thủ tục click chuột của nút Command4:
Private Sub Command4_Click()
Dim cn As Connection
Dim rs As ADODB.Recordset
Dim tieuchuan As String
Dim dkhoten As String, dkma As String
Dim loc As String
Set cn = CurrentProject.Recordset
Set rs = New ADODB.Recordset
With rs
.CursorType = adOpenKeyset
.LockType = adLockOptimistic
.Open "nhan vien", cn, , , adCmdTable
End With
dkma = IIf(Not IsNull(Text0),"manv like '*" & Text0 & "*","")
dkhoten = IIf(Not IsNull(Text2),"hoten like '*" & Text2 & "*","")
tieuchuan = IIf(dkma<>"",dkma & IIf(dkhoten<>"","and","")& dkhoten,dkhoten)
rs.Filter = tieuchuan
If rs.EOF then
LstKetqua.RowSource = ""
LstKetqua.Requery
MsgBox "Khong co nhan vien nao thoa man"
Exit Sub
End If
rs.Close
cn.Close
loc = "select manv, hoten, luong, diachi from nhanvien where" & tieuchuan
LstKetqua.RowSource = loc

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 61


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

LstKetqua.requery
LstKetqua.Visible = True
End Sub

Thủ tục load Form:


Private Sub Form_Load
LstKetqua.Visible = False
End Sub
5.4.4 Đối tượng Command và Parameter
Giúp thực hiện truy vấn chọn, tham số, hành động.
™ Các thuộc tính của đối tượng Command:
.CommandText: văn bản SQL của Command.
.CommandType: Kiểu của đối tượng Command.
™ Các phương thức của đối tượng Command:
.Execute: thực hiện Command
Trả các bản ghi cho một Recordset:
Set <tên biến Recordset> = <tên biến Command>.Execute(<RecordsAffected>,
<Tham số>, <Tùy chọn>)
Chỉ thực hiện cập nhật CSDL:
<Tên biến Command>.Execute(<RecordsAffected>, <Tham số>, <Tùy chọn>)
Ví dụ:
Form đổi mã vật tư,dùng đối tượng dữ liệu ADO có kiểm soát

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 62


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

Thủ tục xử lí sự kiện của nút "Thay đổi":


Private Sub Command5_Click()
If IsNull(Text0) Then
MsgBox "Nhap vao ma vat tu can thay doi"
End If
If IsNull(Text2) Then
MsgBox "Nhap vao ma vat tu moi"
End If
Dim cn As Connetion, cm As Command
Dim str As String
Set cn = CurrentProject.Connection
Dim rs As New ADODB.Recordset
With rs
.ActiveConnection = cn
.CursorType = adOpenKeyset
.LockType = adLockOptimistic
.Open("select * from vattu where mavt = '"& Text0 &"'")
If .BOE And .EOF Then
MsgBox "Khong ton tai vat tu co ma" & Text0
Exit Sub
End If
End With
Set cm = New ADODB.Command
Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 63
Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

str = "parameters macu text(5), mamoi text(5);"


str = str & "update vattu set mavt = mamoi where mavt = macu"
With cm
.ActiveConnection = cn
.CommandText = str
.CommandType = adCmdText
End With
Dim pr1 As Parameter, pr2 As Parameter
Set pr1 = cm.CreateParameter("macu", adVarWChar, adParamInput, 5)
cm.ParametersAppend pr1
Set pr2 = cm.CreateParameter("mamoi", adVarWChar, adParamInput, 5)
cm.ParametersAppend pr2
pr1.Value = Text0
pr2.Value = Text2
cm.Execute
End Sub

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 64


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

Chương 6
Một số biện pháp an toàn và bảo mật trong Access
An toàn và bảo mật là điều rất quan trọng đối với các hệ quản trị cơ sở dữ liệu nói riêng
cũng như các hệ thống khác nói chung. Các cơ sở dữ liệu được tạo lập cho các xí nghiệp
thường có nhiều người quản lý, sử dụng. Ví dụ: có 1 hoặc 2 người tạo lập và quản lý cơ
sở dữ liệu, có vài người người cập nhật và truy vấn thông tin…Những người sử dụng này
không được phép thay đổi cấu trúc và thiết kế của cơ sở dữ liệu. Vì yếu tố quyết định
chất lượng của cơ sở dũ liệu là tính toàn vẹn về thông tin nên bảo vệ cơ sở dữ liệu là một
trong những vấn đề quan tâm hàng đầu.
Chương này sẽ trình bày một số những biện pháp đơn giản nhưng sẽ giúp ích được khá
nhiều cho chúng ta trong yêu cầu bảo vệ cơ sở dữ liệu chống lại sự truy nhập, sửa đổi hay
phá huỷ bất hợp pháp và không có căn cứ.
6.1 Không cho hiển thị thanh Menu và cửa sổ Database
Mục đích là để ngăn chặn không cho người khác xâm nhập vào các thành phần của
chương trình như bảng (table), truy vấn (query), mẫu biểu (form), báo biểu (report),
macro, đơn thể (module).
Khi ta không muốn cho người khác biết điều gì thì tốt nhất là đừng hiển thị nó, dù là ở
dạng vô hiệu hóa (làm mờ, disable)
Để làm mất thanh Menu của Access, chúng ta chỉ việc thiết kế một hệ Menu và cài vào
mẫu biểu chính như đã nói trước đây. Khi mở mẫu biểu chính, hệ Menu này sẽ thay thế
thanh Menu của Access.
Để làm mất của sổ Database, ta đưa câu lệnh sau vào thủ tục xử lý sự kiện On_Open của
mẫu biểu chính:
DoCmd.RunCommand acCmdWindowHide
Ngoài ra cần tạo macro AutoKeys để chặn bắt và làm vô hiệu hóa các phím mà Access
hay dùng để trở về cửa sổ Database và thanh Menu của Access. Các bước như sau:
Bước 1:
Tạo một macro có tên Autoexec tự động mở mẫu biểu chính của chương trình. Thiết kế
macro này như sau:
Action: OpenForm
Các tham số:
Form Name Tên mẫu biểu chính
View Form
FilterName
Where Condition
DataMode
WindowMode Normal
Nếu muốn cài mật khẩu thì cách làm như sau: Macro Autoexec sẽ mở mẫu biểu mật
khẩu. Mẫu biểu mật khẩu sẽ có một nút lệnh để kiểm tra mật khẩu, nếu đúng sẽ mở mẫu
biểu chính.
Bước 2:

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 65


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

Tạo macro Menu chính. Nếu chương trình không dùng giao diện Menu (chỉ dùng giao
diện nút lệnh), thì Menu chính là một menu rỗng, khi đó macro Menu chính được thiết kế
như sau:
Action: AddMenu
Các tham số:
Menu Name
Menu Macro Name Tên macro phụ
Status Bar Text
Macro phụ chỉ đưa vào cho đủ thủ tục, nó sẽ không gây ra bất kỳ hành động nào. Ta thiết
kế macro phụ như sau: Action: CancelEvent
Bước 3: Mẫu biểu chính
Khi thiết kế mẫu biểu chính cẩn sử dụng 2 thuộc tính Menu Bả và On Open của mẫu
biểu:
ƒ Đưa tên của macro Menu chính vào dòng thuộc tính Menu Bar:
Menu Bar: Tên macro Menu chính
ƒ Lập hàm xử lý sự kiện On Open của mẫu biểu chính như sau:
Private Sub Form_Open(Cancel As Integer)
DoCmd.RunCommand acCmdWindowHide
End Sub
Bước 4:
Tạo macro AutoKey để chặn bắt, làm vô hiệu hóa các phím mà Access hay dùng như:
F1 phím trợ giúp
F11 trở về cửa sổ Database
…. ……
Để làm vô hiệu hóa các phím F1, F2, F3 và các tổ hợp phím Ctrl + F1, Shift + Insert, ta
tạo macro Autokeys với nội dung như sau:
Macro Name Action Comment
{F1} CancelEvent
{F2} CancelEvent
{F3} CancelEvent
^{F1} CancelEvent
+{INSERT} CancelEvent
Cách viết các phím và tổ hợp phím trong cột Macro Name như sau:
Phím hoặc tổ hợp phím Ví dụ cách viết
Ctrl + phím chữ hoặc phím số ^A hoặc ^4
Phím chức năng bất kỳ {F1}
Ctrl + phím chức năng bất kỳ ^{F1}
Shift + phím chức năng bất kỳ +{F1}
Insert {Insert}
Ctrl + Insert ^{Insert}
Shift + Insert +{Insert}
Ctrl + Delete ^{Delete} hoặc ^{Del}
Shift + Delete +{Delete} hoặc +{Del}

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 66


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

6.2 Đặt mật khẩu bằng chức năng của Access


6.2.1 Cài mật khẩu
Lần lượt thực hiện như sau:
ƒ Mở CSDL trong chế độ Exclusive: chọn menu File, mục Open Database, hộp
thoại Open sẽ mở ra. Đánh dấu mục Exclusive, sau đó chọn cơ sở dữ liệu (tệp
.mdb) cần mở và nhấn nút Open.
ƒ Chọn menu Tools, mục Security, mục Set Database Password. Hộp thoại Set
Database Password mở ra.
ƒ Trong hộp thoại này, ta gõ mật khẩu vào các ô Password và Verify, sau đó nhấn
OK. Chú ý phân biệt chữ hoa và chữ thường.
6.2.2 Gỡ bỏ mật khẩu
ƒ Phải nhớ mật khẩu để mở cơ sở dữ liệu.
ƒ Trong cửa sổ Database chọn menu Tools, chọn mục Security, mục Unset
Database Password. Hộp thoại Unset Database Password mở ra.
ƒ Gõ mật khẩu đã cài đặt vào ô Password và nhấn OK. Như vậy mật khẩu đã được
gỡ bỏ.
Chú ý: Khi ta mở một cơ sở dữ liệu mà chọn mục Exclusive thì ta đã khóa cơ sở dữ liệu
đó đối với tất cả những người sử dụng khác trong suốt thời gian mở nó. Mục lựa chọn
này rất hữu ích cho những máy tính nối mạng nhưng nó lại không quan trọng đối với
người sử dụng máy tính riêng lẻ.
6.2.3 Bảo an cho cơ sở dữ liệu có nhiều người sử dụng
Bảo an trong Access là một công việc phức tạp, dựa trên một hệ thống của các nhóm
(group) bao gồm tài khoản của người sử dụng (account) được bảo vệ bằng mật khẩu
(password). Theo ngầm định, Access tạo 2 nhóm Admins (nhiều quyền hạn) và Users (ít
quyền hạn hơn). Khi chúng ta bắt đầu sử dụng Access, chương trình cho rằng chúng ta là
Admin và cho chúng ta đăng nhập vào mà không đòi hỏi password. Ngầm định, Admin
được gán cho cả 2 nhóm Admins và Users, không hạn chế quyền cho tới khi cơ sở dữ liệu
này được bảo vệ. Quy trình mà chúng ta phải đi qua là:
ƒ Sử dụng tính năng Workgroup Administrator để tạo một tập tin chứa các thông tin
về nhóm làm việc. Tập tin này sẽ nhận diện các nhóm cùng thành viên của chúng.
ƒ Bổ sung một người sử dụng mới cho nhóm Admins.
ƒ Xóa người sử dụng Admin ra khỏi nhóm Admins. Admin bây giờ chỉ còn là thành
viên của nhóm Users, sau đó, gán một password cho người sử dụng Admin.
ƒ Mở lại Access trong tư cách người sử dụng mới.
ƒ Tạo một cơ sở dữ liệu mới và xóa đi tất cả quyền hạn của nhóm Users đối với
từng loại đối tượng trong cơ sở dữ liệu này.
ƒ Nhập các đối tượng từ cơ sở dữ liệu gốc vào cơ sở dữ liệu mới.
ƒ Tạo các nhóm và những người sử dụng mới nếu cần thiết, gán cho nhóm và
những người sử dụng khác những quyền hạn xác định nhằm mục đích hạn chế khả
năng hoạt động của họ.
Chú ý: Tập tin chứa thông tin về nhóm làm việc, các nhóm, các tài khoản người sử dụng
hoạt động ở cấp chương trình chứ không phải cấp cơ sở dữ liệu.
a) Tạo nhóm làm việc an toàn (Secure Workgroup)
b) Tạo tài khoản người sử dụng

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 67


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

c) Tạo một cơ sở dữ liệu an toàn


d) Tạo nhóm làm việc mới

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 68


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội
Bài giảng Lập trình trong Access

Tài liệu tham khảo

[1] Ths. Nguyễn Thị Thu Hương, bài giảng "Hệ quản trị cơ sở dữ liệu", khoa CNTT,
ĐH Bách Khoa Hà Nội.
[2] GS. Phạm Văn Ất, 2002, Kỹ thuật lập trình Access trên Window, NXB Hà Nội.
[3] TS. Dương Kiều Hoa, 2003, Tự học Access 2000 trong 10 tiếng đồng hồ, NXB
Thanh niên.

Nguyễn Hồng Phương - Email: phuongnh@it-hut.edu.vn 69


Khoa Công nghệ thông tin - ĐH Bách Khoa Hà Nội

You might also like