Recordsets(0)
Recordsets("name") Recordsets![name]
9. QueryDefs
QueryDefs chứa tập các đối tượng QueryDef. Mỗi đối tượng QueryDef dùng để tham chiếu tới các query có sẵn trong CSDL MS Access, hoặc có thể là các query lập trình bằng câu lệnh SQL tạo ra. Sử dụng phương thức CreateQueryDef của đối tượng Database để tạo một query mới. Như vậy có thể dùng QueryDef để chạy các câu như lệnh SQL như SELECT, INSERT, DELETE, UPDATE, … rất thuận tiện.
Quá trình tạo và thi hành một query trong VBA sử dụng đối tượng QueryDef gồm các bước:
Tạo một query mới (nếu không đặt tên thì nó chỉ tồn tại trong bộ nhớ) dùng phương thức CreateQueryDef của đối tượng Database.
Gán chuỗi lệnh SQL cho query
Ra lệnh thi hành query
Đóng query
Lấy các bản ghi trong bảng
Đoạn mã sau sẽ cho hiển thị tất cả các bản ghi của Course ở trên trong CSDL hiện tại ra cửa sổ Debug
Dim db As DAO.Database Set db = CurrentDb
Dim qr As QueryDef
Set qr = db.CreateQueryDef("showrec") qr.SQL = "SELECT * FROM Course"
Dim rec As DAO.Recordset
Set rec = qr.OpenRecordset() While Not rec.EOF
Debug.Print CStr(rec.Fields(“CID”).value) & Chr(32) & rec.Fields(“CName”).value & Chr(32) & CStr(rec.Fields(“DurationInHour”).value) & Chr(32) & rec.Fields(“Description”).value
rec.MoveNext
Wend
rec.Close
qr.Close
Thêm mới một bản ghi vào bảng
Đoạn mã sau sẽ thêm một bản ghi mới vào bảng Course ở trên trong CSDL hiện tại:
Dim db As DAO.Database Set db = CurrentDb
Dim qr As QueryDef
Set qr = db.CreateQueryDef("insertRec")
qr.sql = "INSERT INTO Course(CName, DurationInHour, Description) Values('Programming Using C++',60, 'Bla bla bla
…')"
qr.Execute qr.Close
set db = Nothing
Sửa (cập nhật) các bản ghi đã có thỏa mãn điều kiện
Đoạn mã sau sẽ sửa các khóa học có thời gian 30 giờ thành 45 giờ trong bảng Course
Dim db As DAO.Database Set db = CurrentDb
Dim qr As QueryDef
Set qr = db.CreateQueryDef("updatetRec")
qr.sql = "UPDATE Course Set DurationInHour = 45 WHERE DurationInHour = 30"
qr.Execute qr.Close
set db = NoThing
Xóa các bản ghi thỏa mãn điều kiện
Đoạn mã sau đây sẽ xóa các khóa học có tên chứa chuỗi “Java”
Dim db As DAO.Database Set db = CurrentDb
Dim qr As QueryDef
Set qr = db.CreateQueryDef("deletetRec")
qr.sql = "DELETE FROM Course WHERE CName LIKE „*Java*‟"
qr.Execute qr.Close
set db = Nothing
Để tham chiếu đến đối tượng QueryDef trong tập QueryDefs, ta có thể sử dụng một trong 3 cú pháp sau:
QueryDefs(0)
QueryDefs("name") QueryDefs![name]
10. TableDefs
TableDefs chứa tập các đối tượng TableDef. Mỗi đối tượng TableDef dùng để tham chiếu đến các bảng dữ liệu trong CSDL. Có thể chỉnh sửa, thiết kế cấu trúc của bảng trong chế độ Run time như trong chế độ thiết kế Design View bằng đối tượng này.
Một số thuộc tính, phương thức cơ bản:
+ Name: tên bảng được gán vào biến kiểu TableDef
+ RecordCount: tổng số bản ghi hiện có trên bảng được gán vào biến TableDef
+ DateCreated: thời gian tạo bảng được gán vào biến TableDef
+ Fields
Để tham chiếu đến các field của bảng, thuộc tính này là một đối tượng có các thuộc tính và phương thức khác.
+ CreateField
Dùng để tạo field mới cho bảng kiểu TableDef.
Để tạo một đối tượng TableDef mới, ta sử dụng phương thức CreateTableDef của đối tượng Database.
Ví dụ: Đoạn mã sau sẽ tạo ra thêm trong CSDL hiện tại một bảng có tên là Student, gồm các field là SID (Long Integer) và SName (Long Text)
Dim db As DAO.Database Dim tbl As DAO.TableDef Set db = CurrentDb
Set tbl = db.CreateTableDef("Student")
tbl.Fields.Append tbl.CreateField("SID", dbLong)
tbl.Fields.Append tbl.CreateField("SName", dbText, 200) db.TableDefs.Append tbl
set db = Nothing
Phương thức CreateTableDef yêu cầu đưa vào tham số là tên của bảng, nếu để là rỗng thì bảng đó chỉ tồn tại trong bộ nhớ, không lưu lại được trong CSDL.
Để tham chiếu đến đối tượng TableDef trong tập TableDefs, ta có thể sử dụng một trong 3 cú pháp:
TableDefs(0)
TableDefs("name") TableDefs![name]
Ví dụ: Tham chiểu đến bảng Student vừa tạo ta sử dụng cú pháp
TableDefs("Student")
11. Relations
Relations chứa một tập các đối tượng Relation. Mỗi đối tượng Relation dùng để tạo kết nối (Relationship) giữa 2 bảng, truy vấn trong CSDL MS Access. Để tạo một đối tượng Relation, ta sử dụng phương thức CreateRelation của đối tượng Database.
Ví dụ: đoạn mã sau sẽ tạo Relationship giữa 2 bảng Course (CID, CName, DurationInHour, Description) và CourseStudent (CSID, CID, SID, Sdate, Fdate, Venue) trong CSDL hiện tại.
Dim db As DAO.Database Set db = CurrentDb
Dim rls As DAO.Relation
Set rls = db.CreateRelation("SC", "Course", "CourseStudent")
rls.Fields.Append rls.CreateField("CID", dbLong)
rls.Fields("CID").ForeignName = "CID" db.Relations.Append rls
Phương thức CreateRelation yêu cầu đưa vào các tham số lần lượt là: tên, bảng chính, bảng phụ và ràng buộc toàn vẹn tham chiếu của mối quan hệ. Để thiết lập khóa chính của liên kết ta sử dụng phương thức CreateField của đối tượng Relation và đưa vào tham số yêu cầu là tên của field làm khóa chính của mối quan hệ thuộc bảng chính của
liên kết (trong ví dụ trên là field CID của bảng Course). Sau đó cần chỉ ra khóa ngoại của liên kết (trong ví dụ là field CID của bảng CourseStudent).
Để tham chiếu đến đối tượng Relation trong tập Relations ta có thể sử dụng một trong 3 cú pháp:
Relations(0)
Relations("name") Relations![name]
Ví dụ: Tham chiếu đến Relationship SC trên ta sử dụng
Relations("SC")
12. Containers
Containers chứa tập các đối tượng Container. Mỗi đối tượng Database chứa một tập các đối tượng Container. Đối tượng Container có thể được định nghĩa bởi Microsoft Jet Database Engine hoặc bởi người dùng (khi đó DAO không hỗ trợ bất kỳ phương thức hay thuộc tính nào). Sau đây liệt kê một số đối tượng Container và kiểu thông tin mà nó chứa được Microsoft Jet Database Engine hỗ trợ:
Chứa thông tin về | |
Databases | Tất cả các đối tượng database được lưu trong CSDL |
Tables | Tất cả các đối tượng table và query được lưu trong CSDL |
Relations | Tất cả các đối tượng relationship được lưu trong CSDL |
Có thể bạn quan tâm!
- Nhập môn hệ quản trị cơ sở dữ liệu Phần 2 - 6
- = 2: T = Sqr(N): Found = False Do While (I <= T) And (Not Found)
- Tham Chiếu Đến Microsoft Dao 3.6 Object Library
- Nhập môn hệ quản trị cơ sở dữ liệu Phần 2 - 10
- Các Đối Tượng Và Mối Quan Hệ Giữa Chúng Trong Kiến Trúc Ado
- Nhập môn hệ quản trị cơ sở dữ liệu Phần 2 - 12
Xem toàn bộ 114 trang tài liệu này.
Chú ý:
+ Đối tượng Databases Container tham chiếu đến tất cả các đối tượng Database được lưu trong CSDL. Còn tập Databases chỉ tham chiếu đến các đối tượng Database đang được mở trong đối tượng Workspace cụ thể. Tương tự với các loại đối tượng Container khác.
+ Container là các đối tượng có sẵn (built - in), không thể tạo ra hay hủy bỏ chúng.
Để tham chiếu đến đối tượng Container trong tập các đối tượng Containers, ta có thể sử dụng 1 trong 3 cú pháp sau:
Containers(0)
Containers("name") Containers![name]
Ví dụ Mục tiêu
Minh họa hoàn chỉnh của một bài tập làm việc với CSDL gồm tất cả các thao tác: XEM, THÊM, SỬA, XÓA và được thực hiện gắn với giao diện của người dùng cuối.
Nội dung
Xây dựng một chương trình gồm các chức năng:
+ Search (tìm kiếm): thực hiện tìm kiếm chứa (tìm gần đúng) trên một bảng trong CSDL theo các điều kiện nhập từ form.
+ Add New (thêm mới): thực hiện thêm mới một bản ghi từ form vào 1 bảng trong CSDL
+ Edit (sửa): sửa thông tin của một bản ghi đã có trong 1 bảng
+ Delete (xóa): xóa một tập bản ghi trong 1 bảng
+ Refresh: khởi tạo lại form về giá trị ban đầu
Chú ý
+ Kết quả thao tác của mỗi chức năng được hiển thị ngay trong lưới trên cùng form
+ Chức năng Edit: Yêu cầu người dùng chọn duy nhất 1 row (record) trong lưới rồi Click vào nút lệnh Edit. Chương trình sẽ nạp row đó lên các TextBox và sửa nút Edit thành nút Save Edit, người dùng sửa xong dữ liệu và Click vào nút Save Edit. Chương trình sẽ cập nhật các thay đổi của người dùng vào CSDL và hiển thị kết quả tại lưới bên dưới (xem giao diện phần sau)
+ Chức năng Delete: Yêu cầu người dùng chọn 1 hoặc nhiều các row trong lưới rồi Click vào nút lệnh Delete. Chương trình sẽ xóa tất cả các row đó trong CSDL và hiển thị kết quả trong lưới bên dưới.
Các bước thực hiện
+ Tạo CSDL đặt tên là: qldt.accdb
+ Tạo một bảng Course trong CSDL trên như sau
+ Tạo một form đặt tên là frmCM như sau:
Chi tiết về các điều khiển trên form trong thiết kế như sau:
Thuộc tính | Giá trị | Ghi chú | |
Lable | Name | Lbl1 | |
Caption | Course Management | ||
Lable | Name | Lbl2 | |
Caption | Course Name: | ||
Lable | Name | Lbl3 | |
Caption | Duration (in hour): | ||
Lable | Name | Lbl4 | |
Caption | Description: | ||
Lable | Name | lblSearch | |
Caption | Đặt dấu cách |
Name | txtCN | ||
TextBox | Name | txtDurration | |
TextBox | Name | txtDes | TextBox này bạn lấy từ ActiveX Control để nó có thanh cuộn dọc và ngang khi người dùng nhập lượng dữ liệu lớn |
Command Button | Name | cmdSearch | |
Caption | Search | ||
OnClick | Event Procedure/Code Builder | ||
Command Button | Name | cmdAddNew | |
Caption | Add new | ||
OnClick | Event Procedure/Code Builder | ||
Command Button | Name | cmdEdit | |
Caption | Edit | ||
OnClick | Event Procedure/Code Builder | ||
Command Button | Name | cmdDelete | |
Caption | Delete | ||
OnClick | Event Procedure/Code Builder | ||
Command Button | Name | cmdRefesh | |
Caption | Refresh | ||
OnClick | Event Procedure/Code Builder | ||
ListBox | Name | lbCourse | |
Column Count | 4 | 4 cột để sau này ứng với 4 field của bảng Course | |
Column Widths | 1";2";1";5" | Các độ rộng của mỗi cột | |
Column Heads | Yes | Để quy định hàng đầu tiên là tiêu đề của LB | |
Row Source Type | Value List | ||
Bound Column | 0 | Giá trị cột đầu tiên (0) là giá trị của LB |
+ Viết mã lệnh cho các sự kiện trong MACO như sau