1. Kỹ thuật DAO
1.3 Đối tượng RecordSet
Recordset là đối tượng dùng để miêu tả tập hợp các bản ghi của một bảng, của một query hoặc tập các bản ghi kết quả của việc thi hành một câu lệnh SQL nào
đó.
Lớp các đối tượng con của Recordset được thể hiện qua sơđồ sau:
Khai báo
Set rs=db.OpenRecordset(<Name>)
Trong đó:
- Set rs = db.OpenRecordset là lệnh để tạo ra tập hợp các bản ghi từ CSDL db gán vào biến kiểu recordset rs;
- <Name> là một xâu ký tự chỉ ra nguồn dữ liệu sẽ trả về cho Recordset. Xâu này có thể là tên một bảng, một Query hoặc một câu lệnh SQL;
Mỗi biến Recordset khi làm việc, phải được chỉ ra Database xuất xứ của nó (phải được tham chiếu từ một biến kiểu Database đã được khai báo). Sau đây là các vắ dụ:
Vắ dụ 1:
Gán tập hợp các bản ghi từ một bảng vào biến Recordset (ở đây là bảng
canbo).
Dim rs As DAO.Recordset
Vắ dụ 2:
Gán tập hợp các bản ghi từ một câu lệnh chọn dữ liệu SQL vào biến Recordset (ởđây là các thông tin hoten, ngaysinh của tất cả các cán bộnữ từ bảng canbo).
Dim rs As DAO.Recordset
Set rs = db.OpenRecordset("SELECT hoten, ngaysinh FROM canbo WHERE gioitinh = False")
Một số thuộc tắnh của Recordset
Thuộc tắnh Name
Trả về xâu ký tự trong tham số <name> của lệnh gọi Recordset. Vắ dụ: lệnh sau sẽ cho biết xâu ký tự tạo nguồn dữ liệu cho Recordset là gì?
MsgBox rs.Name
Thuộc tắnh AbsolutePosition
Cho biết vị trắ bản ghi hiện tại (được tắnh từ 0). Trong trường hợp không có bản ghi nào trên recordset hoặc con trỏ bản ghi đang nằm ở EOF- sẽ không thể
lấy được giá trị thuộc tắnh này. Do vậy để sử dụng thuộc tắnh này thường phải đi kèm thuộc tắnh kiểm tra có tồn tại bản ghi nào hay không (RecordCount > 0) và con trỏ bản ghi có ở cuối tệp chưa (EOF = False).
Thuộc tắnh RecordCount
Cho biết tổng số bản ghi trả về trên Recordset Thuộc tắnh EOF
Cho biết con trỏ bản ghi hiện tại có nằm ở EOF hay không? Nếu có giá trị
thuộc tắnh này là True, trái lại là False. Thuộc tắnh Fields
Dùng tham chiếu tới các trường (Fields) trên tập hợp các bản ghi mà Recordset trả về. Thực tế Field cũng là một đối tượng và cũng có bộ thuộc tắnh và các phương thức của nó. Với Field của Recordset thông thường người ta hay sử dụng thuộc tắnh Value. Nếu không chỉ định thuộc tắnh cụ thể nào cho Field, VB vẫn hiểu ngầm định đó là Value.
Vắ dụ: Hiển thị giá trị trường hoten trong Recordset rs
Msgbox rs.Fields("hoten").Value
'hoặc
Msgbox rs.Fields("hoten")
Một số phương thức của Recordset
Phương thức Close
Để đóng Recordset, giải phóng bộ nhớ. Chỉ thực hiện hành động này khi không làm việc với Recordset nào đó.
Các phương thức di chuyển bản ghi của Recorset
Phương thức MoveFirts
Để chuyển con trỏ về bản ghi đầu tiên Phương thức MoveLast
Để di chuyển con trỏ về bản ghi cuối cùng Phương thức MoveNext
Dịch đến bản ghi kề sau Phương thức MovePrevious
Dịch đến bản ghi kề trước
Vắ dụ 3:
Vắ dụ sau duyệt và hiển thị toàn bộHoten của bảng canbo
Set rs = db.OpenRecordset("canbo") If rs.RecordCount > 0 Then
rs.MoveFirst
While rs.EOF = False
MsgBox rs.Fields("hoten").Value rs.MoveNext
Wend End If
Phương thức AddNew, Update
Để thêm mới một bản ghi vào Recordset. Qui trình thêm một bản ghi mới như
sau:
1. Ra lệnh Addnew
2. Gán giá trị cho các trường của bản ghi mới 3. Ra lệnh Update
Dưới đây là vắ dụ thêm mới một hồ sơ cán bộ mới vào bảng canbo.
Vắ dụ 4:
Dim rs As DAO.Recordset
Set rs = db.OpenRecordset("canbo")
'--- 'Ra lệnh thêm mới bản ghi '
rs.AddNew
'---
'Gán giá trị cho các trường của bản ghi mới '
rs.Fields("canboID") = "CB00565" rs.Fields("hoten") = "Nguyễn Sơn Hải" rs.Fields("ngaysinh") = #2/11/1975# rs.Fields("gioitinh") = True rs.Fields("chucvuID") = "CV002" '--- 'Ra lệnh ghi lại dữ liệu ' rs.Update
Phương thức Edit, Update
Phương thức Edit để sửa dữ liệu một bản ghi nào đó trên recordset. Qui trình
để sửa một bản ghi như sau:
1. Định vị tới bản ghi cần sử trên recordset 2. Ra lệnh Edit
3. Gán giá trị mới cho các trường cần sửa 4. Ra lệnh Update Dưới đây là vắ dụ về sửa hồ sơ cán bộ có mã CB000565 Vắ dụ 5: Dim rs As DAO.Recordset '--- 'Định vị tới bản ghi cần sửa '
Set rs = db.OpenRecordset("SELECT * FROM canbo WHERE canboID='CB0565'") If rs.RecordCount > 0 Then rs.MoveFirst '--- 'Ra lệnh sửa bản ghi ' rs.Edit '--- 'Thực hiện sửa các trường dữ liệu cần thiết '
rs.Fields("hoten") = "Nguyễn Văn Hải" rs.Fields("ngaysinh") = #22/11/1975# '--- 'Ra lệnh ghi lại dữ liệu vừa sửa ' rs.Update End If Phương thức Delete
Để xoá bản ghi hiện tại ra khỏi Recordset. Khi đó bản ghi hiện tại sẽ bị xoá bỏ
khỏi CSDL. Cần thận trọng mỗi khi ra lệnh này. Thông thường các lệnh một nút Xoá bản ghi của một mẫu nhập liệu (nhập vào biến Recordset rs) như sau:
Vắ dụ 6:
Private Sub cmDelete_Click() Dim tbao
tbao = MsgBox("Đã chắc chắn xoá chưa?", vbYesNo + vbCritical) If tbao = vbYes Then
rs.Delete rs.MoveNext End If
End Sub