Đánh giá chủ đề:
  • 3 Votes - 3.67 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Dùng các phương thức Find của Recordset
#1
Tác giả: Phatnq2002- DanKeToan
Trong bài này, tôi sẽ nói việc sử dụng các phương thức Find của một đối tượng Recordset thuộc thư viện DAO.

Trước tiên, xin lưu ý trong thư viện ADO cũng có đối tượng Recordset, nhưng phương thức Find của đối tượng này sẽ khác với phương thức Find của DAO.Recordset.

Có bốn phương thức Find của DAO.Recordset:
- FindFirst: khi gọi phương thức này, con trỏ record sẽ nhảy ngay về record đầu tiên và tiến hành việc tìm kiếm record đầu tiên thỏa điều kiện tìm. Trong trường hợp recordset không có record nào (RecordCount = 0) thì phương thức này sẽ gây ra một lỗi khi gọi nó.
- FindNext: khi gọi phương thức này, việc tìm kiếm sẽ thực hiện bắt đầu từ vị trí record mà con trỏ record đang đứng đến record cuối cùng. Cũng tương tự như FindFirst, Trong trường hợp recordset không có record nào (RecordCount = 0) thì phương thức này sẽ gây ra một lỗi khi gọi nó. Ngoài ra nếu khi đã con trỏ record duyệt tới record EOF (End of File) mà phương thức này được gọi thì sẽ xảy ra một lỗi.
- FindPrevious: khi gọi phương thức này, việc tìm kiếm sẽ thực hiện bắt đầu từ vị trí record mà con trỏ record đang đứng trở về record đầu tiên. Cũng tương tự như FindFirst, Trong trường hợp recordset không có record nào (RecordCount = 0) thì phương thức này sẽ gây ra một lỗi khi gọi nó. Ngoài ra nếu khi đã con trỏ record duyệt tới record BOF (Begin of File) mà phương thức này được gọi thì sẽ xảy ra một lỗi.
- FindLast: khi gọi phương thức này, con trỏ record sẽ nhảy ngay về record cuối cùng và tiến hành việc tìm kiếm record đầu tiên thỏa điều kiện tìm nhưng ngược từ dưới lên. Trong trường hợp recordset không có record nào (RecordCount = 0) thì phương thức này sẽ gây ra một lỗi khi gọi nó.

Cách gọi phương thức:
đối_tượng_recordset.FindFirst điều_kiện
đối_tượng_recordset.FindNext điều_kiện
đối_tượng_recordset.FindPreviuos điều_kiện
đối_tượng_recordset.FindLast điều_kiện


Trong đó điều_kiện là chuỗi thể hiện nội dung tìm kiếm.

Để minh họa cho cách sử dụng các phương thức trên, chúng ta đặt ra một bài toán sau:
Giả sử chúng ta thiết kế một form nhập liệu danh sách khách hàng (makh, tenkh, diachi). Trong form này có một nút Tìm (cmdFind). Khi nhấn nút này sẽ cho hiện ra một form khác để người sử dụng nhập vào tên khách hàng cần tìm (textbox tenkh) và 3 nút: Thi hành (cmdFind), Tìm tiếp (cmdFindNext) và Thôi (cmdClose).
Khi nhấn nút Thi hành sẽ cho thực hiện một thủ tục, trong đó tìm kiếm xem có khách hàng nào thỏa mãn điều kiện tìm không. Nếu có thì cho hiển thị thông tin của khách hàng đó ở form KhachHang. Nếu không thì báo là không tìm thấy.
Khi nhấn nút Tiếp, sẽ cho thực hiện một thủ tục xem có khách hàng nào còn thỏa mãn điều kiện tìm không. Nếu có thì cho hiển thị thông tin của khách hàng đó ở form KhachHang. Nếu không thì báo là không còn tìm thấy.
Nút Thôi chủ yếu là đóng form Tim lại mà thôi.
Bây giờ vào code đây:

Bước 1: ở form KhachHang, thiết lập thủ tục sự kiện Click cho nút lệnh cmdFind như sau:
DoCmd.OpenForm "TIM" ' Để cho hiển thị form Tim

Bước 2: Ở form Tim, trong khu vực Declaration (tức là dưới dòng lệnh Option Explicit và/hoặc Option Compare Database), cho dòng lệnh khai báo sau:
Dim st As String, rs As DAO.Recordset

Thiết lập các thủ tục sự kiện sau:


Mã PHP:
Private Sub Form_Load ()
    
Set rs Forms("KHACHHANG").RecordsetClone ' gán dữ liệu nguồn của form KhachHang vào recordset
    End Sub

    Private Sub cmdFind_Click ()
    st = "tenkh LIKE '
*" & tenkh & "*'" 'dùng toán tử LIKE để tìm kiếm tương đối
    On Error 
GoTo loi_Find
    rs
.FindFirst st
    
If rs.NoMatch Then ' nếu không tìm thấy
    MsgBox "Không tìm thấy."
    Else
    Forms("KHACHHANG").Bookmark = rs.Bookmark '
cho hiển thị lên form KhachHang thông tin khách đã tìm thấy
    End 
If
    
thoat_Find:
    Exit 
Sub
    loi_Find
:
    
MsgBox "Lỗi. Có thể danh sách khách hàng đang trống."
    
Resume thoat_Find
    End Sub 
Mã PHP:
Private Sub cmdFindNext_Click ()
    
On Error GoTo loi_FindNext
    rs
.FindNext st
    
If rs.NoMatch Then ' nếu không tìm thấy nữa
    MsgBox "Không còn tìm thấy."
    Else
    Forms("KHACHHANG").Bookmark = rs.Bookmark '
cho hiển thị lên form KhachHang thông tin khách đã tìm thấy
    End 
If
    
thoat_FindNext:
    Exit 
Sub
    loi_FindNext
:
    
MsgBox "Lỗi. Có thể danh sách khách hàng đang trống."
    
Resume thoat_FindNext
    End Sub

    
Private Sub cmdClose_Click ()
    
DoCmd.Close acFormMe.Name
    End Sub 

Trên chỉ là những đoạn code chính, các bạn có thể thêm mắm muối vào cho hợp ý mình.
Chữ ký của Noname 020
ღღღღღTài sản của Noname (View All Items) ღღღღღ
Reply
Những người đã cảm ơn maidinhdan , chigonvh
#2
Cho e hỏi làm thế nào để biết mình đang ở record đầu hay cuối. Ví dụ đang ở record đầu thì nút Previous sẽ disabled, ở record cuối thì nút Next sẽ disabled. (Cho giống với access). 
Thank!
Chữ ký của chigonvh Xin chào, mình là chigonvh, Tham gia http://thuthuataccess.com/forum từ ngày 28-05 -12.
Reply
Những người đã cảm ơn
#3
(19-10-15, 10:03 AM)chigonvh Đã viết: Cho e hỏi làm thế nào để biết mình đang ở record đầu hay cuối. Ví dụ đang ở record đầu thì nút Previous sẽ disabled, ở record cuối thì nút Next sẽ disabled. (Cho giống với access). 
Thank!

Ở đầu: rs.BOF (Beginning Of Fields)
Ở cuối: rs.EOF (Ending Of Fields)
Chữ ký của tranthanhan1962 Kết quả cuối cùng của một đời người, không phải bạn có được bao nhiêu tiền bạc, tài sản. Mà bạn còn bao nhiêu người bạn  thumbs up
ღღღღღTài sản của tranthanhan1962 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn chigonvh


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  Tạo Menu bar không cần dùng Macro tranthanhan1962 6 764 07-12-16, 09:19 AM
Bài mới nhất: ChiMai
  Tài Liệu Sử dụng phương thức Runcommand Xuân Thanh 0 1,439 17-12-12, 04:01 PM
Bài mới nhất: Xuân Thanh
  Tài Liệu Video giải bài tập Access, dùng cho Access 2007 của Huỳnh bá Học Xuân Thanh 0 2,526 17-12-12, 03:11 PM
Bài mới nhất: Xuân Thanh
  Cách thức tạo Add-in cho Access Noname 0 2,562 06-09-10, 12:05 PM
Bài mới nhất: Noname

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ