<< Chapter < Page | Chapter >> Page > |
Nguyên nhân là VB dành ra một phần trong bộ nhớ (memory) để chứa đối tượng Database khi ta nhận được nó khi hàm OpenDatabase thực thi. Dù vị trí chỗ chứa đối tượng Database trong bộ nhớ không nhất định, nhưng vì ta nắm cán chỉ đến vị trí ấy nên ta vẫn có thể làm việc với nó một cách bình thường. Cái cán ấy là trị số của biến myDB. Vì trị số này không phải là Object (đối tượng), nhưng nó chứa memory address (địa chỉ trong bộ nhớ) chỉ đến (point to) đối tượng Database, nên ta gọi nó là Pointer (con trỏ).
Tương tự như vậy, vì Recordset là một Pointer chỉ đến một đối tượng, ta cũng dùng Set khi chỉ định một DAO Recordset lấy về từ hàm OpenRecordset của database myDB.
Set myRS = myDB.OpenRecordset("Select * from Titles ORDER BY Title")
Tham số kiểu String ta dùng cho hàm OpenRecordset là một câu lệnh SQL. Nó chỉ định cho cơ sở dữ liệu lấy tất cả mọi trường của mỗi mẩu tin từ Table Titles làm một Recordset và sắp xếp các mẩu tin trong Recordset ấy theo thứ tự abc của trường Title (ORDER BY Title).
Để ý là Recordset nầy cũng giống như thuộc tính Recordset của một Data Control mà ta dùng trong bài 7-1. Bây giờ có Recordset rồi, ta có thể hiển thị chi tiết của record đầu tiên nếu Recordset ấy có ít nhất một record. Ta kiểm tra điều ấy dựa vào thuộc tính RecordCount của Recordset như trong đoạn mã dưới đây của sự kiện Form_Load:
Private Sub Form_Load()
AppFolder = App.Path
If Right(AppFolder, 1)<>"\" Then AppFolder = AppFolder&"\"
Set myDB = OpenDatabase(AppFolder&"BIBLIO.MDB")
Set myRS = myDB.OpenRecordset("Select * from Titles ORDER BY Title")
If myRS.RecordCount>0 Then
myRS.MoveFirst
Displayrecord
End If
End Sub
Bước 5: Sau khi dùng hàm MoveFirst của Recordset để định vị mẩu tin hiện thời là mẩu tin đầu tiên, ta hiển thị trị số các trường của mẩu tin bằng cách gán chúng vào các textboxes của Form như sau:
Private Sub Displayrecord()
With myRS
txtTitle.Text = .Fields("Title")
txtYearPublished.Text = .Fields("[Year Published]")
txtISBN.Text = .Fields("ISBN")
txtPublisherID.Text = .Fields("PubID")
End With
End Sub
Để ý vì trường Year Published gồm có hai từ nên ta phải đặt tên của trường ấy giữa hai dấu ngoặc vuông ([]). Để tránh bị phiền phức như trong trường hợp nầy, khi đặt tên các trường tcủa table trong lúc thiết kế cơ sở dữ liệu hãy dán dính các chữ lại với nhau, đừng để rời ra. Thí dụ như dùng YearPublished thay vì Year Published.
CÁC NÚT DI CHUYỂN
Bước 6: Muốn có các nút Navigators giống như của một Control Data, ta hãy đặt lên Form 4 buttons mang tên CmdFirst, CmdPrevious, CmNext và CmdLast với captions:<<,<,>,>>.
Bước 7: Mã lệnh cho các nút nầy cũng đơn giản, nhưng ta phải coi chừng khi người dùng muốn di chuyển quá mẩu tin cuối cùng hay mẩu tin đầu tiên. Ta phải kiểm tra xem EOF có trở thành True khi người dùng nhấp CmdNext, hay BOF có trở thành True khi người dùng nhấp CmdPrevious.
Các sự kiện này được xử lý như sau:
Private Sub CmdNext_Click()
myRS.MoveNext
If Not myRS.EOF Then
Displayrecord
Else
myRS.MoveLast
End If
End Sub
Private Sub CmdPrevious_Click()
myRS.MovePrevious
If Not myRS.BOF Then
Notification Switch
Would you like to follow the 'Giáo trình visual basic' conversation and receive update notifications?