Chương 3: Đối tượng truy cập dữ liệu – DAO (Data Access Object)

DAO được sử dụng để có thể tạo, sửa đổi, và bỏ các đối tượng dữ liệu bên trong tập tin csdl thông qua các đoạn mã lệnh trong VBA. Chúng ta sử dụng DAO để thực hiện các công việc sau đây:

  • Phân tích cấu trúc một csdl có tồn tại
  • Thêm hoặc thay đổi các bảng, các truy vấn
  • Tạo mới một csdl
  • Thay đổi nội dung của một truy vấn
  • Duyệt qua các bộ mẫu tin
  • Sửa đổi dữ liệu của các bảng…

Trong mô hình hệ thống DAO, đối tượng trên cùng gọi là đối tượng DBEngine – công nghệ csdl – còn được gọi là Microsoft Jet Database Engine, đối tượng này chứa tất cả các đối tượng còn lại trong mô hình.
Khi muốn chỉ định đến csdl hiện hành ta có thể dùng hàm CurrentDB(), khi muốn chỉ định đến bất kỳ một csdl nào khác, chúng ta bắt buộc phải chỉ định đến đối tượng DBEngine.
Vd: trả về phiên bản hiện hành của csdl đang sử dụng

Sub VersionCurrentdb()
Dim db as database
Set db=Currentdb()
Debug.Print db.Version
End sub

1. Các đối tượng trong đối tượng DBEngine:

Để có thể vận dụng một cách khéo léo các đối tượng DAO trong khi ứng dụng đang chạy, chúng ta phải hiểu rõ chúng một cách tường minh. Chúng ta có thể thao khảo một số đối tượng chính trong đối tượng DBEngine như sau:

WorkSpaces – không gian làm việc
Tập hợp các không gian làm việc workspaces chứa đựng các đối tượng không gian làm việc workspace. Mỗi đối tượng không gian làm việc định nghĩa ra một khu vực mà người sử dụng đang làm việc khi họ bắt đầu khởi động Access. Tất cả tiến trình thao tác và an toàn dữ liệu cho người sử dụng sẽ được ghi nhận tại một vùng làm việc.
Users – người sử dụng
Groups – nhóm người sử dụng
Databases – tập hợp cơ sở dữ liệu

Vd: In ra tên các csdl hiện đang được mở trong vùng làm việc hiện hành
Sub Printdbname()
Dim ws as workspace
Dim db as database
Dim db1 as database
Dim db2 as database
Set ws=DBEngine(0)
Set db1= currentdb()
Set db2= ws.opendatabase(“d:\access\vd.mdb”)

For Each db In ws.databses
Debug.print db.name
Next db
End sub

TableDefs – tập hợp bảng định nghĩa
Tập hợp các bảng định nghĩa – tabledefs chứa tất cả các bảng đã được định nghĩa trước đó trong một tập tin csdl. Nó chứa đựng tất cả thông tin chi tiết và thuộc tính của các bảng.
Vd: kiểm tra sự tồn tại của một bảng trong tập tin csdl hiện hành như sau:
Sub ExitstTable()
Dim db as database
Dim tb as tabledef
Dim tbname as string
Dim flag as boolean
Dim td as string

Flag=false
Tbname= inputbox(“nhập vào tên bảng cần kiểm tra”)
Set db= currentdb()
For Each tb In db.tabledefs
If tb.name= tbname then
Flag=true
Exit for
End if
Next tb

Td=iif( Flag, “bang co ton tai”, “bang khong ton tai”)
Msgbox td
End sub

Indexs – tập hợp chỉ mục sắp xếp
Querydefs – tập hợp các truy vấn định nghĩa
Fields – tập hợp các cột

Vd: liệt kê thông tin các cột chứa trong một bảng được chỉ định

Sub Listfield()
Dim db as database
Dim tb as tabledef
Dim fd as field
Dim tbname as string

Tbname=inputbox(“nhập vào tên bảng cần in field”)
Set db= currentdb()
For each tb in db.tabledefs
If tb.name= tbname then
For each fd in tb.fields
Debug.print fd.name
Debug.print fd.type
Debug.print fd.size
Next fd
Exit for
End if

Next tb
End sub

Parameters – tập hợp các tham số
Recordsets – tập hợp các mẫu tin
Relations – tập hợp các mối quan hệ
Containers – tập hợp chứa đựng thông tin
Documents – tập hợp hồ sơ
Properties – tập hợp các thuộc tính

2. Các đối tượng bộ mẫu tin – Recordset

Một đối tượng bộ mẫu tin đại diện cho các mẫu tin trong một bảng hay một truy vấn chọn. Access cung cấp 3 loại bộ mẫu tin như sau:
Bộ mẫu tin động – dynaset
Bộ mẫu tin tức thì – snapshot
Bộ mẫu tin bảng – table

3. Làm việc với các phương thức và thuộc tính của đối tượng bộ mẫu tin:

Tạo biến đối tượng bộ mẫu tin
Vd: Tạo biến bộ mẫu tin dạng bảng có dữ liệu nguồn từ bảng sinh viên và cho biết tổng số mẫu tin có trong bảng sinh viên.
Sub Opentable()
Dim db as Database
Dim rs as Recordset
Set db=Currentdb()
Set rs=db.Openrecordset(“sinhvien”)
Debug.Print rs.Recordcount
End sub

Các tham số trong phương thức OpenRecordset
Cú pháp:
Set <biến rs>= <biến db>.Openrecordset(type, options)

4. Các phương thức di chuyển mẫu tin trong bộ mẫu tin:

Phương thức Ý nghĩa
MoveFirst Di chuyển về mẩu tin đầu tiên trong bộ mẫu tin
MoveLast Di chuyển về mẩu tin cuối cùng trong bộ mẫu tin
MovePrevious Di chuyển về mẩu tin trước mẫu tin hiện hành trong bộ mẫu tin
MoveNext Di chuyển về mẩu tin sau mẫu tin hiện hành trong bộ mẫu tin
Move[0] Về trước hoặc ra sau một số các mẫu tin chỉ định so với mẫu tin hiện hành.

Vd: in ra mã số của sinh viên đầu tiên, thứ hai, cuối cùng và kế cuối trong bảng sinh viên

Sub Inmautin()
Dim db as Database
Dim rs as Recordset
Set db= Currentdb()
Set rs=db.Openrecordset(“sinhvien”)

Rs.Movefirst
Debug.Print rs!masv

Rs.Movenext
Debug.print rs!masv

Rs.Movelast
Debug.print rs!masv

Rs.Moveprevious
Debug.print rs!masv
End sub

Trong đối tượng bộ mẫu tin có 2 thuộc tính là: BOF (begin of file) và EOF (end of file), đây là 2 thuộc tính nói lên vị trí các điểm giới hạn của một bộ mẫu tin. Các thuộc tính này giúp để xác định vị trí con trỏ mẩu tin hiện hành đang đứng ở đâu.
Vd: lần lượt in ra tất cả các mã số sv có trong bảng sinh viên
Sub Inlist()
Dim db as Database
Dim rs as Recordset
Set db=Currentdb()
Set rs=db.Openrecordset(“sinhvien”)

Do while not rs.EOF
Debug.Print rs!masv
Rs.Movenext
Loop
End sub

5. Sắp xếp, lọc và tìm kiếm các mẫu tin:

Thuộc tính sort
Cú pháp:
<biến>.sort = <btc> [asc / desc] Trong đó:
Biến: tên của biến có kiểu bộ mẫu tin
Btc: danh sách cột muốn sắp xếp
Asc / desc: sắp tăng hay giảm

Vd: sắp xếp dữ liệu trong bảng sinh viên theo thứ tự tăng dần theo ngày sinh
Sub Sortngaysinh()
Dim db as databse
Dim rs as recordset
Set db=curretndb()
Set rs=db.openrecordset(“sinhvien”, dbopendynaset)

Debug.print “chua sap xep”
Do while not rs.EOF
Debug.print rs!ngaysinh
Rs.movenext
Loop

Debug.print “da sap xep”
Rs.sort = “[ngaysinh]”
Set rs=rs.openrecordset
Do while not rs.EOF
Debug.print rs!ngaysinh
Rs.movenext
Loop
End sub

Thuộc tính Filter
Cú pháp:
<biến>.Filter= <btc>

Vd: lọc ra các sinh viên học khoa tin học
Sub Filtertinhoc()
Dim db as database
Dim rs as recordset
Set db=currentdb()
Set rs=db.recordset(“sinhvien”, dbdynaset)

Rs.Filter= “makh=’Tin học’”
Set rs=rs.openrecordset
Do while not rs.EOF
Debug.print “ma so: “ & rs!masv & “ khoa “ & rs!makh
Rs.movenext
Loop
End sub

Thuộc tính Index
Cú pháp:
<biến>.index =<btc>
Y nghĩa: thay đổi thứ tự sắp xếp hiện hành của các mẫu tin trong bộ mẫu tin.
Phương thức Seek
Cú pháp:
<biến>.Seek <btc1>, <bt1>, …
Trong đó:
Biến: tên biến
Btc1: biểu thức huỗi so sánh có thể là: <, >, <=, >=, =
Bt1, bt2… : là các giá trị cần dò tìm.

Vd: tìm mã số của một sinh viên trong bảng sinh viên
Sub Seekmasv(masvct as string)
Dim db as database
Dim rs as recordset
Set db=currentdb()
Set rs=db.recordset(“sinhvien”, dbopentable)
Rs.index=”primarykey”
Rs.seek “=”, masvct
Msgbox(rs.NoMatch, “khong tim thay”,”tim thay”)
End sub

  • Thuộc tính AbsolutePosition: trả về vị trí của mẫu tin hiện hành
  • Thuộc tính Bookmark: là một mảng số nguyên do hệ thống phát sinh ra dùng để chỉ định các định danh duy
  • nhất cho từng mẫu tin trong bộ mẫu tin.
  • Thuộc tính LastModified: chứa giá trị bookmark của mẫu tin gần nhất mới thêm vào hoặc sửa đổi dữ liệu.
  • Thuộc tính RecordsetClone: dùng chỉ đến bộ mẫu tin nằm bên dưới các biểu mẫu.

Trung tâm tin học BẢO NGHIỆP Đào tạo tin học ứng dụng - Tin học kỹ thuật - Tin học mỹ thuật chuyên nghiệp Thường xuyên khai giảng khóa mới: tin học cơ bản, tin học nâng cao, Thiết kế đồ họa, Khóa học Corel, Khóa học Illustrator, Khóa học Photoshop, Khóa học Autoad, Khóa học 3d max, Khoa học thiết kế khuôn mẫu Creo/Prametric 3.0 ... Cơ sở 1: số 27 đường CN6, phường Sơn Kỳ, quận Tân Phú, TPHCM Cơ sở 2: 168 Trần thanh mại, Kp2, Phường tân tạo A, quận Bình Tân. TPHCM ĐT: 0989.13.58.13 

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Hotline: 0989.13.58.13