ĐỐI TƯỢNG RECORDSET

Một phần của tài liệu Đề cương bài giảng môn học lập trình mạng (Trang 107 - 111)

VII. PHẦN TỬ SELECT

2.ĐỐI TƯỢNG RECORDSET

Mặc dù đối tượng Connection dễ dàng tạo một kết nối và thực hiện truy vấn, nhưng đối tượng này cịn nhiều hạn chế. Hạn chế của đối tượng này là khả năng thao tác với cơ sở dữ liệu khơng mềm dẻo, phải biết chính xác trước cấu trúc của dữ liệu mới thực hiện truy vấn được . . . Để khắc phục những hạn chế này ADO cung cấp đối tượng Recordset. Recordset cho phép lấy dữ liệu, nghiên cứu kết quả, và cập nhật cơ sở dữ liệu. Đối tượng Recordset duy trì vị trí của mỗi bản ghi được trả về bởi một truy vấn, vì vậy ta cĩ thể duyệt từng bản ghi một từ bản ghi đầu tiên tới bản ghi cuối cùng. Tạo ra một đối tượng Recordset cĩ dạng như sau:

<% Set biến_đối_tượng= Server.CreateObject(“ADODB.Recordset”) biến_đối_tượng .open source, ActiveConnection , CursorType,

LockType %>

* Source: Thường là một xâu lệnh SQL, cũng cĩ thể là tên của một bảng. * ActiveConnection: Tham số thứ hai của phương thức Open là một trong

hai dạng sau:

+ Chỉ ra một kết nối đã tạo ra bằng đối tượng Connection. Cách này thường được dùng nhiều hơn bởi vì chỉ cần tạo một kết nối bằng đối tượng Connection ta cĩ thể tạo ra nhiều đối tượng Recordset sử dụng kết nối này.

* CursorType: Tham số này cĩ thể là một trong 4 giá trị :

+ 0 Là kiểu Forword_Only. Kiểu này chỉ cho phép di chuyển con trỏ về phía trước, với kiểu này ta khơng thể thấy được sự thay đổi dữ liệu bởi người dùng khác. Forword_only khơng cho phép dùng thuộc tính MoveFirst, Moveprevious, MoveLast chính vì vậy nĩ cũng khơng cho phép dùng thuộc tính RecordCount (tính tổng các bản ghi). Tuy nhiên lại là kiểu tốn ít bộ nhớ nhất. Đây là dạng mặc định của phương thức OPEN.

+ 1 Là kiểu Keyset. Đặc điểm của kiểu này là số bản ghi khơng bao giờ thay đổi, khơng thấy được sự tác động của người dùng khác với dữ liệu. + 2 Là kiểu Dynamic. Kiểu này cho phép ta thấy được sự cập nhật các bản ghi bởi người dùng khác. Kiểu này hỗ trợ nhiều chức năng của Recordset nhất nhưng giá phải trả là tốn bộ nhớ nhất và xử lý chậm nhất.

+ 3 Là kiểu Static. Kiểu này cũng khơng cho phép biết được sự thay đổi các bản ghi bởi người dùng khác.

Nĩi chung các kiểu trên đây chỉ khác nhau ở việc phản ánh những thay đổi trên các bản ghi bởi người dùng khác.

* Tham số LockType : Tham số khố này cũng cĩ 4 giá trị sau Giá trị Hằng biểu diễn Tên

1 AdLockReadOnly Read Only

2 AdLockPessimistic Pessimistic locking 3 AdLockOptimistic Optimistic locking 4 AdLockBatchOptimistic Optimistic locking with

batch update.

Trong các giá trị này đáng chú ý nhất là kiểu Read Only khơng cho phép cập nhật và kiểu Optimistic cho phép cập nhật các bản ghi (chỉ khố bản ghi khi ADO cập nhật vật lý bản ghi).

AddNew: Cho phép thêm một bản ghi mới. Phương thức này được sử dụng như sau: Tên_Recordset.AddNew Tên_Recordset(“Tên_trường”)= giá_trị . . . Tên_Recordset.Update

Update: Ghi nhớ những thay đổi của Recordset.

CancelBatch: Hủy bỏ tất cả dữ liệu mới cập nhật

CancelUpdate: Hủy bỏ dữ liệu mới cập nhật

Close: Đĩng Recordset

Delete: Xĩa bản ghi hiện thời

MoveFirst: Di chuyển con trỏ tới bản ghi đầu tiên

MoveLast: Di chuyển con trỏ tới bản ghi cuối cùng

MovePrevious: Di chuyển con trỏ tới bản ghi trước đĩ

MoveNext: Di chuyển con trỏ tới bản ghi tiếp theo.

Move n: Di chuyển n bản ghi kể từ bản ghi hiện tại

NextRecordset: Chuyển đến recordset tiếp theo

Open: Mở một Recordset

Requery: Thực hiện truy vấn cập nhật dữ liệu

UpdateBatch: Ghi tất cả dữ liệu đã được cập nhật lên đĩa

Sau đây là một số thuộc tính thơng dụng của Recordset:

 EOF: Nếu TênRecordset.EOF=true thì ADO báo cho biết con trỏ đã ở vị trí cuối cùng của Recordset. Thuộc tính này thường được dùng dể kiểm tra xem đã duyệt hết các bản ghi trong Rcordset. Ví dụ đoạn script được viết như sau:

<%

Do While Not Tên_Recordset.EOF Các lệnh xử lý bản ghi hiện tại Tên_Recordset.MoveNext

End Do

%>

 BOF: Kiểm tra con trỏ đã ở vị trí đầu tiên của Recordset chưa.

 RecordCount: Cho biết tổng số bản ghi hiện tại.

 Filter: Đặt lọc cho Recordset cĩ dạng như sau: <%

Tên_Recordset.Filter = “ Điều kiện của lọc ” %>

Khi đặt lọc mới thì lọc cũ bị mất đi và Recordset lúc đĩ chỉ cịn lại những bản ghi thoả mãn điều kiện của lọc.

Tất cả các thuộc tính và phương thức của đối tượng Recordset cho phép thao tác với cơ sở dữ liệu ở mức hàng. Để cĩ thể thao tác các bảng ở mức cột ADO cung cấp một đối tượng Fields là đối tượng con của RecordSet. Ta cĩ thể lấy giá trị của các trường của bản ghi hiện tại theo cách sau:

Biến_Recordset(“Tên_trường”). Với trường hợp khơng biết chính xác tên trường cĩ thể dùng Biến_Recordset(i).name để biết tên trường và dùng Biến_Recordset.Fields(i).value để lấy giá trị trường thứ i của bản ghi hiện tại. Việc đánh số các trường được bắt đầu từ 0 đến tổng số các trường trừ 1 . Ví dụ sau hiển thị tất cả các bản ghi của bảng sinh_viên:

<HTML>

<HEAD><Title> Vidu.ASP </Title></HEAD> <% set con=server.CreateObject("ADODB.Connection") con.Open "DSN" Set rst=Server.CreateObject("ADODB.Recordset") rst.Open "sinh_vien",con %> <BODY> <TABLE BORDER=1> <TR>

<% For i=1 to rst.fields.count-1 %>

<TD><B><%=rst(i).Name %></B></TD> <% Next %>

</TR>

<% Do While not rst.EOF %> <TR>

<% For i=1 to rst.fields.count-1 %> <TD><%=rst.Fields(i).Value %></TD> <% Next %> </TR> <% rst.MoveNext Loop rst.Close

%>

</TABLE> </BODY> </HTML>

Một phần của tài liệu Đề cương bài giảng môn học lập trình mạng (Trang 107 - 111)