DAO (Data Access Objects – Các đối tượng truy xuất dữ liệu) là tập hợp bao gồm lớp các đối tượng có thể dùng để lập trình truy cập và xử lý dữ liệu trong các hệ CSDL. Ở đây CSDL Access, ngôn ngữ lập trình VBA.
3.7.2 Để nạp thư viện DAO3.6
Bước 1: Chọn nút trên thanh công cụ để chuyển sang cửa sổ mã lệnh
Bước 2: Chọn menu Tools / References
Bước 3: Chọn mục Microsoft DAO 3.6 Object Libraly, nhấn nút OK để hoàn tất.
55
3.7.3 Ví dụ
Tạo bảng NHAN_VIEN trong Table gồm các thuộc tính như trên Form. Tạo Form theo mẫu.
1. List Danh Sách
- Dùng để chứa Mã NV (Khi nhấn nút Xuất lên list)
- Khi chọn một Mã NV trong list, thông tin của nhân viên tương ứng được hiển thị sang các ô Textbox, nhưng các ô Textbõ sẽ bị khóa lại, chỉ để người dùng xem thông tin.
2. Nút Thêm Mới: dùng để xóa các ô Textbox để người dùng nhập dữ liệu mới.
3. Nút lưu
- Lưu dữ liệu mới nếu MaNV chưa tồn tại (Thêm mới) - Lưu dữ liệu sửa đổi khi MaNV đã tồn tại (Sửa)
- Các hành động cần có thông báo, nếu người dùng đồng ý mới thực hiện 4. Nút xóa dùng xóa thông tin nhân viên đang hiển thị, yêu cầu thông báo trước khi xóa. Nếu đồng ý thì xóa.
3.7.3.1 Kết nối CSDL mở bảng NHANVIEN Private Sub Form_Load()
Set db = CurrentDb()
Set rc = db.OpenRecordset("NHAN_VIEN") End Sub
3.7.3.2 Nút xuất lên list
Private Sub Command19_Click()
list_ds.RowSource = "" ‘ xóa dữ liệu trong điều khiển
rc.MoveFirst ‘di chuyển tới dòng đầu
Do While Not rc.EOF ‘duyệt qua các dòng
56 rc.MoveNext ‘ di chuyển đến dòng tiếp theo
Loop End Sub
3.7.3.3 Sự kiện Click của List Private Sub list_ds_Click() Dim vitri As Integer
vitri = list_ds.ListIndex ‘lấy vị trí con trỏ
rc.MoveFirst
Do While Not rc.EOF
If rc.Fields("MaNV") = list_ds.ItemData(vitri) Then
txt_manv = rc.Fields("MaNV") ‘kiểm tra MaNV chọn có tồn tại
txt_hoten = rc.Fields("HoTen") ‘trong bảng không
txt_ngaysinh = rc.Fields("NgaySinh") ‘nếu có thì xuất dữ liệu dòng tìm GioiTinh = rc.Fields("GioiTinh") ‘được lên các Textbox
Exit Do End If rc.MoveNext Loop End Sub 3.7.3.4 Nút thêm mới
Private Sub Command20_Click()
txt_manv = "" ‘xóa các Textbox
txt_manv.SetFocus ‘đưa con trỏ về Textbox MaNV
txt_hoten = "" txt_ngaysinh = "" End Sub
3.7.3.5 Nút xóa
Private Sub Command21_Click() rc.MoveFirst
Do While Not rc.EOF
If rc.Fields("MaNV") = txt_manv Then
If MsgBox("Ban co muon xoa khong?", vbYesNo, "Thong bao") = vbYes Then rc.Delete rc.MoveNext End If Exit Do End If rc.MoveNext Loop End Sub
‘kiểm tra MaNV chọn có tồn tại trong bảng không ‘nếu có sẽ hỏi xem người dùng có muốn xóa không ‘nếu có cho xóa, nếu không thì bỏ qua
57 3.7.3.6 Nút lưu
Private Sub Command16_Click() Dim kt As Integer
‘giả sử khi kt =0 có nghĩa là chưa tồn tại MaNV ‘lưu khi sửa dữ liệu
kt = 0
If (IsNull(txt_manv) Or IsNull(txt_hoten) Or IsNull(txt_ngaysinh)) Then MsgBox "Yeu cau nhap du thong tin", vbDefaultButton1, " Thong bao" Else
rc.MoveFirst
Do While rc.EOF = False
If rc.Fields("MaNV") = txt_manv Then
If (MsgBox("MaNV nay da ton tai, Ban co muon sua du lieu khong", vbOKCancel, "Thong bao") = vbOK) Then
rc.Edit rc.Fields("HoTen") = txt_hoten rc.Fields("NgaySinh") = txt_ngaysinh rc.Fields("GioiTinh") = GioiTinh rc.Update End If kt = 1 Exit Do End If rc.MoveNext Loop
‘ lưu khi thêm mới
If kt = 0 Then
If (MsgBox("Ban co muon luu du lieu khong?", vbOKCancel, "Thong bao") = vbOK) Then rc.AddNew rc.Fields("MaNV") = txt_manv rc.Fields("HoTen") = txt_hoten rc.Fields("NgaySinh") = txt_ngaysinh rc.Fields("GioiTinh") = GioiTinh rc.Update End If End If End If 3.8 Bài tập CSDL Hàng Hóa
58 1. Tạo query thống kê thông tin khách hàng mua trong tháng 2 năm 2007
2. Tạo query thống kê thông tin các mặt hàng hiện có ở công ty 3. Tạo query tìm kiếm thông tin khách hàng có tên là Tiến
4. Tạo query hiển thị chi tiết thông tin từng mặt hàng bán: biết thanhtien = soluong * dongia
5. Tạo query tính tổng tiền phải trả cho từng khách hàng gồm: tên khách, địa chỉ, tên hàng, số lượng, tổng tiền, khuyến mãi, thuế, phí giao hàng, tổng tiền phụ thu, tổng tiền phải trả.
a. Tổng tiền = Số lượng * đơn giá
b. Khuyến mãi: nếu ngày mua trùng ngày 2/9 (ngày thành lập công ty) sẽ được giảm 5% Tổng tiền
c. Thuế = 10% Tổng tiền d. Phí giao hàng:
i. Nếu tổng tiền dưới 1.000.000 đ thì phí 10% Tổng tiền
ii. Nếu tổng tiền từ1.000.000 đ đến 5.000.000thì phí 5% Tổng tiền iii. Nếu tổng tiền dưới 5.000.000 đến 10.000.000 đ thì phí 2% Tổng
tiền
iv. Ngược lại là miễm phí
e. Tổng tiền phụ thu = thuế + phí giao hàng
f. Tổng tiền phải trả = tổng tiền – khuyến mãi + tổng tiền phụ thu. 6. Tạo query tìm kiếm khách hàng gồm tên khách hàng, địa chỉ, email (với tên
khách hàng người dùng tự nhập)
7. Tạo query tìm kiếm các hóa đơn bán trong ngày. Với ngày do người dùng nhập 8. Tạo query tìm kiếm hàng hóa gồm tên hàng, đơn vị tính, đơn giá. Với tên hàng
59 9. Tạo query thống kê các hóa đơn được xuất trong khoảng thời gian mà người
dùng nhập vào.
10.Tạo query tìm kiếm hàng hóa theo giá tiền do người dùng nhập vào giá tiền 11.Tạo query đưa ra thông tin của mặt hàng có giá cả cao nhất
12.Thống kê tạo danh sách gồm: tên khách hàng, địa chỉ, số lần mua hàng 13.Tạo query đưa ra bảng tổng hợp tổng tiền bán được từng ngày của cửa hàng
như sau:
14.Tạo query đưa ra bảng tổng hợp tổng số lượng bán và tổng tiền đã bán ra của từng loại mặt hàng như sau:
15.Tạo query kiểm tra thông tin mặt hàng có ít người mua nhất 16.Tạo query đưa ra thông tin của mặt hàng bán chạy nhất 17.Tạo bảng tính tổng tiền từng hoá đơn bán hàng như sau:
18.Tạo query kiểm tra thông tin khách hàng có tổng tiền mua là ít nhất
19.Tạo query tìm kiếm khách hàng tham gia mua hàng sớm nhất gồm thông tin đầy đủ của khách hàng (có ngày mua trong hóa đơn là sớm nhất)
60 21.Lập bảng tổng hợp số lượng mua từng mặt hàng của các khách hàng như sau:
CSDL Vật tư
1. Tạo các câu Query thực hiện chức năng. Tổng số lần Nhập hàng.
Tổng số lần Xuất hàng.
Tổng số lần Nhập hàng và Xuất hàng.
Tổng số lần Nhập hàng và Xuất hàng ở từng Sơ Sở ( có 3 Cơ Sở)
Tính tổng số số lượng, số lượng nhiều nhất., số lượng ít nhất trên từng nhóm vật tư theo từng loại Nhập hoặc Xuất.
Tìm số lượng hàng Xuất lớn nhất của vật tư có kí hiệu đầu là “U” tại Cơ Sở 1.
Tìm số lường hàng Nhập ít nhất của vật tư có ký hiệu đầu là “U” hoặc “L” tại Cơ Sở 2 trong 2 năm 2005 và 2006.
2. Tạo các Query khai thác dữ liệu từ Table [NHAP XUAT], yêu cầu thực hiện như sau:
Cho ra danh sách các khách hàng mua hàng trong tháng 3/2005 tại Cơ sở 1. Tên chiết xuất là [Ngay], [Khach hang], [Co so], [Vat tu], [So luong] thay vì sử dụng chính tên các tập tin của bảng nguồn. Lưu Query tên: [KHACH HANG 305].
Cho ra danh sách các khách hàng mua mặt hàng có 3 ký tự đầu là “USB” với số lường >=10 hoặc Khách hàng mua mặt hàng có 2 ký tự đầu là “HD” với số lượng >=3. Khi thi hành Query tên chiết xuất các trường là: [Ten Khach Hang], [Vat Tu], [So Luong]. Lưu Query tên: [KHACH HANG USBHD].
61 Cho ra danh sách khách hàng cung cấp hàng từ năm 2008 về trước hoặc những khách hàng cung cấp kể từ ngày hiện tại ( dùng hàm Date() để lấy ngày giờ hiện tại trên hệ thống) về trước 30 ngày. Khi thi hành Query , vùng tin [HTEN] chiết xuất thành [NHA CUNG CAP]. Lưu tên Query là: [NHA CUNG CAP 2008].
3. Thêm mẩu tin ( WEBC, Webcam,cai,12.000.00) vào bảng DANHMUCVATTU.
4. Chọn Object Query, sau đó tạo 1 Query mới (Crosstab Query) mang tên: THONG KE NHAP XUAT VAT TU, với yêu cầu thực hiện việc thống kê tổng số lượng từng loại vật tư nhập – xuất ở từng Cơ sở như mẫu dưới:
5. Thực hiện Query mới mang tên [DOANH THU] . Trong đó sử dụng 2 Tabl nguồn là: [DANH MUC VAT TU] và [NHAP XUAT], thực hiện lần lượt các yêu cầu sau:
Các Field [MAVT], [LOAI], [NGAY], [SOLG], [DON_GIA] lấy từ các bảng nguồn.
Thêm vùng tin DONGIABAN = DON_GIA +(5% x DON_GIA). Thêm vùng tin THTIEN = DONGGIABAN*SOLG.
Thêm vùng tin THUE được tính: Nếu THTIEN <=2.000.000 thì tính 5% THTIEN. Ngược lại tính 10% THTIEN.
Thêm vùng tin THUCTHU = THTIEN – THUE.
Lưu ý: Việc tính DONGIABAN VA THTIEN chỉ tính cho những mẩu tin có vùng LOAI =”X” ( chỉ tính cho hàng bán). Vùng tin [LOAI] chỉ đưa vào QUERY để đặt điều kiện chứ không cho hiển thị khi thi hành Query.
CSDL nhân viên
Sử dụng ngôn ngữ lập trình VBA thực hiện viết lệnh cho các nút trên Form thực hiện các chức năng sau:
62 1. Tạo Form để cập nhật thông tin cho từng bảng trong CSDL (5 Form)
a. Yêu cầu có kiểm tra dữ liệu người dùng nhập trước khi thêm vào bảng b. Trước khi thực hiện các yêu cầu của người dùng cần có Msgbox xác
nhận yêu cầu.
2. Tạo Form thống kê số ngày nghỉ của nhân viên theo từng lý do, tính lương cho nhân viên.
3. Tạo Form thống kê số giờ tăng ca theo từng ca, tính tiền tăng ca cho nhân viên.
63
Tài liệu tham khảo
1. Giáo trình Microsoft Access 2007 (Ebook) của Lớp k47ĐH CNTT thuộc Đại học Nông Lâm. (Ngày truy cập: 12/06/2010)
http://tailieu.vn/xem-tai-lieu/giao-trinh-access-2007.177264.html 2. Hướng dẫn thực hàng Microsoft Access. Mai Liên Khương (Ebook)
(Ngày truy cập: 15/05/2010)
http://vi.scribd.com/doc/14578971/Giao-trinh-Access 3. Giáo trình Access 2000 (Ebook) của Nguyễn Sơn Hải.
(Ngày truy cập: 16/06/2010)
http://tailieu.vn/xem-tai-lieu/giao-trinh-microsoft-access- 2000.1209915.html
4. Giáo trình Access (Ebook) của Nguyễn Anh Khoa. Trung tâm tin học 14 Bà Triệu Hà Nội.
(Ngày truy cập: 12/06/2010) http://daytinhoc.edu.vn
5. Giáo trình Lập trình trực quan (Ebook) của Võ Trung Hùng, Đại học bách khoa Đà Nẵng
(Ngày truy cập: 09/01/2010)
http://www.ebook.edu.vn/?page=1.39&view=19564
6. Tự học Microsoft Access 2010 (Ebook), Đỗ Trọng Danh-Nguyễn Vũ Ngọc Tùng, Nhà xuất bản Đại học sư phạm.
(Ngày truy cập: 10/06/2010)
http://tailieu.vn/xem-tai-lieu/giao-trinh-microsoft-access-2010-ths-do- trong-danh-ths-nguyen-vu-ngoc-tung.1228005.html