Options
Ví dụ: Để mở cơ sở dữ liệu Education.mdb ta viết như sau:
Dim db As Database
Set db = OpenDatabase("....Education.mdb")
5.5.3. Đối tượng Database
Đối tượng Database là nơi để ứng dụng bắt đầu phần lớn các truy cập cơ sở dữ liệu của nó.
Sử dụng phương thức Execute của đối tượng Database để thi hành một câu lệnh SQL trên SQL cho phép: cập nhật, xoá hay sao chép bản ghi, sửa cấu trúc dữ liệu.
5.5.4 Đối tượng Recordset
Đối tượng Recordset dùng để thao tác với các bản ghi trong DAO.
a) Các thuộc tính
EOF(end of file): nhận giá trị True khi ta di chuyển quá bản ghi cuối cùng của Recordset.
BOF(begin of file): nhận giá trị True khi ta di chuyển đến một vị trí trước bản ghi thứ nhất trong Recordset. Nếu cả EOF và BOF đều nhận giá trị True có nghĩa là Recordset không chứa bản ghi nào.
MÈu tin 1 |
MÈu tin 2 ... |
EOF |
Có thể bạn quan tâm!
- Lập trình Window - 18
- Truy Xuất Dữ Liệu Thông Qua Data Control
- Tham Chiếu Đến Thư Viện Đối Tượng Của Dao
- Lập trình Window - 22
- Lập trình Window - 23
- Lập trình Window - 24
Xem toàn bộ 248 trang tài liệu này.
RecordCount: Dùng để xác định số bản ghi trong một Recordset. Giá trị của RecordCount sẽ không hợp lệ nếu ta chưa chuyển đến bản ghi cuối cùng trong Recordset.
Fields: Là một thuộc tính kiểu Collection, dùng để truy cập vào các trường trong một bản ghi
b) Các phương thức
Tạo đối tượng Recordset
Để tạo một đối tượng Recordset ta sử dụng phương thức OpenRecordset của đối tượng Database. OpenRecordset là một hàm trả về một đối tượng Recordset. Cú pháp:
OpenRecordset(Recordsource,Options)
Tham số Options của phương thức OpenRecordset xác định một số cách thức thao tác với bản ghi.
Ý nghĩa | |
dbOpentable | Trong một workspace của Microsoft Jet, tạo một đối tượng Recordset kiểu bảng (bảng được đánh chỉ mục chỉ sử dụng một bảng) |
dbOpenDynamic | Trong một workspace kiểu ODBCDirect, mở một đối tượng Recordset kiểu dynamic (cập nhật được dữ liệu khi người khác sửa đổi và truy vấn dữ liệu qua nhiều bảng) |
dbOpenDynaset | Mở một đối tượng kiểu Dynaset (tham chiếu đến recordset của nhiều bảng hoăc từ nhiều cơ sở dữ liệu khác) |
dbOpenForwardonly | Mở một đối tượng Recordset mà con trỏ của nó chỉ có thể di chuyển tới |
Ví dụ:
Dim db As Database Dim rs As Recordset
Set db = OpenDatabase("....Education.mdb") Set rs = db.OpenRecordset("Student")
Tham số bắt buộc duy nhất của phương thức OpenRecordset là nguồn dữ liệu. Đây là chuỗi ký tự, theo nguyên tắc là tên của một bảng hoặc một định nghĩa truy vấn chứa sẵn. Nhưng nó cũng có thể là một câu lệnh SELECT SQL.
Ví dụ:
Set rs = db.OpenRecordset("SELECT * FROM Student")
Nếu trong một câu lệnh SQL có chứa thành phần dạng xâu ký tự, ta dùng cặp „ „ để biểu diễn xâu ký tự đó tránh bị nhầm sang cặp dấu “ “.
Ví dụ:
Ta có câu lệnh SQL:
SELECT * FROM Student WHERE [ID]="IT003"
Khi đưa vào phương thức OpenRecordset ta viết:
Set rs = db.OpenRecordset("SELECT * FROM Student" & _ " WHERE [ID]='IT003'")
Nếu thành phần của câu lệnh SQL được truyền vào từ biến, ví dụ từ một biến có tên SID thì ta viết: '" & SID &"'.
Ví dụ:
Set rs = db.OpenRecordset("SELECT * FROM Student" & _ " WHERE [SID]='" & SID &"'")
Thêm một bản ghi mới
AddNew: là phương thức dùng để thêm một bản ghi mới, trắng vào cuối của recordset. Để bổ sung bản ghi mới vào trong đối tượng Recordset ta thực hiện 3 bước sau:
Bước 1. Gọi phương thức AddNew của RecordSet để thêm một bản ghi mới, trắng vào cuối của recordset.
Bước 2. Gán giá trị cho các trường trong bản ghi mới bằng cách sử dụng câu lệnh gán mà ta thường dùng với các trường cơ sở dữ liệu.
Bước 3. Dùng phương thức Update để ghi bản ghi mới vào cơ sở dữ liệu.
Ví dụ: Thủ tục Input_Data và sự kiện Click của nút Add sau đây cho phép thêm một bản ghi mới vào bảng Student.
Private Sub Input_Data()‟Thủ tục Input_Data để gán giá trị cho các trường rs.Fields("ID") = txtID.Text
rs.Fields("Name") = txtName.Text rs.Fields("Age") = Val(txtAge.Text)
If optMale.Value = True Then rs.Fields("Sex") = True
Else
rs.Fields("Sex") = False End If
rs.Fields("Add") = txtAdd.Text End Sub
„--------------------------------------------------------------
Private Sub cmdAdd_Click()
If cmdAdd.Caption = "&Add" Then txtID.Text = ""
txtName.Text = "" txtAge.Text = "" txtAdd.Text = ""
txtID.SetFocus rs.AddNew
cmdAdd.Caption = "&Save" Else
Call Input_Data rs.Update
cmdAdd.Caption = "&Add" End If
End Sub
Duyệt qua các bản ghi
MoveFirst : là phương thức cho phép di chuyển đến bản ghi đầu tiên trong recordset.
MoveNext : là phương thức cho phép di chuyển đến bản ghikế tiếp trong recordset.
MovePrevious : là phương thức cho phép di chuyển về bản ghi trước đó trong recordset.
MoveLast: là phương thức cho phép di chuyển đến bản ghi cuối cùng trong recordset.
Move : là phương thức cho phép di chuyển đến bản ghi đã được chỉ định trước.
Ví dụ: Sự kiện Click của các nút lệnh: First, Previous, Next, Last cho phép duyệt các bản ghi trong bảng Student.
Private Sub cmdFirst_Click()
If rs.RecordCount > 0 Then rs.MoveFirst
Call Output_Data End If
End Sub
„--------------------------------------------------------------
Private Sub cmdLast_Click()
If rs.RecordCount > 0 Then rs.MoveLast
Call Output_Data End If
End Sub
„--------------------------------------------------------------
Private Sub cmdNext_Click()
If rs.RecordCount > 0 And rs.EOF = False Then rs.MoveNext
If rs.EOF = False Then Call Output_Data End If
End Sub
„--------------------------------------------------------------
Private Sub cmdPrevious_Click()
If rs.RecordCount > 0 And rs.BOF = False Then rs.MovePrevious
If rs.BOF = False Then Call Output_Data End If
End Sub
Sửa nội dung bản ghi
Ta có thể sửa nội dung bản ghi hiện hành trong một đối tượng Recordset bằng cách dùng phương thức Edit và Update của Recordset. Muốn sửa đổi giá trị của một trường trong một Recordset, theo các bước sau :
Bước 1. Dùng các phương thức duyệt của đối tượng Recordset để di chuyển đến bản ghi cần sửa đổi.
Bước 2. Thi hành phương thức Edit của Recordset.
Bước 3. Dùng thuộc tính Fields của đối tượng Recordset để gán giá trị cho trường trong bản ghi.
Bước 4. Lưu bản ghi vào cơ sở dữ liệu bằng cách dùng phương thức Update của Recordset.
Ví dụ: Sự kiện Click của nút Edit sau cho phép sửa đổi nội dung bản ghi hiện hành trong bảng Student.
Private Sub cmdEdit_Click()
If cmdEdit.Caption = "&Edit" Then txtID.SetFocus
rs.Edit
cmdEdit.Caption = "&Save" Else
Call Input_Data rs.Update
cmdEdit.Caption = "&Edit" End If
End Sub
Tìm kiếm bản ghi
Để tìm một bản ghi trong một Recordset, ta dùng một trong bốn phương thức tìm kiếm của đối tượng Recordset:
FindFirst
FindLast
FindNext
FindPrevious
Cú pháp của bốn phương thức như nhau - để sử dụng một trong bốn phương thức tìm kiếm này, ta truyền một mệnh đề WHERE của SQL vào phương thức chỉ ra thông tin ta cần tìm kiếm. Sau khi thi hành phương thức, bản ghi hiện hành trong đối tượng Recordset trở thành bản ghi thoả mãn tiêu chí WHERE. Nếu tìm kiếm không định vị được bản ghi yêu cầu, thuộc tính NoMatch của đối tượng Recordset có giá trị là True.
Loại phương thức ta dùng cũng xác định cách thức tìm thấy bản ghi. Ví dụ, nếu dùng FindFirst , bộ máy cơ sở dữ liệu sẽ di chuyển đến bản ghi thứ nhất trong recordset thoả tiêu chí. FindNext và FindPrevious, ngược lại, tìm các bản ghi hiện hành. Điểm quan trọng cần lưu ý là, khác với một câu truy vấn SELECT của SQL, tìm kiếm không sinh ra một recordset. Khi bộ máy cơ sở dữ liệu tìm ra bản ghi thoả tiêu chí tìm kiếm, nó di chuyển đến bản ghi đó; bản ghi trở thành bản ghi hiện hành. Nếu không có bản ghi tìm thấy, bản ghi hiện hành sẽ được giữ nguyên và thuộc tính NoMatch của đối tượng Recordset có giá trị là True.
Ví dụ: Để tìm kiếm thông tin về sinh viên có mã sinh viên (SID) hoặc họ tên sinh viên (SName) được nhập từ bàn phím, ta có thể tìm kiếm tuần tự sử dụng phương thức FindFirst như trong sự kiện Click của nút Search sau:
Private Sub cmdSearch_Click() n = rs.Bookmark
If optID.Value = True Then Dim SID As String * 5
SID = InputBox("Enter the Student ID") rs.FindFirst "ID = '" & SID & "'"
If rs.NoMatch = True Then
MsgBox "Not found", vbOKOnly + vbExclamation, "Search result" rs.Bookmark = n
Else
Call Output_Data End If
Else
Dim SName As String * 30
SName = InputBox("Enter the Student Name") rs.FindFirst "Name = '" & SName & "'"
If rs.NoMatch = True Then
MsgBox "Not found", vbOKOnly + vbExclamation, "Search result" rs.Bookmark = n
Else
Call Output_Data End If
End If End Sub
Chú ý: Chỉ có thể sử dụng phương thức tìm kiếm tuần tự khi đối tượng Recordset được tạo bởi câu lệnh SQL. Nếu đối tượng Recordset được tạo dạng bảng thì chỉ có thể tìm kiếm theo chỉ mục bằng phương thức Seek.
Tìm kiếm bản ghi theo chỉ mục
Để tiến hành một tìm kiếm trên một chỉ mục, trước hết bảng phải có một chỉ mục.
Sau đó ta dùng phương thức Seek của đối tượng Recordset. Cú pháp: Seek Toán_tử, Biểu_thức
Ví dụ: Để tìm kiếm thông tin về sinh viên có mã sinh viên (SID) hoặc họ tên sinh viên (SName) được nhập từ bàn phím, ta có thể tìm kiếm theo chỉ mục sử dụng phương thức Seek như trong sự kiện Click của nút Search như sau:
Private Sub cmdSearch_Click() n = rs.Bookmark
If optID.Value = True Then Dim SID As String * 5
SID = InputBox("Enter the Student ID") rs.Index = "IDindex"
rs.Seek "=", SID
If rs.NoMatch = True Then
MsgBox "Not found", vbOKOnly + vbExclamation, "Search result" rs.Bookmark = n
Else
Call Output_Data End If
Else
Dim SName As String * 30
SName = InputBox("Enter the Student Name") rs.Index = "Nameindex"
rs.Seek "=", SName
If rs.NoMatch = True Then
MsgBox "Not found", vbOKOnly + vbExclamation, "Search result" rs.Bookmark = n
Else
Call Output_Data End If
End If End Sub
Điểm hạn chế của phương thức Seek là khả năng tìm kiếm trên một trường duy nhất và nó phải được đánh chỉ mục. Ngoài ra nó chỉ sử dụng các toán tử sau : >; <;
>=; <=; =
Khác với phương thức Seek, vốn hạn chế thì phương thức Find cho phép ta sử dụng các toán tử có sẵn của SQL như Like , In .
Xoá bản ghi
Để xoá bản ghi hiện hành, ta dùng phương thức Delete của đối tượng Recordset, phương thức Delete thực hiện việc xoá ngay bản ghi hiện hành khỏi bảng mà không cần gọi phương thức Update như đối với việc bổ sung và sửa nội dung bản ghi. Vì vậy, trong lập trình trước khi gọi phương thức Delete ta cần đối thoại với người sử dụng, và chỉ xoá bản ghi khi đã được người sử dụng xác nhận lại như trong thủ tục sự kiện Click của nút Delete sau:
Private Sub cmdDelete_Click()
Dim answer As Byte
answer = MsgBox("Do you want to delete the record?", vbYesNo + vbQuestion, "Delete data")
If answer = 6 Then rs.Delete
If rs.RecordCount > 0 Then If rs.EOF = False Then
rs.MoveNext Else
rs.MoveFirst End If
Call Output_Data End If
End Sub