ADO存取資料庫如何顯示上一筆下一筆?
ADO存取資料庫如何顯示上一筆下一筆?
若要於RecordSet移動到上一筆下一筆的位置,讓我們先學會以下RecordSet物件的屬性和方法:
BOF屬性:目前指標指到RecordSet的第一筆。
EOF屬性:目前指標指到RecordSet的最後一筆。
Move方法:移動指標到RecordSet中的某一個記錄。
AbsolutePosition屬性:目前指標在RecordSet中的位置。
bookmark(書籤)屬性:於RecordSet的一筆記錄做一個記號。
詳細介紹如下:
BOF與EOF屬性
可以撰寫程式碼來檢查BOF與EOF屬性,來得知目前指標於RecordSet的位置:
BOF與EOF都為False:表示指標位於RecordSet當中。
BOF為True:目前指標指到RecordSet的第一筆。
EOF為True:目前指標指到RecordSet的最後一筆。
BOF與EOF都為True:在RecordSet裏沒有任何的資料記錄。
Move方法
您可以用Move方法移動指標到RecordSet中的某一筆記錄:
MoveFirst方法:移至第一筆記錄。
MoveLast方法:移至最後一筆記錄。
MoveNext方法:移至下一筆記錄。
MovePrevious方法:移至上一筆記錄。
Move [n]方法:移動指標到第n筆記錄,n由0算起。
AbsolutePosition屬性
若您需要確定目前指標在RecordSet中的位置,您可以用AbsolutePosition屬性。
AbsolutePosition屬性的數值為目前指標相對於第一筆的位置,由1算起,即第一筆的AbsolutePosition為1。然而,不要誤以為AbsolutePosition是資料記錄的編號,如果目前RecordSet處於未定的狀態,則AsolutePosition的數值為–1。
另外,在存取RecordSet時,無法保證RecordSet每次都以同樣的順序出現。
若要啟用AbsolutePosition,必須先設定為使用用戶端cursor,asp碼如下:
rs2.CursorLocation = 3
Move/AbsolutePosition例子
讓我們看一個於ASP程式碼當中使用Move/AbsolutePosition做到上一筆下一筆功能的例子。
譬如ASP程式碼如下:
<%
Set conn1 = Server.CreateObject("ADODB.Connection")
conn1.Open "DBQ="& Server.MapPath("ntopsamp.mdb") &";Driver={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;"
Set rs2 = Server.CreateObject("ADODB.Recordset")
SqlStr = "SELECT * From 著作"
Enable AbsolutePosition
rs2.CursorLocation = 3 adUseClient
rs2.Open SqlStr,conn1,1,1
if Request("sel") = "prev" then
Session("position") = Session("position") - 1
rs2.Move Session("position")
elseif Request("sel") = "next" then
Session("position") = Session("position") + 1
rs2.Move Session("position")
else
Session("position") = 0
end if
%>
<% = Session("position") %>
<TABLE COLSPAN=8 CELLPADDING=5 BORDER=0>
<TR>
<TD ALIGN=CENTER BGCOLOR="#008080"><FONT COLOR="#FFFFFF">書名</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#008080"><FONT COLOR="#FFFFFF">出版</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#008080"><FONT COLOR="#FFFFFF">圖片</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#008080"><FONT COLOR="#FFFFFF">簡介</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#008080"><FONT COLOR="#FFFFFF">AbsolutePosition</FONT></TD>
<TR>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs2("書名") %></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs2("出版") %></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs2("圖片") %></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs2("簡介") %></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs2.AbsolutePosition %></TD>
</TR>
</TABLE>
<% if Session("position") > 0 then %>
<A href=rs14.asp?sel=prev>上一筆</A>
<% end if %>
<% if Session("position") < rs2.RecordCount -1 then %>
<A href=rs14.asp?sel=next>下一筆</A>
<% end if %>
<% rs2.Close %>
以上的 ASP程式碼,於用戶端使用瀏覽器,瀏覽執行的結果,顯示上一筆下一筆的功能。
由Session("position")儲存這個使用者的RecordSet指標位置,當按下 [上一筆] 超連結時,由<A href=rs14.asp?sel=prev>上一筆</A>,將sel設定為prev,並重新執行rs14.asp的asp碼。由以下的程式部份,將Session("position")減一:
if Request("sel") = "prev" then
Session("position") = Session("position") - 1
rs2.Move Session("position")
elseif Request("sel") = "next" then
Session("position") = Session("position") + 1
rs2.Move Session("position")
else
Session("position") = 0
end if
然後使用Move Session("position")方法,將移動指標到第Session("position")個記錄,第一筆記錄的Session("position")值為0。
當按下 [下一筆] 超連結時,由<A href=rs14.asp?sel=next>下一筆</A>,將sel設定為next,並重新執行rs14.asp的asp碼。由以上的程式部份,將Session("position")加一,然後使用Move Session("position")方法,將移動指標到第Session("position")個記錄。
AbsolutePosition部份,首先由rs2.CursorLocation = 3設定為使用用戶端cursor,以啟用AbsolutePosition,即可由<%= rs2.AbsolutePosition %>顯示AbsolutePosition的值。
為了判斷是否要顯示 [上一筆] [下一筆] 超連結,由以下的程式部份:
<% if Session("position") > 0 then %>
<A href=rs14.asp?sel=prev>上一筆</A>
<% end if %>
<% if Session("position") < rs2.RecordCount -1 then %>
<A href=rs14.asp?sel=next>下一筆</A>
<% end if %>
就可以使用if Session("position") > 0、if Session("position") < rs2.RecordCount -1,比較目前的位置Session("position")和第一筆0、第末筆RecordCount -1的位置,來判斷是否要顯示 [上一筆] [下一筆] 的超連結。
Bookmark(書籤)
Bookmark(書籤)於RecordSet的一筆記錄做一個記號。
使用時先移動到那筆資料,然後給予Bookmark屬性一個名稱,即書籤記號的名稱,當要回到該筆記錄時,將Bookmark 屬性設為所設定書籤記號的名稱即可。
Bookmark例子
如何使用Bookmark(書籤)呢?讓我們看一個於ASP程式碼當中使用Bookmark的例子。
譬如ASP程式碼如下:
<%
Set conn1 = Server.CreateObject("ADODB.Connection")
conn1.Open "DBQ="& Server.MapPath("ntopsamp.mdb") &";Driver={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;"
Set rs2 = Server.CreateObject("ADODB.Recordset")
SqlStr = "SELECT * From 著作"
rs2.Open SqlStr,conn1,1,1
rs2.MoveNext
if Request("sel") = "last" then
rs2.MoveLast
elseif Request("sel") = "first" then
rs2.MoveFirst
elseif Request("sel") = "prev" then
Session("position") = Session("position") - 1
rs2.Move Session("position")
elseif Request("sel") = "next" then
Session("position") = Session("position") + 1
rs2.Move Session("position")
elseif Request("sel") = "set" then
rs2.Move Session("position")
Session("bk") = rs2.Bookmark
elseif Request("sel") = "go" then
rs2.Bookmark = Session("bk")
else
Session("position") = 0
end if
%>
<TABLE COLSPAN=8 CELLPADDING=5 BORDER=0>
<TR>
<TD ALIGN=CENTER BGCOLOR="#008080"><FONT COLOR="#FFFFFF">書名</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#008080"><FONT COLOR="#FFFFFF">出版</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#008080"><FONT COLOR="#FFFFFF">圖片</FONT></TD>
<TD ALIGN=CENTER BGCOLOR="#008080"><FONT COLOR="#FFFFFF">簡介</FONT></TD>
<TR>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs2("書名")%></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs2("出版")%></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs2("圖片")%></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs2("簡介")%></TD>
</TR>
</TABLE>
<A href=rs13.asp?sel=first>第一筆</A>
<% if Session("position") > 0 then %>
<A href=rs13.asp?sel=prev>上一筆</A>
<% end if %>
<% if Session("position") < rs2.RecordCount -1 then %>
<A href=rs13.asp?sel=next>下一筆</A>
<% end if %>
<A href=rs13.asp?sel=last>最末筆</A>
<A href=rs13.asp?sel=set>設定Bookmark</A>
<A href=rs13.asp?sel=go>到Bookmark</A>
<% rs2.Close %>
由Session("bk")儲存這個使用者RecordSet 的bookmark(書籤)位置,當按下 [設定Bookmark] 超連結時,由<A href=rs13.asp?sel=set>設定Bookmark</A>,將sel設定為set,並重新執行rs13.asp的asp碼。由以下的程式部份,首先rs2.Move Session("position")回到上次的位置,然後使用Session("bk") = rs2.Bookmark設定書籤,Session("Bookmark")儲存書籤記號的名稱:
if Request("sel") = "last" then
rs2.MoveLast
elseif Request("sel") = "first" then
rs2.MoveFirst
elseif Request("sel") = "prev" then
Session("position") = Session("position") - 1
rs2.Move Session("position")
elseif Request("sel") = "next" then
Session("position") = Session("position") + 1
rs2.Move Session("position")
elseif Request("sel") = "set" then
rs2.Move Session("position")
Session("bk") = rs2.Bookmark
elseif Request("sel") = "go" then
rs2.Bookmark = Session("bk")
else
Session("position") = 0
end if
當按下 [到Bookmark] 超連結時,由<A href=rs13.asp?sel=go>到Bookmark</A>,將sel設定為go,並重新執行rs13.asp的asp碼。由以上的程式部份,由rs2.Bookmark = Session("bk")回到上次書籤記號的位置