I. Phần Tạo Cơ Sở Dữ Liệu
Thiết lập mối quan hệ
+ Dùng chuột chọn các khóa từ table có quan hệ 1 kéo sang table có quan hệ nhiều.
+ Nếu giữa 2 table có liên kết chung từ 2 khóa trở lên thì chọn tất cả các khóa đó luôn 1 lần rồi drag chuột kéo từ
table có quan hệ 1 sang table có quan hệ nhiều.
Nhập dữ liệu:
+ Table có quan hệ 1 nhập dữ liệu trước, table có quan hệ nhiều nhập dữ liệu sau.
+ Nhập 2 biên trái + phải từ ngoài vào trong theo mô hình sắp xếp sau đây:
II. PhầnThiết kế Form
FORM NHẬP DỮ LIỆU
I. Phần Thiết kế giao diện
Thiết kế Form Main-Sub
A. Thiết kế cơ bản bằng chức năng form Wizard :
1. Form Main: chọn Table có quan hệ 1 và Form Sub: chọn Table có quan hệ nhiều
2. Giữa Form Main và Form Sub phải có trường chung.
3. Xem thuộc tính liên kết của SubForm/SubReport có trường liên kết chung là: Sodonhang
+ Link Child Fields: Sodonhang
+ Link Master Fields: Sodonhang
B1: Chọn thành phần Forms\ New\ Form Wizard
B2: Chọn Table làm nguồn cho Form Main (chọn Table có quan hệ 1)
Chọn các trường hiển thị trên Form Main.
B3: Chọn Table làm nguồn cho Form Sub (chọn Table có quan hệ nhiều)
Chọn các trường hiển thị trên Form Sub.
B4: Chọn dạng thể hiện (Để mặc định, nhấn Next)
Chọn kiểu trình bày cho Form-Sub (Để mặc định là DataSheet)
Chọn dạng hiển thị cho Form Main-Sub (mỗi lệnh thể hiện 1 dạng)
B5: Đặt tên: Form (Tên của form Main), Subform (Tên của form Sub)
B. Thiết kế hoàn chỉnh Form Main-Sub .
B1: Chọn Form Main-Sub ở chế độ Design
B2: Bổ sung thêm các trường khác cho Form Main, chọn thuộc tính Record Source
B3: Bổ sung thêm các trường khác cho Form Sub:
+ Chọn Form Sub
+ Chọn lệnh View\ SubForm In New Window
+ Chọn thuộc tính Record Source
B4: Tạo các Text Box tính toán ở vùng Form Footer của Form Sub, Name: Đặt tên cho TextBox, Control
Source: Nhập công thức tính toán.
1. Thiết kế bảng
2. Thiết lập mối quan hệ giữa các bảng
3. Nhập dữ liệu vào bảng
B5: Thực hiện truyền các kết quả tính toán từ Text Box tính toán ở vùng Form Footer của Form Sub sang Form
Main. Công thức tham chiếu:
=Tên của SubForm/SubReport. Form!Tên của Text Box chứa kết quả đã tính toán
B6: Chuyển các TextBox ở Form Main và Form Sub sang Combo Box.
+ Click phải chuột vào TextBox cần chuyển, chọn lệnh Change to\ Combo Box
+ Chọn nguồn cho Combo Box, chọn thuộc tính Row Source, chọn Table làm nguồn (chọn Table có
quan hệ 1)
B7: Tạo các nút di chuyển và nút điều khiển: Tới, Lui, Thêm, Sửa, Xóa, In, Ghi, Không ghi :
+ Tắt chức năng Control Wizard, dùng chuột drag tạo trên vùng của Form Main
+ Đặt tên cho từng nút tại thuộc tính Name: CmdToi, CmdLui, CmdThem, CmdSua, CmdXoa, CmdIn,
CmdGhi, CmdKhongGhi.
Thiết kế Form Tab-Control
B1: Thiết kế cơ bản và hoàn chỉnh Form Main-Sub (Xem lại phần thiết kế Form Main-Sub)
B2: Tạo Tab Control:
+ Click chuột vào công cụ Tab-Control, drag chuột tạo các Tab-Control trên vùng Detail của Form
Main-Sub
+ Đặt tên hiển thị cho các Tab-Control, Gõ tên vào thuộc tính Caption
+ Thêm các Tab-Control, click phải chuột vào Tab-Control, chọn lệnh Insert Page.
+ Xóa các Tab-Control, click phải chuột vào Tab-Control, chọn lệnh Delete Page.
B3: Cắt dữ liệu trên phần Form Main vào 1 Tab-Control
Dữ liệu phần Form Sub để ngoài Tab-Control hoặc cắt vào Tab-Control khác tùy theo yêu cầu bài.
Các bước tiếp theo: Bổ sung thêm các trường khác cho Form Main, Form Sub - Tạo các Text Box tính toán ở
vùng Form Footer của Form Sub - Truyền các kết quả tính toán từ Text Box tính toán ở vùng Form Footer của
Form Sub sang Form Main … : đều thực hiện giống ở phần Thiết kế Form Main-Sub
Tạo liên kết
Tạo liên kết giữa List Box với Form-Sub và giữa 2 Tab Control (List Box với Form-Main)
1. Viết Code vào biến cố On Current của Form Tab-Control
ListDH = Sodonhang
2. Viết Code vào biến cố On Click của List Box
Sodonhang.SetFocus
DoCmd.FindRecord ListDH
ListDH.SetFocus
Thiết kế Report
A. Thiết kế cơ bản bằng chức năng Report Wizard:
B1: Chọn thành phần Reports\ New\ Report Wizard
B2: Chọn Table làm nguồn cho Phân nhóm chính (chọn Table có quan hệ 1)
Chọn các trường hiển thị trên Phân nhóm chính.
B3: Chọn Table làm nguồn cho Phân nhóm phụ (chọn Table có quan hệ nhiều)
Chọn các trường hiển thị trên Phân nhóm phụ.
B4: Chọn dạng thể hiện (Để mặc định, nhấn Next)
Chọn trường làm phân nhóm (Để mặc định, nhấn Next)
Chọn trường cần sắp xếp (Để mặc định, nhấn Next)
Chọn dạng trình bày cho bản báo cáo, chọn dạng OutLine
B5: Đặt tên cho Report.
B. Thiết kế hoàn chỉnh Report.
B1: Chọn Report ở chế độ Design.
B2: Bổ sung thêm các trường khác cho Report, chọn thuộc tính Record Source
(Chú ý: Trong Report: Nguồn dữ liệu cho Phân nhóm chính và Phân nhóm phụ chung. Ngược lại trong Form
Main – Sub, nguồn dữ liệu Form Main riêng và Form Sub riêng.)
B3: Tạo TextBox Số thứ tự, chọn thuộc tính Control Source: = 1, Running Sum: Over Group
B4: Tạo các Text Box thống kê
+ Ở cuối của mỗi phân nhóm: Hiện vùng Footer của phân nhóm: click chuột vào biểu tượng Sorting and
Grouping hoặc click phải chuột vào Report chọn lệnh Sorting and Grouping, chọn Group Footer: Yes. Tạo
text Box và lập công thức
+ Ở cuối của bản báo cáo: Tạo text Box và lập công thức ở vùng Report Footer.
II, Phần Lập trình:
1. Khóa dữ liệu khi mở Form: Viết Code vào biến cố On Load của Form Main-Sub hoặc Form Tab-Control
+ Gọi tên của tất cả Text Box chứa các trường hiển thị trên Form Main và Tên của SubForm/SubReport
+ Làm mờ 2 nút Lưu và Không
Private Sub Form_Load()
Sodonhang.Locked = True 'Khoa du lieu lai,Sodonhang'
Ngay.Locked = True 'Khoa du lieu lai, Ngay'
KhachhangID.Locked = True 'Khoa du lieu lai:'
Tenkhachhang.Locked = True 'Khoa du lieu lai'
FrmDonhangchitiet.Locked = True 'Khoa du lieu lai'
CmdLuuFrmNhap.Enabled = False 'Nut Luu mo di'
CmdKhongFrmNhap.Enabled = False 'Nut Khong Luu mo di'
End Sub
2. Các nút di chuyển (hiện thông báo và mờ đi khi đang ở đầu và cuối bảng): Viết Code vào biến cố On Click
của Các nút di chuyển
Private Sub cmdfirst_Click()
If CurrentRecord = 1 Then
MsgBox "Ban dang o mau tin dau.Khong di chuyen duoc nua", vbCritical + vbOKOnly, "thong bao"
Sodonhang.SetFocus
cmdtruoc.Enabled = False
cmdfirst.Enabled = False
Else
DoCmd.GoToRecord , , acFirst
Sodonhang.SetFocus
cmdnext.Enabled = True
cmdlast.Enabled = True
End If
End Sub
Private Sub cmdtruoc_Click()
If CurrentRecord = 1 Then 'Kiem tra xem con tro co dang o mau tin dau hay khong'
MsgBox "Ban dang o mau tin dau.Khong di chuyen duoc nua", vbCritical + vbOKOnly, "thong bao"
Sodonhang.SetFocus 'Truoc khi cho nut CmdTruoc mo di phai tra con tro ve Sodonhang'
cmdtruoc.Enabled = False 'Cho nut Lui ve truoc mo di'
cmdfirst.Enabled = False 'Cho nut CmdVe dau mo di'
Else
DoCmd.GoToRecord , , acPrevious 'Thuc hien lui con tro ve dong truoc'
Sodonhang.SetFocus
cmdnext.Enabled = True 'Cho nut toi dong ke tiep sang len'
cmdlast.Enabled = True 'Cho nut Ve cuoi sang len'
End If
End Sub
Private Sub cmdlast_Click()
If CurrentRecord = DCount("*", "donhang") Then
MsgBox "Ban dang o mau tin cuoi.khong di chuyen duoc nua", vbCritical + vbOKOnly, "thong bao"
Sodonhang.SetFocus
cmdnext.Enabled = False
cmdlast.Enabled = False
Else
DoCmd.GoToRecord , , acLast
Sodonhang.SetFocus
cmdtruoc.Enabled = True
cmdfirst.Enabled = True
End If
End Sub
Private Sub cmdnext_Click()
If CurrentRecord = DCount("*", "donhang") Then
MsgBox "Ban dang o mau tin cuoi.khong di chuyen duoc nua", vbCritical + vbOKOnly, "thong bao"
Sodonhang.SetFocus
cmdnext.Enabled = False
cmdlast.Enabled = False
Else
DoCmd.GoToRecord , , acNext
Sodonhang.SetFocus
cmdtruoc.Enabled = True
cmdfirst.Enabled = True
End If
End Sub
3. Nút thêm: Cập nhật dữ liệu trên cả 2 form Main và Sub. Các nút Lưu và Không lưu sáng lên. Các nút
thêm, sửa, xóa, in và di chuyển mờ đi: Viết Code vào biến cố On Click của nút thêm
Private Sub cmdThem_Click()
If MsgBox("Ban co muon them mau tin moi?", vbInformation + vbYesNo, "Chu y") = vbNo Then
Cancel = True
Else
DoCmd.GoToRecord , , acNewRec
Sodonhang.SetFocus
Sodonhang.Locked = False 'Mo khoa du lieu: Sodonhang'
Ngay.Locked = False 'Mo khoa du lieu: Ngay'
Ngay.Value = Date 'Cap nhat Ngay = Ngay hien hanh'
KhachhangID.Locked = False 'Mo khoa du lieu: KhachhangID'
Tenkhachhang.Locked = False 'Mo khoa du lieu: Tenkhachhang'
FrmDonhangchitiet.Locked = False 'Mo khoa du lieu cua SubForm/SubReport ten la: FrmDonhangchitiet'
CmdLuuFrmNhap.Enabled = True 'Nut Luu sang len'
CmdKhongFrmNhap.Enabled = True 'Nut KhongLuu sang len'
cmdfirst.Enabled = False 'Nut VeDau mo di'
cmdlast.Enabled = False 'Nut Ve Cuoi mo di'
cmdnext.Enabled = False 'Nut Toi mo di'
cmdtruoc.Enabled = False 'Nut Nut Lui mo di'
CmdInFrmNhap.Enabled = False 'Nut In mo di'
cmddelete.Enabled = False 'Nut Xoa mo di'
CmdSuaFrmNhap.Enabled = False 'Nut Sua mo di'
cmdexit.Enabled = False 'Nut Thoay mo di'
Sodonhang.SetFocus 'Tra con tro ve Sodonhang'
cmdThem.Enabled = False 'Nut Them mo di'
End If
End Sub
4. Nút Sửa: Sửa dữ liệu trên cả 2 form Main và Sub. Các nút Lưu và Không lưu sáng lên. Các nút thêm, sửa,
xóa, in và di chuyển mờ đi: Viết Code vào biến cố On Click của nút Sửa
Private Sub CmdSua_Click()
If MsgBox("Ban co muon sua du lieu khong", vbInformation + vbYesNo, "Chu y") = vbNo Then
Cancel = True
Else
Sodonhang.SetFocus
Sodonhang.Locked = False 'Mo khoa du lieu: Sodonhang'
Ngay.Locked = False 'Mo khoa du lieu: Ngay'
Ngay.Value = Date 'Cap nhat Ngay = Ngay hien hanh'
KhachhangID.Locked = False 'Mo khoa du lieu: KhachhangID'
Tenkhachhang.Locked = False 'Mo khoa du lieu: Tenkhachhang'
FrmDonhangchitiet.Locked = False 'Mo khoa du lieu cua SubForm/SubReport ten la: FrmDonhangchitiet'
CmdLuu.Enabled = True 'Nut Luu sang len'
Cmdkhong.Enabled = True 'Nut KhongLuu sang len'
cmdfirst.Enabled = False 'Nut VeDau mo di'
cmdlast.Enabled = False 'Nut Ve Cuoi mo di'
cmdnext.Enabled = False 'Nut Toi mo di'
cmdtruoc.Enabled = False 'Nut Nut Lui mo di'
CmdIn.Enabled = False 'Nut In mo di'
cmddelete.Enabled = False 'Nut Xoa mo di'
cmdaddnew.Enabled = False 'Nut Them mo di'
cmdexit.Enabled = False 'Nut Thoay mo di'
Sodonhang.SetFocus 'Tra con tro ve Sodonhang'
CmdSua.Enabled = False 'Nut Sua mo di'
End If
End Sub
5. Nút In Báo Cáo: In dữ liệu đúng Số đơn hàng hiện hành trên Form Main: Viết Code vào biến cố On Click
của nút In
Private Sub CmdIn_Click()
DoCmd.OpenReport "RptDonhangchitiet", acViewPreview, [Sodonhang], "Sodonhang=forms!
FrmNhapdonhang!Sodonhang"
End Sub
6. Kiểm tra lỗi khi nhập dữ liệu vào bằng nút thêm
a. Kiểm tra lỗi dữ liệu nhập vào Số đơn hàng có”trùng” và “rỗng” hay không: Viết Code vào biến cố
BeforeUpdate của TextBox Số đơn hàng trên Form Main
Private Sub Sodonhang_BeforeUpdate(Cancel As Integer)
If DCount("*", "Donhang", "Sodonhang = Forms!FrmNhapdonhang!Sodonhang") > 0 Then
MsgBox "Trung So Don Hang, nhaplai", vbCritical
Cancel = True
Exit Sub
End If
If IsNull(Sodonhang) Then 'kiem tra rong khoa chinh
MsgBox "Khong duoc de trong So don hang,nhaplai", vbCritical
Cancel = True
End If
End Sub
b. Kiểm tra lỗi dữ liệu nhập vào Combo Mã khách hàng trên Form Main (Combo Box chỉ cho phép
chọn các giá trị trong Combo này. Nếu nhập vào các giá trị không có trong Combo thì sẽ hiện thông báo lỗi)