Giáo trình Nhập môn hệ quản trị cơ sở dữ liệu - Đặng Thị Thu Hiền (Phần 2)
1. Giới thiệu lập trình Visual Basic Application
MS Access không chỉ đơn thuần là một hệ quản trị cơ sở dữ liệu (CSDL) quan hệ mà
nó còn cung cấp một môi trường lập trình với các công cụ khá đầy đủ, dễ sử dụng để
phát triển các ứng dụng quản lý vừa và nhỏ.
Ngôn ngữ lập trình được phát triển trong MS Access là Access Basic. Tuy nhiên từ
phiên bản MS Access for Windows 95, Access Basic được thay thế bởi Visual Basic
(VB). Hai ngôn ngữ này khá giống nhau và đều được phát triển từ một thành phần
thiết kế chung. Nhưng ngày nay, VB trở thành ngôn ngữ lập trình chung của chương
trình ứng dụng MS Office bao gồm: Access, Excel, Word, PowerPoint và được gọi là
VBA (Visual Basic for Applications). Việc có được một ngôn ngữ lập trình chung
xuyên suốt mọi chương trình ứng mang lại một số lợi điểm quan trọng là:
Người lập trình chỉ cần biết một ngôn ngữ lập trình để tùy biến, phát triển
ứng dụng.
Dễ dàng hợp nhất các đối tượng trong các chương trình ứng dụng.
VBA là ngôn ngữ có một số đặc điểm:
Không phân biệt chữ hoa, thường
Hướng sự kiện và hướng đối tượng
.Connection
con.Open cnstr
End If
If (IsNull(con)) Then
Set con = New ADODB.Connection
con.Open cnstr
231
End If
If (IsEmpty(con)) Then
Set con = New ADODB.Connection
con.Open cnstr
End If
Dim rec As ADODB.Recordset
Set rec = New ADODB.Recordset
rec.Open sql, con, adOpenDynamic, adLockOptimistic
While (rec.EOF = False)
rec.Delete
rec.MoveNext
Wend
rec.Close: con.Close: Set con = Nothing
LoadDataToListBox
End Sub
Private Sub cmdEdit_Click()
'Thay lai Text trong Caption cua nut cho phu hop
'kiem tra nguoi dung chi duoc chon 1 item de sua
'tai item do vao cac dieu khien tren form
'nguoi dung sua cac gia tri
'cap nhat lai bang Course cac gia tri moi
'Hien thi ket qua sua item do
Dim cap, cn, Dur, Des As String
cn = "": Dur = "": Des = ""
cmdEdit.SetFocus: cap = cmdEdit.Caption
cap = Trim(cap): cap = LCase(cap)
If (cap = "edit") Then
cap = "Save Edit"
If (lbCourse.ItemsSelected.count = 0) Then
MsgBox "You must select only 1 item in the ListBox to edit!"
Exit Sub
End If
Dim count As Integer: count = lbCourse.ItemsSelected.count
232
If (count > 1) Then
MsgBox "You must select only 1 item in the ListBox to edit!"
Exit Sub
End If
editingCID = lbCourse.Column(0, lbCourse.ItemsSelected.item(0))
If (lbCourse.Column(1, lbCourse.ItemsSelected.item(0)) "") Then
cn = lbCourse.Column(1, lbCourse.ItemsSelected.item(0))
End If
If (lbCourse.Column(2, lbCourse.ItemsSelected.item(0)) "") Then
Dur = lbCourse.Column(2, lbCourse.ItemsSelected.item(0))
End If
If (lbCourse.Column(3, lbCourse.ItemsSelected.item(0)) "") Then
Des = lbCourse.Column(3, lbCourse.ItemsSelected.item(0))
End If
txtCN.SetFocus: txtCN.Text = cn
txtDuration.SetFocus: txtDuration.Text = Dur
txtDes.SetFocus: txtDes.value = Des
Else
cap = "Edit"
txtCN.SetFocus: cn = txtCN.Text
txtDuration.SetFocus: Dur = txtDuration.Text
txtDes.SetFocus: Des = txtDes.value
If (cn = "") Then
MsgBox "The name of the course must be required!"
Exit Sub
End If
Dim sql As String: sql = "SELECT * FROM Course WHERE CID=" &
CStr(editingCID)
If (con Is Nothing) Then
Set con = New ADODB.Connection
con.Open cnstr
End If
If (IsNull(con)) Then
233
Set con = New ADODB.Connection
con.Open cnstr
End If
If (IsEmpty(con)) Then
Set con = New ADODB.Connection
con.Open cnstr
End If
Dim rec As ADODB.Recordset
Set rec = New ADODB.Recordset
rec.Open sql, con, adOpenDynamic, adLockOptimistic
rec.Fields("CName").value = cn
If (Dur "") Then
If (IsNumeric(Dur) = False) Then
MsgBox "Duration must be less than or equal 500!"
Exit Sub
End If
Dim pos1, pos2 As Integer
pos1 = -1
pos2 = -1
pos1 = InStr(1, Dur, ",", vbTextCompare)
pos2 = InStr(1, Dur, ".", vbTextCompare)
If (pos1 > 0) Or (pos2 > 0) Then
MsgBox "Duration must be less than or equal 500!"
Exit Sub
End If
Dim num As Integer
num = CInt(Dur)
If (num = Null) Or (num > 500) Then
MsgBox "Duration must be less than or equal 500!"
Exit Sub
End If
rec.Fields("DurationInHour").value = num
234
End If
If (Des "") Then
rec.Fields("Description").value = Des
End If
rec.Update
rec.Close: con.Close: Set con = Nothing
End If
cmdEdit.SetFocus
cmdEdit.Caption = cap
LoadDataToListBox
End Sub
Private Sub cmdRefresh_Click()
txtCN.SetFocus: txtCN.Text = ""
txtDes.SetFocus: txtDes.value = ""
txtDuration.SetFocus: txtDuration.Text = ""
editingCID = -1
cmdEdit.SetFocus
cmdEdit.Caption = "Edit"
LoadDataToListBox
End Sub
Private Sub cmdSearch_Click()
'Lay cac du lieu nguoi dung nhap tu form
'SELECT du lieu theo dieu kien tim kiem
'Hien thi ket qua ben duoi ListBox
cmdEdit.SetFocus: cmdEdit.Caption = "Edit": editingCID = -1
Dim cn As String: txtCN.SetFocus: cn = txtCN.Text
Dim Duration As String: txtDuration.SetFocus: Duration =
txtDuration.Text
Dim Des As String: txtDes.SetFocus: Des = txtDes.value
Dim foundCN As Boolean: foundCN = False
Dim foundDur As Boolean: foundDur = False
Dim foundDes As Boolean: foundDes = False
If (cn "") Then
foundCN = True
235
End If
If (Duration "") Then
foundDur = True
End If
If (Des "") Then
foundDes = True
End If
If (foundCN = False) And (foundDur = False) And (foundDes = False) Then
MsgBox "You must input either Name or Duration or Description of
the course!"
Exit Sub
End If
Dim sql As String
sql = "SELECT * FROM Course WHERE"
If (foundCN) And (foundDur) And (foundDes) Then
sql = sql & " (CName Like '%" & cn & "%')"
sql = sql & " and (DurationInHour = " & Duration & ")"
sql = sql & " and (Description LIKE '%" & Des & "%')"
Else
If (foundCN) And (foundDur) And (Not foundDes) Then
sql = sql & " (CName Like '%" & cn & "%')"
sql = sql & " and (DurationInHour = " & Duration & ")"
Else
If (foundCN) And (Not foundDur) And (foundDes) Then
sql = sql & " (CName Like '%" & cn & "%')"
sql = sql & " and (Description LIKE '%" & Des & "%')"
Else
If (foundCN) And (Not foundDur) And (Not foundDes) Then
sql = sql & " (CName Like '%" & cn & "%')"
Else
If (Not foundCN) And (foundDur) And (foundDes) Then
sql = sql & " (DurationInHour = " & Duration & ")"
sql = sql & " and (Description LIKE '%" & Des & "%')"
Else
236
If (Not foundCN) And (foundDur) And (Not foundDes) Then
sql = sql & " (DurationInHour = " & Duration & ")"
Else
If (Not foundCN) And (Not foundDur) And (foundDes) Then
sql = sql & "(Description LIKE '%" & Des & "%')"
End If
End If
End If
End If
End If
End If
End If
If (con Is Nothing) Then
Set con = New ADODB.Connection
con.Open cnstr
End If
If (IsNull(con)) Then
Set con = New ADODB.Connection
con.Open cnstr
End If
If (IsEmpty(con)) Then
Set con = New ADODB.Connection
con.Open cnstr
End If
Dim rec As ADODB.Recordset
Set rec = New ADODB.Recordset
rec.Open sql, con, adOpenDynamic
If (rec.RecordCount = 0) Then
lblSearch.Caption = "There is no item found!"
rec.Close: con.Close
Set con = Nothing
Exit Sub
237
Else
rec.MoveLast
lblSearch.Caption = "There are " & CStr(rec.RecordCount) & " items
found"
Dim i As Integer
While (lbCourse.ListCount > 0)
i = lbCourse.ListCount - 1
lbCourse.RemoveItem Index:=i
Wend
lbCourse.ColumnCount = 4
lbCourse.AddItem item:="CID;Course Name;Duration (in hour) ;
Description;", Index:=0
Dim item As String: item = ""
rec.MoveFirst
While (rec.EOF = False)
item = CStr(rec.Fields("CID").value)
If rec.Fields("CName") "" Then
item = item & ";" & rec.Fields("CName").value
Else
item = item & "; "
End If
If IsNull(rec.Fields("DurationInHour")) = False Then
item = item & ";" &
CStr(rec.Fields("DurationInHour").value)
Else
item = item & "; "
End If
If rec.Fields("Description") "" Then
item = item & ";" & rec.Fields("Description").value
Else
item = item & "; "
End If
lbCourse.AddItem item:=item
rec.MoveNext
238
Wend
rec.Close: con.Close
Set con = Nothing
End If
End Sub
Private Sub Form_Load()
cmdEdit.SetFocus: cmdEdit.Caption = "Edit": editingCID = -1
LoadDataToListBox
End Sub
Private Sub LoadDataToListBox()
'Ham nay se tai du lieu tu bang Coourse vao ListBox lbCourse
'lbCourse.RowSource = ""
Dim rec As ADODB.Recordset
If (con Is Nothing) Then
Set con = New ADODB.Connection
con.Open cnstr
End If
If (IsNull(con)) Then
Set con = New ADODB.Connection
con.Open cnstr
End If
If (IsEmpty(con)) Then
Set con = New ADODB.Connection
con.Open cnstr
End If
Set rec = New ADODB.Recordset
rec.Open "SELECT * FROM Course", con, adOpenDynamic
If (rec.RecordCount = 0) Then
lblSearch.Caption = "There is no item found!"
rec.Close: con.Close: Set con = Nothing
Exit Sub
Else
rec.MoveLast
239
lblSearch.Caption = "There are " & CStr(rec.RecordCount) & " items
found"
rec.MoveFirst
Dim i As Integer
While (lbCourse.ListCount > 0)
i = lbCourse.ListCount - 1
lbCourse.RemoveItem Index:=i
Wend
lbCourse.AddItem item:="CID;Course Name;Duration (in hour) ;
Description;", Index:=0
Dim item As String: item = ""
While (rec.EOF = False)
item = CStr(rec.Fields("CID").value)
If rec.Fields("CName") "" Then
item = item & ";" & rec.Fields("CName").value
Else
item = item & "; "
End If
If IsNull(rec.Fields("DurationInHour")) = False Then
item = item & ";" &
CStr(rec.Fields("DurationInHour").value)
Else
item = item & "; "
End If
If rec.Fields("Description") "" Then
item = item & ";" & rec.Fields("Description").value
Else
item = item & "; "
End If
lbCourse.AddItem item:=item
rec.MoveNext
Wend
rec.Close
con.Close
240
Set con = Nothing
End If
End Sub
241
BÀI TẬP CHƢƠNG 7
1. Hãy cài đặt lại chƣơng trình trong ví dụ về một chƣơng trình hoàn chỉnh sử
dụng các đối tƣợng khác Recordset trong các kiến trúc DAO và ADO
2. Hãy cài đặt thêm chức năng phân trang cho ListBox của bài tập trên. Số bản
ghi trên 1 trang (PageSize) sẽ do ngƣời dùng nhập vào, tại mỗi thời điểm
ListBox chỉ hiển thị PageSize bản ghi và các nút 1, 2, 3, 4, để chuyển
trang. Khi ngƣời dùng chọn 1 trang bất kỳ thì ListBox chỉ hiển thị các bản
ghi thuộc trang đó và nút hiển thị trang đó sẽ nổi bật lên.
242
TÀI LIỆU THAM KHẢO
[1] Access 2013, Microsoft, 2013
[2] Đặng Thị Thu Hiền và Đỗ Thanh Thủy, Bài giảng Nhập môn hệ quản trị cơ sở dữ
liệu Access, Trƣờng ĐH Giao Thông Vận Tải, 2007.
[3] MSDN Library – October 2012
[4] Teresa Hennig, Ben Clothier, George Hepworth and Dagi (Doug) Yudovich,
Professional Access 2013 Programming, ISBN: 978-1-118-53083-2, Wrok, August
2013.
[5]
[6]
File đính kèm:
giao_trinh_nhap_mon_he_quan_tri_co_so_du_lieu_dang_thi_thu_h.pdf

