1 Mục lục 1 2 Làm quen với visual basic 0 9


Tìm kiếm dữ liệu trong Recordset và bảng



tải về 1.69 Mb.
trang30/39
Chuyển đổi dữ liệu09.10.2016
Kích1.69 Mb.
#32631
1   ...   26   27   28   29   30   31   32   33   ...   39

13.5Tìm kiếm dữ liệu trong Recordset và bảng


Sau khi tạo một cơ sở dữ liệu và nhập liệu, ta cần một cách để định vị các mẩu tin riêng rẽ trong một recordset. Quá trình định vị một mẩu tin riêng rẽ trong recordset theo một tiêu chí chỉ định trước nào đó trong chương trình gọi là tìm kiếm.

Tìm kiếm khác với truy vấn là một truy vấn thì trả về một recordset. Tìm kiếm duyệt qua các mẩu tin trong recordset hiện hành để tìm ra một mẩu tin thoả mãn tiêu chí chỉ định.

Có một số kỹ thuật tìm kiếm dữ liệu. Sử dụng phương thức nào là tuỳ thuộc vào loại cấu trúc dữ liệu ta đang truy cập :


  • Nếu ta đang làm việc với một recordset, ta dùng các phương thức Find-FindFirst, FindNext, FindLast FindPrevious.

  • Nếu ta truy cập trực tiếp đến một recordset kiểu bảng, ta có thể dùng phương thức Seek để định vị mẩu tin. Phương thức này khó lập trình hơn, nhưng nó nhanh hơn vì ta có thể dùng một chỉ mục của bảng với phương thức Seek.

13.5.1Sử dụng phương thức Find để định vị mẩu tin trong một recordset


Để tìm một mẩu tin 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, mẩu tin hiện hành trong đối tượng Recordset trở thành mẩu tin thoả mãn tiêu chí WHERE. Nếu tìm kiếm không định vị được mẩu tin 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 mẩu tin. Ví dụ, nếu dùng FindFirst , bộ máy cơ sở dữ liệu sẽ di chuyển đến mẩu tin thứ nhất trong recordset thoả tiêu chí. FindNext FindPrevious, ngược lại, tìm các mẩu tin 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 mẩu tin thoả tiêu chí tìm kiếm, nó di chuyển đến mẩu tin đó; mẩu tin trở thành mẩu tin hiện hành. Nếu không có mẩu tin tìm thấy, mẩu tin 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.

13.5.2Sử dụng phương thức Seek để thi hành tìm kiếm 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.

Ví dụ sau đây, giả định rằng ta có một bảng tblCustomer với một chỉ mục trên trường LastName. Tên của chỉ mục là LastNameIndex.

Option Explicit

' References MS DAO 3.51 Object Library

Private db As Database

Private rs As Recordset

Private Sub Form_Load()

Set db = OpenDatabase("..\..\db\novelty.mdb")

Set rs = db.OpenRecordset("tblCustomer", dbOpenTable)

End Sub


Private Sub cmdSeek_Click()

rs.Index = "LastNameIndex"

rs.Seek "=", txtLastName.Text

If rs.NoMatch Then

' not found

MsgBox "No customer by that name was found.", vbExclamation

Else

' return info



MsgBox rs!Address & vbCrLf & _

rs!City & ", " & rs!State & " " & _

rs!Zip & vbCrLf & _

rs!Phone, _

vbInformation, _

rs!FirstName & " " & rs!LastName

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 .


13.5.3Lặp qua suốt tập hợp Indexes của TableDef


Để xác định các chỉ mục tồn tại trong một bảng, ta có thể lặp qua suốt tập hợp Indexes của đối tượng TableDef.

Option Explicit

' References MS DAO 3.51 Object Library

Private db As Database

Private rs As Recordset

Private Sub Form_Load()

Set db = OpenDatabase("..\..\db\novelty.mdb")

End Sub


Private Sub cmdShowIndexes_Click()

Dim td As TableDef

Dim ind As Index

Dim f As Field

Set td = db.TableDefs("tblCustomer")

For Each ind In td.Indexes

Debug.Print ind.Name

For Each f In ind.Fields

Debug.Print " On field: " & f.Name

Next


Next

End Sub


Lưu ý:Có thể dùng đoạn chương trình tương tự như trên để lặp qua suốt các tập hợp khác của DAO. Ví dụ, có thể dùng chương trình này để xem tất cả cơ sở dữ liệu trong một workspace, các định nghĩa truy vấn QueryDef trong một cơ sở dữ liệu, hoặc là các trường trong một TableDef.

13.5.4Sử dụng thuộc tính Bookmark để ghi nhớ vị trí trong một Recordset


Khi ta tiến hành các tác vụ trên một đối tượng Recordset, ta thường di chuyển đây đó trong recordset. Dùng thuộc tính Bookmark của đối tượng Recordset để giữ lại một vị trí sao cho ta có thể quay lại ví trí đó sau này.

Thuộc tính Bookmark cho ta một cách hiệu quả di chuyển giữa hai hay nhiều mẩu tin. Sử dụng bookmark thì nhanh hơn là lặp đi lặp lại phương thức Find để di chuyển qua từng mẩu tin.

Mỗi mẩu tin trong một recordset có thể đánh dấu bookmark được có một số hiệu bookmark duy nhất để ta có thể đọc ra hay ghi vào tại một thời điểm bất kỳ. Tuy nhiên, bookmark không được chứa trong cơ sở dữ liệu; nó được phát sinh tự động khi một đối tượng recordset được tạo và bị huỷ bỏ khi đối tượng recordset bị huỷ.

Để sử dụng bookmark, ta theo các bước sau:



  1. Di chuyển đến vị trí trong recordset ta muốn đánh dấu bookmark.

  2. Để gán giá trị thuộc tính bookmark của đối tượng Recordset cho một biến chuỗi. Nó sẽ lưu bookmark duy nhất cho mẩu tin hiện hành.

  3. Khi ta muốn quay lại mẩu tin, đổi thuộc tính Bookmark của recordset là giá trị của biến chuỗi. Mẩu tin hiện hành sẽ được đổi sang mẩu tin bookmark.

Lưu ý: Không phải mọi kiểu đối tượng Recordset đều hỗ trợ thuộc tính Bookmark. Để xác định xem ta có thể đánh dấu bookmark trên một kiểu recordset hay không , kiểm tra giá trị của thuộc tính bookmarkable. Nếu thuộc tính này là True, ta có thể đánh dấu bookmark trên Recordset.

13.5.5sử dụng tập hợp Errors và đối tượng Error để xử lý lỗi


Ứng dụng có thể xử lý lỗi trong DAO bằng cách sử dụng đối tượng Error và tập hợp Errors. Bởi vì Errors có sẵn trong lập trình cơ sở dữ liệu, một hoạt động nào đó đều có thể phát sinh nhiều hơn một lỗi. (Điều này chính xác với lập trình Client / Server , trong đó, ví dụ như khi server bị treo, tầng trung gian bị ảnh hưởng theo và trình điều khiển ODBC sẽ bị thất bại). Cả 3 tầng này đều phát sinh thông báo lỗi của riêng chúng, nhưng ta sẽ không thấy các thông báo lỗi này trừ phi ta có một tập hợp để duyệt qua).

Tập hợp Errors, thay vì đối tượng Error duy nhất, cho phép ta duyệt qua tất cả lỗi để xác định nguyên nhân vấn đề.

Ví dụ sau đây trình bày cách lặp xuyên qua tập hợp Errors của DBEngine để xem các lỗi phát sinh.

Option Explicit

' References: MS DAO 3.51

Dim db As Database

Dim rs As Recordset

Private Sub cmdBadFileName_Click()

On Error GoTo ErrHandler

Set db = OpenDatabase("..\..\DB\slez.mdb")

Exit Sub

ErrHandler:

Dim DBError As Error

Debug.Print "Contents of DBEngine Errors Collection"

Debug.Print "--------------------------------------"

For Each DBError In DBEngine.Errors

Debug.Print DBError.Description

Next


End Sub


tải về 1.69 Mb.

Chia sẻ với bạn bè của bạn:
1   ...   26   27   28   29   30   31   32   33   ...   39




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương