Giáo trình Nhập môn hệ quản trị cơ sở dữ liệu: Phần 2

112 70 0
Giáo trình Nhập môn hệ quản trị cơ sở dữ liệu: Phần 2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Tiếp nội dung phần 1 Giáo trình Nhập môn hệ quản trị cơ sở dữ liệu: Phần 2 cung cấp kiến thức về Lập trình cơ sở dữ liệu trong MS Access cụ thể như: Giới thiệu lập trình Visual Basic Application, Kiểu dữ liệu, hằng và biến, Các cấu trúc điều khiển,...

CHƢƠNG 7: LẬP TRÌNH CƠ SỞ DỮ LIỆU TRONG MS ACCESS Giới thiệu lập trình Visual Basic Application MS Access không đơn hệ quản trị sở liệu (CSDL) quan hệ mà cung cấp mơi trƣờng lập trình với cơng cụ đầy đủ, dễ sử dụng để phát triển ứng dụng quản lý vừa nhỏ Ngôn ngữ lập trình đƣợc phát triển MS Access Access Basic Tuy nhiên từ phiên MS Access for Windows 95, Access Basic đƣợc thay Visual Basic (VB) Hai ngôn ngữ giống đƣợc phát triển 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 chƣơng trình ứng dụng MS Office bao gồm: Access, Excel, Word, PowerPoint đƣợc gọi VBA (Visual Basic for Applications) Việc có đƣợc ngơn ngữ lập trình chung xuyên suốt chƣơng trình ứng mang lại số lợi điểm quan trọng là:  Ngƣời lập trình cần biết ngơn ngữ lập trình để tùy biến, phát triển ứng dụng  Dễ dàng hợp đối tƣợng chƣơng trình ứng dụng VBA ngơn ngữ có số đặc điểm:  Khơng phân biệt chữ hoa, thƣờng  Hƣớng kiện hƣớng đối tƣợng Việc tổ chức chƣơng trình theo mơ hình hƣớng đối tƣợng hƣớng kiện khiến cho mã lệnh chƣơng trình, suy nhất, đƣợc gọi có kiện (event) xảy đối tƣợng (object) cụ thể Sự kiện đối tƣợng đƣợc sinh ngƣời dùng tác động chuột/bàn phím vào điều khiển Ví dụ kiện OnClick() điều khiển Button form Sự kiện đƣợc sinh q trình biên dịch Ví dụ kiện Load() form Tuy nhiên, đối tƣợng có kiện Các đối tƣợng điều khiển (control) đƣơng nhiên có kiện Ví dụ TextBox, CommandButton, Form, … có kiện; đối tƣợng DBEngine lại khơng thể có kiện Nhƣ vậy, tồn mã lệnh chƣơng trình ứng dụng Access đƣợc tổ chức hàm/thủ tục (function/sub) độc lập, bình đẳng (chúng ta phân biệt hàm thủ tục phần sau) Khơng có hàm/thủ tục cha, chứa hàm/thủ tục khác Khơng có “điểm vào” chƣơng trình Nghĩa là, khơng có hàm/thủ đƣợc chƣơng trình gọi trƣớc để từ gọi đến hàm/thủ tục khác Tất hàm/thủ tục đƣợc gọi để đáp ứng kiện tƣơng ứng đƣợc gọi tƣờng minh hàm/thủ tục khác 131 Chƣơng trình bày nội dung sau:  Module Access Class Object  Các kiểu liệu, biến  Các cấu trúc điều khiển  Hàm thủ tục  Các mơ hình truy cập CSDL Module Module đối tƣợng nguyên thủy môi trƣờng lập trình VBA Tồn mã lệnh VBA CSDL đƣợc lƣu module dƣới dạng thủ tục (gồm hàm thủ tục con) Các thủ tục độc lập liên quan đến form/report Nói cách khác, module phƣơng tiện MS Access để giúp ngƣời lập trình tổ chức mã nguồn họ cho “gọn gàng”, dễ kiểm sốt Ví dụ, ngƣời lập trình nên gom đoạn mã (hàm/thủ tục) làm việc với CSDL vào module đặt tên DataAccessModule, gom đoạn mã việc với form vào module đặt tên FormModule hay nên viết lớp Student (Class Module) để làm việc với ghi thuộc bảng Student CSDL, … MS Access 2013 cung cấp 03 loại module: module chuẩn (Standard Module), module lớp (Class Module) module gắn với form/report (Form/Report Module) Standard module chủ yếu bao gồm tập hàm/thủ tục Mỗi hàm/thủ tục đƣợc gọi từ hàm/thủ tục khác từ kiện đối tƣợng hay điều khiển Khi đó, tồn mã lệnh chƣơng trình đƣợc tổ chức thành đơn vị hàm/thủ tục Các đơn vị hàm/thủ tục đƣợc gom lại Standard Module để giúp lập trình viên dễ quản lý mã lệnh Class module thực chất lớp ngƣời dùng định nghĩa Mỗi Class Module lớp ngƣời dùng có tên tên Class Module Lớp ngƣời dùng định nghĩa đƣợc đối xử bình đẳng nhƣ lớp đƣợc định nghĩa hệ thống (built-in language class) Điều quan trọng bạn phải biết dùng Standard Module dùng Class Module hay hai Nó phụ thuộc vào cách thiết kế ứng dụng bạn Nếu ứng dụng bạn đƣợc tổ chức theo kiểu “hƣớng chức năng” (phần mềm tập chức có quan hệ với nhau) bạn có xu hƣớng sử dụng Standard Module nhiều Nếu ứng dụng bạn đƣợc thiết kế theo mơ hình lập trình “phân lớp” (03 lớp chẳng hạn: giao diện, logic, truy cập liệu) bạn đƣơng nhiên sử dụng Class Module nhiều Sau chi tiết loại module 132 2.1 Module chuẩn (Standard Module) Module chứa biến, thủ tục đƣợc gọi từ query, form, report, macro, biểu thức, thủ tục khác từ đâu chƣơng trình ứng dụng Nhƣ vậy, ta viết Standard Module nội dung sau đây:  Các khai báo tùy chọn dùng chung cho tất hàm/thủ tục Standard Module Ví dụ: Option Explicit khai báo tùy chọn yêu cầu tất biến sau dùng hàm/thủ tục phải đƣợc khai báo tƣờng minh trƣớc dùng  Các khai báo hằng, biến toàn cục  Các hàm/thủ tục Các hàm/thủ tục Standard Module với phạm vi truy xuất public (mặc định) đƣợc gọi từ đâu CSDL bao gồm lời gọi từ:  Các hàm/thủ tục khác Standard Module với  Các hàm/thủ tục Class Module khác  Các thủ tục gắn với form/report MS Access Class Objects Các hàm/thủ tục có phạm vi truy xuất private đƣợc gọi hàm/thủ tục khác thuộc module với Để tạo Standard Module, cửa sổ thiết kế CSDL, chọn lệnh CREATE menu, sau chọn nút lệnh Module (vùng khoanh đỏ) nhƣ hình 7.1 Hình 7.1: Tạo Standard Module từ cửa sổ thiết kế CSDL 133 Kết bạn nhận đƣợc cửa sổ để viết code Standard Module nhƣ hình 7.2 Project Explorer Panel Code panel Hình 7.2 : Cửa sổ code Standard Module Trong hình 7.2, cửa sổ hình đƣợc chia làm 02 panel bao gồm : panel bên trái Project Explorer Panel để hiển thị đối tƣợng module Trong panel này, bạn thêm/bớt sửa tên (F4) Standard Module, …panel bên phải Code Panel, cửa sổ để bạn viết mã cho Standard Module đƣợc chọn bên panel trái Chú ý : bạn bật/tắt panel theo ý muốn để vùng quan sát bạn đƣợc rộng Ví dụ code bạn muốn cửa sổ code (Code Panel) đƣợc rộng bạn nên tắt panel bên trái cách click chuột vào biểu tƣợng dấu X góc bên phải panel Khi cần bạn mở lại cách chọn lệnh VIEW/Project Explore menu Khi muốn ghi lại code, bạn cần chọn lệnh File/Save …hoặc chọn biểu tƣợng save (chiếc đĩa mềm) menu Lần lƣu, bạn đƣợc hỏi đặt tên cho Standard Module, lần sau, MS Access tự ghi vào tên bạn đặt từ lần đầu Hình 7.3 minh họa cửa sổ lƣu Module3 đƣợc đặt tên commonFunction 134 Nút lệnh save Hình 7.3 Đặt tên cho Standard Module Khi muốn sửa tên module đặt, bạn chọn vào tên module Project Explorer Panel ấn phím F4 Ví dụ hình 7.4 minh họa cửa sổ đổi tên cho module1 thành tên checkValidFunction Bạn nhập tên cho module thuộc tính (Name) Hình 7.4 Đổi tên cho Standard Module có Chúng ta quan tâm nhiều đến Code Panel Sau đây, phân tích Panel Phần Panel hai hộp danh sách thả xuống Hộp danh sách bên trái ln có mục (General), hộp danh sách bên phải danh sách hàm, thủ tục 135 Standard Module (trong hình 7.2 chƣa có hàm, thủ tục đƣợc viết Standard Module nên có mục (Declarations) đƣợc hiển thị) Cửa sổ soạn thảo mã lệnh gồm 03 phần, phần khai báo tùy chọn, khai báo hằng, biến dùng chung cho hàm, thủ tục module phần định nghĩa hàm, thủ tục Standard Module 2.1.1 Khai báo tùy chọn Các tùy chọn đƣợc khai báo khai báo sau hằng, biến toàn cục nhƣng phải trƣớc phần định nghĩa hàm/thủ tục Phần khai báo tùy chọn có tùy chọn sau đƣợc khai báo:  Option Base Statement Khai báo số thấp cho mảng toàn module, mặc định Cú pháp khai báo: Option Base {0 | 1} Ví dụ: Khi định nghĩa mảng theo cú pháp Dim a(100) as Integer Mặc định ta đƣợc mảng tên a, số chạy từ đến 99 Nếu có tùy chọn Option Base mảng a có 100 phần tử, số chạy từ đến 100 Tùy chọn (nếu có) phải đƣợc khai báo trƣớc hàm, thủ tục có tác dụng module chứa Option Base đƣợc khai báo lần module phải trƣớc khai báo mảng  Option Compare Statement Khai báo phƣơng thức so sánh cho biểu thức thuộc kiểu chuỗi (String) Cú pháp khai báo: Option Compare {Binary | Text | Database} Option Compare Binary: so sánh chuỗi theo kiểu nhị phân, nghĩa theo thứ tự xếp ký tự bảng mã ASCII Đây kiểu mặc định Ví dụ: có khai báo Option Compare Binary ta có “A” < “B” < ”C” … < “a” < “b” < “c”… mã ASCII “A” “a” tƣơng ứng 65 97 (hệ thập phân) Option Compare Text: so sánh theo kiểu trật tự ký tự khơng phân biệt chữ hoa, thƣờng 136 Ví dụ: Khi khai báo Option Compare Text "A" = "a", "B" = "b", …, "À" = "à", "Ê" = "ê", … Option Compare Database: so sánh xâu dựa trật tự đƣợc xác định cục Database chứa module  Option Explicit Statement Khai báo để yêu cầu biến phải đƣợc khai báo tƣờng minh trƣớc sử dụng Tùy chọn (nếu có) phải đƣợc đặt trƣớc khai báo biến định nghĩa hàm, thủ tục Cú pháp khai báo: Option Explicit Ví dụ 1: [1] Option Explicit [2] Dim a [3] a = 100 Trong đoạn mã này: + dòng [1]: yêu cầu biến phải đƣợc khai báo tƣờng minh trƣớc sử dụng + dòng [2] khai báo biến a + dòng [3] gán cho a giá trị 100 Nhƣ vậy, cuối biến a đƣợc nhận giá tri 100 Ví dụ 2: [1] Option Explicit [2] a = 100 Trong đoạn mã này: + dòng [1]: yêu cầu biến phải đƣợc khai báo tƣờng minh trƣớc sử dụng + dòng [2]: gán cho biến a giá trị 100 mà khơng có khai báo trƣớc Đoạn mã dịch trình biên dịch thơng báo lỗi “Variable not defined” Và cần khai báo biến a trƣớc gán giá trị cho (Dim a) ta bỏ khai báo Option Explicit  Option Private Statement 137 Khai báo tùy chọn để cấm truy xuất từ bên (các ứng dụng, dự án khác) vào thành phần module Cú pháp khai báo: Option Private Module Chú ý: Tùy chọn cấm truy cập từ dự án (có thể ứng dụng), ứng dụng khác tới thành phần (hằng, biến, hàm, thủ tục, kiểu ngƣời dùng định nghĩa) module Mọi truy xuất từ module, query, form, … khác sở liệu đƣợc 2.1.2 Khai báo hằng, biến toàn cục Hằng, biến tồn cục có phạm vi hoạt động tồn module mà đƣợc khai báo rộng (từ module khác) tùy thuộc vào việc bạn quy định phạm vi truy xuất cho private hay public Hằng, biến tồn cục đƣợc khai báo trƣớc sau khai báo tùy chọn nhƣng bắt buộc phải khai báo trƣớc hàm/thủ tục Mặc định hằng, biến tồn cục có phạm vi truy xuất private Tức là, bạn truy xuất đƣợc chúng từ hàm, thủ tục module với chúng Bạn truy xuất đƣợc hằng, biến từ module khác Tuy nhiên, bạn sõ thể thiết lập phạm vi truy xuất public cho chúng với khai báo từ khóa public trƣớc khai báo tên hằng, biến Chú ý: nên hạn chế việc sử dụng hằng/biến toàn cục Cú pháp khai báo hằng, biến đƣợc trình bày chi tiết phần sau 2.1.3 Hàm, thủ tục (function/sub) Sau khai báo tùy chọn hằng, biến phần định nghĩa hàm/thủ tục module Các hàm/thủ tục đƣợc nhƣ thƣ viện, việc gọi thi hành chúng phải tƣờng minh Mặc định hàm/thủ tục Standard Module có phạm vi truy xuất public Chi tiết hàm thủ tục đƣợc trình bày phần sau 2.1.4 Ví dụ Sau phân tích Standard Module có tên commonFunction với dụng ý module để lƣu hàm bản, dùng chung Trong commonFunction định nghĩa số hàm làm việc với mảng số double Mục dích ví dụ minh họa thành phần Standard Module Chú ý: để viết thích (comment) vùng viết code MS Access ta sử dụng dấu „ (dấu phẩy) dòng thích Ví dụ: ‘ This is a comment Khi gặp dòng bắt đầu dấu „, trình biên dịch bỏ qua tất sau dấu „ gặp dòng ‘Khai báo tùy chọn số bắt đầu mảng từ mặc định 138 ‘là tùy chọn phải khai báo biến tường minh trước ‘khi dùng Option Base Option Explicit ‘Khai báo biến mảng toàn cục dùng chung a ‘Khai báo n dụng ý số phần tử mảng ‘Phạm vi truy xuất mặc định a, n private Dim a(100) As Double Const n As Integer = 10 ‘Định nghĩa hàm/thủ tục ‘Thủ tục khởi tạo ngẫu nhiên giá trị mảng a gồm ‘10 phần tử, phần tử có giá trị a(j)) Then Dim tg As Double tg = a(i) a(i) = a(j) a(j) = tg End If Next Next End Sub ‘Hàm trả giá trị True/False tương ứng ‘x thuộc mảng không Function containInArray(x As Double) Dim i As Integer Dim kt As Boolean kt = False For i = To n If x = a(i) Then kt = True 140 + Câu lệnh SELECT với toán tử LIKE, ADO yêu cầu sử dụng ký tự % để đại diện cho ký tự DAO sử dụng ký tự * + Option Compare Database Dim editingCID As Integer Dim As ADODB.Connection Const cnstr As String = "Provider=Microsoft.ACE.OLEDB.12.0; Data source = C:\Users\M11x-R3\Desktop\Access\qldt.accdb; Persist Security Info=False" Private Sub cmdAddNew_Click() 'Lay cac du lieu nguoi dung nhap tu form 'Dua vao bang Course 'Hien thi ket qua 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 If (cn = "") Then MsgBox "The name of the course must be required!" Exit Sub End If Dim rec As ADODB.Recordset If (con Is Nothing) Then Set = New ADODB.Connection con.Open cnstr End If If (IsNull(con)) Then Set = New ADODB.Connection con.Open cnstr End If If (IsEmpty(con)) Then Set = New ADODB.Connection con.Open cnstr End If 228 Set rec = New ADODB.Recordset rec.Open "SELECT * FROM Course", con, adOpenKeyset, adLockOptimistic rec.AddNew rec.Fields("CName").value = cn 'Kiem tra Duration phai la mot so nguyen nho hon 500 If (Duration "") Then If (IsNumeric(Duration) = False) Then MsgBox "Duration must be less than or equal 500!" rec.Close: con.Close Set = Nothing Exit Sub End If Dim pos1, pos2 As Integer pos1 = -1 pos2 = -1 pos1 = InStr(1, Duration, ",", vbTextCompare) pos2 = InStr(1, Duration, ".", vbTextCompare) If (pos1 > 0) Or (pos2 > 0) Then MsgBox "Duration must be less than or equal 500!" rec.Close: con.Close Set = Nothing Exit Sub End If Dim num As Integer num = CInt(Duration) If (num = Null) Or (num > 500) Then MsgBox "Duration must be less than or equal 500!" rec.Close: con.Close Set = Nothing Exit Sub End If 229 rec.Fields("DurationInHour").value = num End If If (Des "") Then rec.Fields("Description").value = Des End If rec.Update: rec.Close: con.Close Set = Nothing LoadDataToListBox End Sub Private Sub cmdDelete_Click() 'Lay cac dong (item) ma nguoi dung chon ListBox 'Xoa ban ghi bang Course 'Hien thi lai ket qua ListBox cmdEdit.SetFocus: cmdEdit.Caption = "Edit": editingCID = -1 If (lbCourse.ItemsSelected.count = 0) Then MsgBox "You must select at least item in the ListBox to delete!" Exit Sub End If Dim count As Integer: count = lbCourse.ItemsSelected.count Dim varitem As Variant, i As Integer Dim sql As String sql = "SELECT * FROM Course WHERE (CID = " & CStr(lbCourse.Column(0, lbCourse.ItemsSelected.item(0))) & ")" For i = To lbCourse.ItemsSelected.count - sql = sql & " OR (CID=" & CStr(lbCourse.Column(0, lbCourse.ItemsSelected(i))) & ")" Next If (con Is Nothing) Then Set = New ADODB.Connection con.Open cnstr End If If (IsNull(con)) Then Set = New ADODB.Connection con.Open cnstr 230 End If If (IsEmpty(con)) Then Set = 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 = Nothing LoadDataToListBox End Sub Private Sub cmdEdit_Click() 'Thay lai Text Caption cua nut cho phu hop 'kiem tra nguoi dung chi duoc chon item de sua 'tai item 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 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 item in the ListBox to edit!" Exit Sub End If Dim count As Integer: count = lbCourse.ItemsSelected.count 231 If (count > 1) Then MsgBox "You must select only 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 = New ADODB.Connection con.Open cnstr End If If (IsNull(con)) Then 232 Set = New ADODB.Connection con.Open cnstr End If If (IsEmpty(con)) Then Set = 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 233 End If If (Des "") Then rec.Fields("Description").value = Des End If rec.Update rec.Close: con.Close: Set = 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 234 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 235 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 = New ADODB.Connection con.Open cnstr End If If (IsNull(con)) Then Set = New ADODB.Connection con.Open cnstr End If If (IsEmpty(con)) Then Set = 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 = Nothing Exit Sub 236 Else rec.MoveLast lblSearch.Caption = "There are " & CStr(rec.RecordCount) & " items found" Dim i As Integer While (lbCourse.ListCount > 0) i = lbCourse.ListCount - lbCourse.RemoveItem Index:=i Wend lbCourse.ColumnCount = 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 237 Wend rec.Close: con.Close Set = Nothing End If End Sub Private Sub Form_Load() cmdEdit.SetFocus: cmdEdit.Caption = "Edit": editingCID = -1 LoadDataToListBox End Sub Private Sub LoadDataToListBox() 'Ham se tai du lieu tu bang Coourse vao ListBox lbCourse 'lbCourse.RowSource = "" Dim rec As ADODB.Recordset If (con Is Nothing) Then Set = New ADODB.Connection con.Open cnstr End If If (IsNull(con)) Then Set = New ADODB.Connection con.Open cnstr End If If (IsEmpty(con)) Then Set = 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 = Nothing Exit Sub Else rec.MoveLast 238 lblSearch.Caption = "There are " & CStr(rec.RecordCount) & " items found" rec.MoveFirst Dim i As Integer While (lbCourse.ListCount > 0) i = lbCourse.ListCount - 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 239 Set = Nothing End If End Sub 240 BÀI TẬP CHƢƠNG Hãy cài đặt lại chƣơng trình ví dụ chƣơng trình hồn chỉnh sử dụng đối tƣợng khác Recordset kiến trúc DAO ADO Hãy cài đặt thêm chức phân trang cho ListBox tập Số ghi trang (PageSize) ngƣời dùng nhập vào, thời điểm ListBox hiển thị PageSize ghi nút 1, 2, 3, 4, … để chuyển trang Khi ngƣời dùng chọn trang ListBox hiển thị ghi thuộc trang nút hiển thị trang bật lên 241 TÀI LIỆU THAM KHẢO [1] Access 2013, Microsoft, 2013 [2] Đặng Thị Thu Hiền Đỗ Thanh Thủy, Bài giảng Nhập môn hệ quản trị sở 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] http://www.gcflearnfree.org/access2013 [6] http://www.techonthenet.com/access/questions/vba_reference2013.php 242 ... tính định nghĩa phương thức lớp 2. 2 .2 Khai báo tùy chọn Phần khai báo gồm khai báo nhƣ Standard Module 2. 2.3 Định nghĩa thuộc tính lớp Khai báo thuộc tính cho lớp sau phần khai báo tùy chọn Các thuộc... sổ Immediate, để xem giá trị a(1) đƣợc khởi tạo bạn cần viết: ?a(1) => kết a(1) = 22 .3095118999481, để xem giá trị hàm containInArray() bạn cần viết: ?containInArray (22 .3095118999481) => kết trả... giá tri 100 Ví dụ 2: [1] Option Explicit [2] a = 100 Trong đoạn mã này: + dòng [1]: yêu cầu biến phải đƣợc khai báo tƣờng minh trƣớc sử dụng + dòng [2] : gán cho biến a giá trị 100 mà khơng có

Ngày đăng: 18/06/2020, 23:16

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan