Lập trình Window - 21

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.

BOF

MÈu tin 1


MÈu tin 2

...

EOF

Có thể bạn quan tâm!

Xem toàn bộ 248 trang tài liệu này.

Lập trình Window - 21

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.



Hằng

Ý 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

..... Xem trang tiếp theo?
⇦ Trang trước - Trang tiếp theo ⇨

Ngày đăng: 16/07/2022