Phần ứng dụng Visual Basic vào AccessThiết Kế FORM: Khi thiết kế Form chúng ta nên sử dụng chức năng Design View của form B1: FormNewDesign View OK B2: Vào thuộc tính của form Dat
Trang 1Phần ứng dụng Visual Basic vào Access
Thiết Kế FORM:
Khi thiết kế Form chúng ta nên sử dụng
chức năng Design View của form
B1: FormNewDesign View OK
B2: Vào thuộc tính của form Data
Control SourceChọn dấu …lấy nguồn dữ
liệu cho form
B3: Thiết kế form (giống phần căn bản)
B4: Tạo các đối tượng trên form bằng chức
năng tự thiết kế
B5: Viết các câu lệnh cho các sự kiện
Thuộc Tính Chung Của Form
Default View: chế độ hiển thị
của
Form
đơn (tạo Main
form )
dùng tạo Subform
Scroll Bars: Thanh cuộn trn
Form
thị thanh cuộn
dọc
Cuộn ngang
Navigation Button: Yes/No
cho hay không hiển thị thanh di chuyển mẩu tin
Picture Type: chọn hình nền
hiển thị trên Form
Data:
Control source: Nguồn dữ
liệu cho Form ( Field List) ( Ta có thể
click biểu tượng …mở cửa sổ
SQL_Staterment để chọn nguồn dữ liệu
cho Form khi tạo sub
Allow Edits: Yes/No
Cho/Không sửa dữ liệu trên form
Allow Deletions: Yes/ No->
Cho/ Không Xóa mẩu tin
Allow Additions: Yes/ No ->
Cho/ Không thêm mẩu tin mới
All
Caption: Tiêu đề của Form Dividing lines: Đường qua các phân vùng Navigation Buttons: Thanh chỉ mẩu tin Record seletors: Chức năng chỉ mẩu tin Record locks: Khoa mẩu tin trên form Enabled: Sáng/mờ đối tượng
Tab Index: Thứ tự khi nhấn phím tab Visible: Ẩn/ hiện đối tượng
Width: Độ rộng Hight: Chiều cao
Even Của Control
On Click: Xảy ra khi nhấn con trỏ
chuột
On Dbl Click: Khi nhấp đôi chuột
Before Update: Trước khi dữ liệu
trên Control được cập nhật vào bảng
After Update: Sau khi dữ liệu trên
Control được cập nhật vào bảng
Event Của Form
On Current: xảy ra khi có sự
di chuyển qua các mẩu tin khác
Before Update: Xảy ra trước
khi mẩu tin trong Form được cập nhật vào Table
After Update: Xảy ra sau khi
mẩu tin trên Form được cập nhật vào
Trang 2On Got Focus: Khi Control nhận con
trỏ
On Exit: Khi con trỏ bắt đầu rời khỏi
Control
On Lost Focus: Khi con trỏ rời hẳng
Control
On Not In List: Kiểm tra dữ liệu
trong Combo box
Table
On Load: Xảy ra khi Form
được mở lên
Before Del Confirm: Xảy ra
trước khi xóa Record
After Del confirm: Xảy ra
sau khi xóa record
On Error: Xảy ra khi Form
xuất hiện một lỗi
Dạng 1:
If <điều kiện > Then
<một câu lệnh>
Nếu <điều kiện> đúng thì câu lệnh sẽ thực hiện
Dạng 2:
If <điều kiện> Then
< Nhóm lệnh>
End if
Nếu <điều kiện> đúng thì Nhóm câu lệnh sẽ thực hiện
Dạng 3:
If <điều kiện> Then
<nhóm câu lệnh 1>
Else
<nhóm câu lệnh 2>
End if
-Nếu <điều kiện> đúng thì <nhóm câu lệnh
1> sẽ thực hiện Ngược lại <điều kiện sai>
thì <nhóm câu lệnh 2> sẽ thực hiện.
Dạng 4:
if <điều kiện 1> Then
<Nhóm câu lệnh 1>
Elseif <điều kiện 2> Then
<Nhóm câu lệnh 2>
Elseif <diều kiện 3> Then
<Nhóm câu lệnh 3>
……
Else
<Câu lệnh cuối>
End if
Chú ý: Có thể kết hợp các dạng lồng vào nhau
Ví dụ: Thiết kế Form thực hiện công việc sau
Trang 31 Nếu DTB>=8 Xep loại: Giỏi
2 Nếu 6.5<= DTB <8 : Kh
3 Nếu 5<= DTB <6.5 : Trung Bình
4 Cịn lại: Yếu
Giải thuật: để viết giải thuật trên ta đặt tên
cho các Control và chọn sự kiện tương
ướng
Private CmdTrungBinh_Click()
Dim DTB As Single
DTB= Val(TxtNhapDiem.Text)
If (DTB>=8) Then
TxtXeploai=“ Giỏi”
Elseif (DTB>=6.5) Then
TxtXeploai=“Kh”
Elseif (DTB>=5) Then TxtXeploai=“Trung Bình”
Else
TxtXeploai=“Yếu”
End if
End sub
Dùng các công cụ Control tạo giao diện cho form; đặt lại tên-> vào thuộc tính On Click của nút lệnh viết sự kiện cho nút lệnh đó.
Thủ Tục Msgbox Và Hàm Msgbox:
Thủ tục MsgBox:
MsgBox “chuỗi thông báo”, “loại
thông báo”, “ Tiêu đề”
Ví dụ:
MsgBox “ Trùng khóa chính”,16,”thông
báo”
Hàm MsgBox:
MsgBox( “chuỗi thông báo”, “loại
thông báo”, “ Tiêu đề”)
Ví dụ:
Private Sub Cmdclose_Click()
If MsgBox("ban có muon thoat khong?", 36,
"Thoat") = 6 Then DoCmd.Close End If
End Sub
Chức Năng Di Chuyển Mẫu Tin Navigation
Di chuyễn MT: Nằm trong thư viện Docmd
Về đầu: Docmd.GoToRecord , , acFirst
Về cuối: Docmd.GoToRecord , , acLast
về sau: Docmd.GoToRecord , ,acNext
Về trước: Docmd.GoToRecord , , acPrevious
Khi đang ở MT đầu và cuối; ta thao tác di
Ví d : ng d ngụ ứ ụ
Trang 4chuyển sẽ xảy ra lỗi, chú ý xử lý lỗi này
Thêm mới MT:
Me.AllowAddition = True
Docmd.GoToRecord , , acNewRec
Vào sự kiện On Click của các nút
lệnh và viết Code như sau
Private Sub Cmddau_Click()
DoCmd.GoToRecord , , acFirst
End Sub
-Private Sub Cmdtruoc_Click()
On Error GoTo loi ‘Xủ lý lỗi về trước
DoCmd.GoToRecord , , acPrevious
Exit Sub
loi:
MsgBox "Dang o mau tin dau ", 16, "chú ý"
End Sub
Private Sub CmdCuoi_Click()
DoCmd.GoToRecord , , acLast
End Sub
-Private Sub CmdSau_Click()
On Error GoTo loi ‘Xủ lý lỗi nút sau DoCmd.GoToRecord , , acNext Exit Sub
loi:
MsgBox "Dang o mau tin cuoi?",16, "Chu ý"
End Sub
Thao Tác Trên Điều Khiển – Text Box, List Box, Combo Box, Label,… Lưu mẫu tin:
Docmd.RunCommand acCmdSaveRecord
Xóa mẫu tin:
DoCmd.SetWarnings False ‘tắt cảnh báo
DoCmd.RunCommand acCmdDeleteRecord
DoCmd.SetWarnings True ‘bật cảnh báo
Phục hồi (không lưu)
If Me Dirty=True Then Me.Undo
( Dirty: kiểm tra mẫu tin có rỗng hay không )
Sáng/ Mờ các điều khiển:
Tên điều khiển.Enabled=True (Sáng) Tên điều khiển.Enabled=False (Mờ)
Ví dụ: Me.Them.Enabled=False
Hiện/ Ẩn điều khiển:
Tên điều khiển.Visible = True ( hiện)
Tn điều khiển.Visible = False (Ẩn )
Ví dụ: Me.Makh.Visible = False
Di chuyển con nháy ( Focus)
Tên điều khiển.SetFocus
Ví dụ: Me.Makh.SetFocus
Trang 5Private Sub Form_Open(Cancel
As Integer)
Me.GHI.Enabled = False Me.KHONG.Enabled = False
End Sub
-Private Sub THEM_Click()
Me.AllowAdditions = True DoCmd.GoToRecord , , acNewRec Me.MASV.SetFocus
Me.THEM.Enabled = False Me.XOA.Enabled = False Me.SUA.Enabled = False Me.THOAT.Enabled = False Me.GHI.Enabled = True Me.KHONG.Enabled = True
End Sub
Private Sub GHI_Click()
If DCount("*", "dmsv", "masv=forms!f7!
masv") > 0 Then
MsgBox "trung khoa chinh ", 16, "trung
khoa chinh "
Me.MASV.SetFocus
Exit Sub
Else
DoCmd.RunCommand acCmdSaveRecord
End if
Me.MASV.SetFocus
Me.GHI.Enabled = False
Me.KHONG.Enabled = False
Me.THEM.Enabled = True
Me.THOAT.Enabled = True
Me.SUA.Enabled = True
Me.XOA.Enabled = True
End Sub
Private Sub KHONG_Click()
DoCmd.GoToRecord , , acLast Me.MASV.SetFocus Me.KHONG.Enabled = False Me.GHI.Enabled = False Me.THEM.Enabled = True Me.SUA.Enabled = True Me.XOA.Enabled = True Me.THOAT.Enabled = True
End Sub
-Private Sub thoat_Click()
If MsgBox("BAN CHAC THOAT?", 36,
"XOA") = 6 Then DoCmd.Close
End If
End Sub
Private Sub XOA_Click()
If DCount("*", "ketqua", "masv=forms!f7!masv")
> 0 Then
MsgBox "khong the xoa vi co chi tiet",
16, "chu y"
Else
If MsgBox("ban chac xoa", 36, "xoa") = 6 Then
DoCmd.SetWarnings False
DoCmd.RunCommand acCmdDeleteRecord
DoCmd.GoToRecord , , acLast
DoCmd.SetWarnings True
End If
End If
End Sub
Text Box Tên khoa:
=Dlookup(“tenkhoa”,”khoa”,
“makhoa=forms!Tenform!makh”)
Nút Sửa:
Sử dụng chúc năng Locked = True/False để cho phép người dùng nhập liệu vào
Trang 6Các Hàm Cơ Sở Dữ Liệu Trong Access
Dlookup: Tìm 1 trường Table theo ĐK
= DLooKup(“Tên trường”, “Tên Table”, “điều kiện”)
Ví dụ:
=Dlookup(“Tenkh”, “DMKH”, “Makh=‘“&makh &” ’ ”) ‘Cho ra tên khoa theo makh được chọn
Dcount: Đếm tổng số mẫu tin theo điều kiện
=Dcount(“tên trường”, “Tên Table”, “điều kiện”)
Ví dụ:
=Dcount(“Masv”, “Dmsv”, “Makh=‘” &Me makh &” ’ ”) ‘Đếm số sinh viên theo makh chọn Hoặc có thể:
=Dcount(“Masv”, “Dmsv”, “Makh=Forms!FA4!makh”)
Dsum: Tính tổng theo điều kiện
=Dsum(“Tên trường”, ”Tên Table”, “Điều kiện)
Ví dụ:
Dsum(“Hocbong”, “DMSV”, “makh=‘” &makh &” ’ ”) ‘Tổng học bổng theo từng khoa
Ngoài ra còn có các hàm áp dụng như
= DAvg( )
= DMax( )
= DMin( )
Trang 7Kiểm Tra Trong Form Trước khi thoát có hỏi người dùng
If MsgBox(“ Bạn chắc thóa không?”,36,
“Thoát”)=6 Then
Docmd.Close
End if
Chú ý:
Nếu form không có nút thóat thì ta lập trình
trên sự kiện UnLoad của form
Private Sub Form_Unload(Cancel As Integer)
Docmd.SetWarnings False
If MsgBox(“ bạn chắc thóat?”,36,”thóat”)=7
Then Cancel= True
End if
Docmd.SetWarning True
End Sub
Trùng khóa chính
If Dcount(“*”, “Table chứa khóa chính”,
“DK”)>0 then MsgBox “ Trùng khóa chính”, 16, “trùrng
khóa” Me.khóa chính.SetFocus
Exit sub End if
Docmd.RunCommand acCmdSaveRecord
-If Dcount(“*”, “DMSV”, “Masv=forms! FA7!Masv”)>0 Then
MsgBox “Trùng khóa chính”, 16,
“Trùng khóa”
Me.Masv.SetFocus Exit sub
End if Docmd.Runcommand acCmdSaveRecord
Một số hàm xử lý lỗi và mã lỗi
Not IsNull Kiểm tra không rỗng Not IsNull(Mamh) –Mamh không rỗng
Mã lỗi thực hiện trong sự kiện của nút lệnh – bằng On Error Goto Nhãn
3022 Trùng khóa chính - Err.Number = 3022
3058 Khóa chính rỗng - Err.Number = 3058
3317 Tồn tại một trường rỗng
3201 Khóa chính chưa tồn tại (khi thêm bên khóa ngoại kiểm tra trong khóa chính)
If IsNull( Tên Khóa chính) Then
MsgBox “Khóa chính rỗng”,16, “rỗng”
Me.khố chính.SetFocus
Exit sub
End if
Docmd.RunCommand ac CmdSaveRecord
Ví dụ:
If IsNull(Masv) Then
MsgBox “ Khóa chính rỗng”, 16, “rỗng”
If Hocbong<0 or Hocbong>1000000 Then Msgbox “ Học bổng từ 0 đến 1tr”,16,”rỗng”
Me.Hocbong.SetFocus Exit sub
End if
Kiểm tra kiểu dữ liệu:
Private sub Form_Error( DataErr As Integer, Response As Integer)
Response=0
Trang 8Exit sub
End if
Docmd.Runcommand ac CmdSaveRecord
If DataErr=2113 Then MsgBox “Học bổng phải l kiểu số”,16,”chú ý”
End if End Sub
Thiết kế ListBox
Chọn List box -> vẽ ra mặt bằng form
Vào thuộc tính của List box
Name: Tên của List Box
Row Source Type: Table/Query (Kiểu của
list box)
Row Source: (…) chọn dữ liệu cho List box
Column Count: số cột hiển thị trong list
Column Head: Yes/No (tiêu đề)
Column Width: độ rộng tương ứng của cột,
cột nào không hiển thị cho độ rộng =0
Bound Column: vị trí cột liên kết (1)
ListCount: Đếm tổng dòng trong List
TênList.ListCount – 1(khi có tiêu đề)
Ví dụ:
Tổng khoa=Listkh.ListCount – 1 Truyền tham số cho TextBox
TênList.Column(vị trí cột) ->cột đầu =0
Ví dụ: List4.Column(1)
-hiển thị thông tin của cột thứ 2 trong List
Đồng bộ dữ liệu List Box với Form B1: Event/ OnClick của ListBox
Me.khóa chính.SetFocus
Docmd.FindRecord Me.TênListbox.Value
List4.Value
B2: Event/ On Current của Form
Me.ListBox=Me.khóa chính
Ví dụ:
Me.List4=Me.Masv
Trang 9B1: Thiết kế Form như mẫu –dữ liệu lấy từ
SINHVIEN
B2: Tạo List Box –vào thuộc tính (F4)
- Name: ListSV
- Row Sounce type: Table/Query
- Row Sounce: nhấp vào (…)-vào giống như
Query –lấy dữ liệu cho List Box
- Đóng lại và chọn Yes
- Column Count: 4
- Column widths: 1’
- Bound column: 1
- Column Heads: Yes
B3: Makhoa –combo box
-Tạo giống như List Box nhưng cho độ rộng
cột thứ 2 bằng 0
B4: Tên khoa
C1:Dlookup(“Tenkhoa”,”khoa”,”makhoa=’
” & makh & “’”)
C2: Makh.column(1)
B5: Tạo một Option Group bên trong là 2
Togle bottom
-Option value: -1 (bên Nam) -Option value: 0 (bên nữ)
- Control sounce: Phai (Fram)
Trang 10Khi nhấn vào một mẫu tin trên List Box thì trên Form chạy đến mẫu tin đó
Do đó chúng ta phải đồng bộ dữ liệu cho Form và List bằng cách làm 2 việc
Private Sub Form_Current()
Me.ListSV = Me.MASV
End Sub
Private Sub Listsv_Click()
Me.MASV.SetFocus
If Not IsNull(MASV) Then DoCmd.FindRecord Me.ListSV.Value End If
Me.ListSV.Requery ‘cập nhật lại List
End Sub
Combo Box
Dùng Winzard thiết kế
Kiểm tra lại thuộc tính của Combo box
Name:Cbkhoa(đặt tên)
Control Source: Trường liên kết
Row Source Type: Table/Query
Column Count: số cột hiển thị (2)
Column Width: độ rộng cột(để ẩn đi một
cột ta cho độ rộng của cột đó= 0)
Truyền tham số cho TextBox
(để hiển thị dữ liệu trong combo ra
ngoài)
= Tên Combo box.Column(cột) Vidu:
=Cbkhoa.column(1) ->hiển thị tên khoa trong combo box
1) Click Phải/ Chang To/ Combo Box
Trang 11• Thuộc tính: Data/ Limit To List : Yes
• Event: On Not In List
Response=0
MsgBox “ Gi trị nay khong ton tai”,16,”loi”
1) Ví dụ 1:
FA8(Combo Box Makh)
Change To/ Combo Box
Thuộc tính: All
Row Source Type: Table/Query
Row Source: DMKH
Column Count: 2
Column Width: 1;0 (ẩn đi cột tên khoa)
2) Ví dụ 2:
FA9(Combo box sotiet)
Change To/ Combo Box
Thuộc tính : All
Row source: Value List
Row Source: 30;45;60
Column Count : 1
Column Width: 1
Ví dụ: phái lá một Combo Box hiển thị 2 gi trị Nam; Nu
Kích chuột phải lên combo box
Change To/ Combo Box
Thuộc tính: All
Row source Type Value List Row Source: -1;”Nam”;0;”Nu”
Column Count: 2 Column Width: 0
I) Thiết lập:
1) Vẽ Option Group
2) Thuộc tính: Control Source: Field lưu trữ
3) Vẽ Option button hoặc Check Box
4) Thuộc tính Option Value cho option button vá check Box
II) Ví dụ:
1) Option Group: Control Source: Phai
2) Option Button Nam: Option Value: -1
3) Option Button Nu: Option Value: 0
I) Thiết kế:
1) Vẽ Tabcontrol
2) thao tác trên TabControl
Nhấp phải một trang bất kỳ Delete Page: Xóa trang Insert Page: Thêm một trang Properties:
Format: Caption Liệt kê tên hiển thị của trang
Ch ý: Trang đầu tin của Tab tính là một
3) Thiết lập nguồn dữ liệu từng trang của Tab
Có thể nguồn dữ liệu từ Form
Có thể l một ListBox
Có thể l Sub
Trang 12Đồng bộ dữ liệu giữa các trang của TabControl:
Nhấp đôi lên Tab
Other/ Name: Tabsv(đặt tên cho Tab) Event: On Change
If TenTab=0(List ở trang đầu) Then
Me.ListBox= Me.Khố chính
Else
Me.Khóa chính.SetFocus
If Not IsNull(Me.list) Then Docmd.FindRecord Me.List.Value
End if
Ví dụ:
If Tabkh= 0 Then
Me.List4 = Me.Makh Else
Me.Makh.SetFocus
If Not IsNull(Me.List4) Then Docmd.FindRecord Me.List4.Value End if
1) New/ Design View/ Ok
2) Ấn F4
Format:
Default View: DataSheet Navigation Button: No Data:
Record Source: (…) Click chọn Table tạo Sub Form, Chọn các trường (Tất cả các trường trên Form chính+Các trường cần thiếu trên Sub phụ)/ Đóng/ Yes Kéo thả Field List Xuống Detail
3) Nhấp phải/ Form Head/ Footer: Kéo trường liên kết giữa Main và Sub Lên Form Head để ẩn đi.
Đồng bộ dữ liệu giữa ListBox v Sub
1) Khi chọn một dòng trên ListBox thì Sub sẽ hiển thị chi tiết( List lúc này đại diện cho Main Form)
2) Khi đó ListBox và Sub phải có Trường liên kết với nhau theo dạng một - nhiều 3) Thiết lập lại thông số cho Sub
Link child Field: Tên trường liên kết của sub Link Master Field: Tên List
Truyền tham số:
Tên Sub.Form!Tên TextBox
Bước 1: Vẽ TextBox ở Form Footer của Sub
Bước 2: Ấn F4
All: Name: Tong (đặt tên)
Control Source: =Sum(diem)
Trang 13Khóa chính rỗng
Lập trình trên sự kiện: On Error của Sub Form Response=0
If DataErr=3022 Then MsgBox “Trùng khố chính”,16,”trùng”
Elseif DataErr=3101 Then
MsgBox “Khóa chính rỗng”,16,”chú ý”
Kiểu dữ liệu phải l kiểu số:
If DataErr=2113 Then
MsgBox “Điểm phải l số”,16,”chú ý”
End if
Tên sinh viên không được rỗng
Tuổi từ 18 đến 70
Học bổng từ 0 đến 1,000,000
Lập trình trên sự kiện Before Update của sub Form
Private Sub Form_BeforeUpdate(Cancel As Integer)
If IsNull(Tensv) Then
MsgBox “ Tên sinh viên không được rỗng”,16,”rỗng”
Me.Tensv.SetFocus Cancel=True Elseif Year(Date())- Year(ngaysinh)<18 Or Year(Date())-Year(ngaysinh)>70 Then
MsgBox “Tuổi từ 18 đến 70”,16,”ch ý”
Me.ngaysinh.Setfocus Cancel = True
Elseif Hocbong<0 or hocbong>1000000 Then
MsgBox “học bổng từ 0 đến 1,000,000”,16,”chú ý”
Me.Hocbong.Setfocus Cancel = True
End if
End sub
Xóa trong Sub có hỏi người dùng
Lập trình trên Event/ On Delete và After Update Confirm
• On Delete
Docmd.SetWarnings False
If MsgBox(“bạn chắc xóa?”,36,”xóa”) = 7 Then Cancel=True
End if
• After Delete Conform
Docmd.SetWarnings True
I) Màn hình tổng hợp:
1) Dạng 1: Gồm TabControl( Trang chứa List và trang chứa main) v Sub
Khi đó đồng bộ dữ liệu khi di chuyển qua lại giữa các trang trên Tab và Sub
Ta sử dụng một TextBox( Detail) Name: LK
Control Source: iif(TenTab=0, List,khóa chính)
Hiệu chỉnh lại thông số Sub Link Child Field: như củ
Link Master Field: LK
ví dụ: FC2
Name: Makh