?? 23-3.cfm.htm
字號(hào):
<P ALIGN="JUSTIFY">Set MyConn=Sever.CreateObject(</FONT><FONT FACE="Playbill,Courier New" SIZE=3>“</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>ADODB.Connection</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>)</P>
<P ALIGN="JUSTIFY">Set RS=Sever.CreateObject(</FONT><FONT FACE="Playbill,Courier New" SIZE=3>“</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>ADODB.RecordSet</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>)</P>
<P ALIGN="JUSTIFY">MyConn.Open </FONT><FONT FACE="Playbill,Courier New" SIZE=3>“</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>FILEDSN=d:\Program Files\</P>
<P ALIGN="JUSTIFY"> Common Files\ODBC\Data Sources\MyData.dsn</P>
<P ALIGN="JUSTIFY">RS.Open </FONT><FONT FACE="Playbill,Courier New" SIZE=3>“</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>SELECT * FROM Password_Table </P>
<P ALIGN="JUSTIFY"> WHERE Password=</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>&Request.Form(</FONT><FONT FACE="Playbill,Courier New" SIZE=3>“</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>Password</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>),Myconn</P>
<P ALIGN="JUSTIFY">IF RS.EOF THEN</P>
<P ALIGN="JUSTIFY"> Response.Write(</FONT><FONT FACE="Playbill,Courier New" SIZE=3>“</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>The password you entered is invalid.</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>)</P>
<P ALIGN="JUSTIFY">ELSE</P>
<P ALIGN="JUSTIFY"> Response.Write(</FONT><FONT FACE="Playbill,Courier New" SIZE=3>“</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>Welcome to our web site!</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>)</P>
<P ALIGN="JUSTIFY">END IF</P>
<P ALIGN="JUSTIFY">RS.Close</P>
<P ALIGN="JUSTIFY">MyConn.Close</P>
<P ALIGN="JUSTIFY">%></P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">在這個(gè)例子中,用EOF屬性檢測(cè)是否一個(gè)查詢有返回結(jié)果。如果EOF屬性是true,說明用戶輸入的口令不在保存口令的表中。</P>
<P ALIGN="JUSTIFY">在某些情況下,你的確需要返回記錄數(shù)目。例如,你也許想顯示在你站點(diǎn)上注冊(cè)的用戶總數(shù)。但是同樣,你應(yīng)該避免使用RecordCount屬性。取而代之,你可以執(zhí)行一個(gè)SQL COUNT(*)查詢,如下例所示:</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY"><!--#INCLUDE VIRTUAL=</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>ADOVBS.inc</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>--></P>
<P ALIGN="JUSTIFY"><%</P>
<P ALIGN="JUSTIFY">Set MyConn=Sever.CreateObject(</FONT><FONT FACE="Playbill,Courier New" SIZE=3>“</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>ADODB.Connection</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>)</P>
<P ALIGN="JUSTIFY">Set RS=Sever.CreateObject(</FONT><FONT FACE="Playbill,Courier New" SIZE=3>“</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>ADODB.RecordSet</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>)</P>
<P ALIGN="JUSTIFY">MyConn.Open </FONT><FONT FACE="Playbill,Courier New" SIZE=3>“</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>FILEDSN=d:\Program Files\</P>
<P ALIGN="JUSTIFY"> Common Files\ODBC\Data Sources\MyData.dsn</P>
<P ALIGN="JUSTIFY">RS.Open </FONT><FONT FACE="Playbill,Courier New" SIZE=3>“</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>SELECT COUNT(*) Mycount FORM Password_Table</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>,MyConn</P>
<P ALIGN="JUSTIFY">%></P>
<P ALIGN="JUSTIFY">There are <% =RS(</FONT><FONT FACE="Playbill,Courier New" SIZE=3>“</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>MyCount</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>)%> registered users at the web site.</P>
<P ALIGN="JUSTIFY"><%</P>
<P ALIGN="JUSTIFY">RS.Close</P>
<P ALIGN="JUSTIFY">MyConn.Close</P>
<P ALIGN="JUSTIFY">%></P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">注意這個(gè)查詢中如何使用字段別名Mycount。通過給集合函數(shù)COUNT(*)提供一個(gè)名字,你可以在輸入查詢結(jié)果時(shí)使用這個(gè)名字。</P>
<P ALIGN="JUSTIFY"> </P>
<B><P ALIGN="JUSTIFY">注意</P>
</B><P ALIGN="JUSTIFY">下一章將討論用SQL存儲(chǔ)過程返回記錄數(shù)目的方法。參見“在命令對(duì)象中使用返回狀態(tài)值”一節(jié)。</P>
<P ALIGN="JUSTIFY"> </P>
</FONT><B><FONT FACE="宋體" LANG="ZH-CN"><P ALIGN="JUSTIFY">對(duì)記錄集進(jìn)行分頁</P>
</B></FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">假設(shè)你想顯示你站點(diǎn)上銷售的一系列商品。但是,你正在經(jīng)營幾百種項(xiàng)目。在這種情況下,你可能不希望把所有的商品顯示在同一個(gè)ASP頁中。這時(shí)允許用戶進(jìn)行翻頁將是個(gè)不錯(cuò)的辦法。</P>
<P ALIGN="JUSTIFY">記錄集對(duì)象有三個(gè)屬性用于此目的。你可以使用這些屬性把一個(gè)記錄集中的記錄分成許多邏輯頁。通過把記錄集中的記錄進(jìn)行分頁,你可以一次只顯示記錄集中的一部分。下面列出了這些屬性:</P>
<P ALIGN="JUSTIFY"> </P>
<UL>
<P ALIGN="JUSTIFY"><LI>AbsolutePage。指定當(dāng)前的頁。</LI></P>
<P ALIGN="JUSTIFY"><LI>PagePount。返回記錄集中的邏輯頁數(shù)。</LI></P>
<P ALIGN="JUSTIFY"><LI>PageSize。指定一個(gè)邏輯頁中的記錄個(gè)數(shù),缺省值是10。</LI></P></UL>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">要把一個(gè)記錄集分成多個(gè)頁,你應(yīng)使用PageSize屬性指定一頁中的記錄個(gè)數(shù)。然后你就可以用AbsolutePage屬性移動(dòng)到一個(gè)特定的頁。最后,PageCount屬性可以用來反回總頁數(shù)。表23.1演示了如何使用這些屬性(見圖23.2)。</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">表23.1 pages.asp</P>
<P ALIGN="JUSTIFY"><HTML><HEAD><TITLE> Recordset With Pages </TITLE></HEAD><BODY><!-- #INCLUDE VIRTUAL="ADOVBS.inc" --><%' Figure out the current pageIF Request.QueryString("MOVE")="NEXT" THEN Session("CurrentPage")=Session("CurrentPage")+1END IFIF Request.QueryString("MOVE")="PREV" THEN Session("CurrentPage")=Session("CurrentPage")-1END IFIF Session("CurrentPage")="" THEN Session("CurrentPage")=1END IF%><H1>Current Page: <%=Session("CurrentPage")%></H1><HR><%' Open a Connection and RecordsetSet MyConn=Server.CreateObject("ADODB.Connection")Set RS=Server.CreateObject("ADODB.RecordSet")MyConn.Open "FILEDSN=d:\Program Files\Common Files\ODBC\Data Sources\MyData.dsn"' Retrieve the list of productsRS.Open "SELECT ProductName FROM Products", MyConn,adOpenStatic' Set the number of records in a pageRS.PageSize=5' Set the current pageRS.AbsolutePage=Session("CurrentPage")' Show the records for the current pageWHILE NOT RS.EOF AND NumRows<RS.PageSize%><BR>Product Name: <%=RS("ProductName")%><%RS.MoveNextNumRows=NumRows+1WEND%><HR><% IF Session("CurrentPage")>1 THEN %><A HREF="pages.asp?MOVE=PREV"> [PREV] </A><% END IF %><% IF Session("CurrentPage")<RS.PageCount THEN %><A HREF="pages.asp?MOVE=NEXT"> [NEXT] </A><% END IF %><%RS.CloseMyConn.Close%></BODY></HTML></P>
<P ALIGN="JUSTIFY"><IMG SRC="Image116.gif" tppabs="http://210.74.168.175/guide/asp/part23/Image116.gif" WIDTH=535 HEIGHT=276> <B>圖23.2 對(duì)記錄集進(jìn)行分頁</P>
</B><P ALIGN="JUSTIFY">這個(gè)ASP網(wǎng)頁一次顯示表Products中的五條記錄一個(gè)session變量Currentpage被用來跟蹤記錄集的當(dāng)前頁。當(dāng)用戶單擊NEXT時(shí),就顯示下一頁記錄,當(dāng)用戶單擊PREV時(shí),就顯示上一頁。</P>
<P ALIGN="JUSTIFY"> </P>
</FONT><B><FONT FACE="宋體" LANG="ZH-CN"><P ALIGN="JUSTIFY">把記錄取到數(shù)組中</P>
</B></FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">在特定情況下,你將需要把記錄集中的記錄取到數(shù)組中。例如,如果你需要修改一個(gè)記錄集中的數(shù)據(jù),擔(dān)你不想改變記錄集中的記錄本身,這時(shí)你可以把記錄取到數(shù)組中。</P>
<P ALIGN="JUSTIFY">要把一個(gè)記錄集中的記錄分配給一個(gè)數(shù)組,應(yīng)使用記錄集對(duì)象的GetRows()方法。這里有一個(gè)例子:</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY"><%</P>
<P ALIGN="JUSTIFY">Set MyConn=Sever.CreateObject(</FONT><FONT FACE="Playbill,Courier New" SIZE=3>“</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>ADODB.Connection</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>)</P>
<P ALIGN="JUSTIFY">Set RS=Sever.CreateObject(</FONT><FONT FACE="Playbill,Courier New" SIZE=3>“</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>ADODB.RecordSet</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>)</P>
<P ALIGN="JUSTIFY">MyConn.Open </FONT><FONT FACE="Playbill,Courier New" SIZE=3>“</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>FILEDSN=d:\Program Files\</P>
<P ALIGN="JUSTIFY"> Common Files\ODBC\Data Sources\MyData.dsn</P>
<P ALIGN="JUSTIFY">RS.Open </FONT><FONT FACE="Playbill,Courier New" SIZE=3>“</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>SELECT MyFirstCol,MySecondCol FORM Mytable</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>,MyConn</P>
<P ALIGN="JUSTIFY">MyArray=RS.GetRows()</P>
<P ALIGN="JUSTIFY">RS.Close</P>
<P ALIGN="JUSTIFY">MyConn.Close</P>
<P ALIGN="JUSTIFY">%></P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">在這個(gè)腳本中,記錄集RS中包含的所有記錄被分配給數(shù)組MyArray。這個(gè)數(shù)組由GetRows()方法自動(dòng)創(chuàng)建并添入數(shù)據(jù)。GetRows()方法創(chuàng)建了一個(gè)二維數(shù)組,第一個(gè)下標(biāo)代表字段數(shù),第二個(gè)下標(biāo)代表記錄數(shù)。</P>
<P ALIGN="JUSTIFY">下面的腳本可以用來顯示數(shù)組MyArray中的內(nèi)容:</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY"><%</P>
<P ALIGN="JUSTIFY">FOR i=0 TO UBOUND(MyArray,2)</P>
<P ALIGN="JUSTIFY">%></P>
<P ALIGN="JUSTIFY"><BR> First Column:<%=MyArray(0,i)%></P>
<P ALIGN="JUSTIFY"><BR> Second column:<%=MyArray(1,i)%></P>
<P ALIGN="JUSTIFY"><%</P>
<P ALIGN="JUSTIFY">NEXT</P>
<P ALIGN="JUSTIFY">%></P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">VBScript函數(shù)UBOUND()用來確定數(shù)組的第二維的維數(shù)。FOR</FONT><FONT FACE="Playbill,Courier New" SIZE=3>……</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>NEXT循環(huán)用來掃描數(shù)組的所有元素。這個(gè)數(shù)組代表一個(gè)有兩個(gè)字段的記錄集。當(dāng)該數(shù)組的第一個(gè)下標(biāo)值是0時(shí),代表第一個(gè)字段,當(dāng)?shù)谝粋€(gè)下標(biāo)值是1時(shí),代表第二個(gè)字段。</P>
<P ALIGN="JUSTIFY"> </P>
</FONT><B><FONT FACE="宋體" LANG="ZH-CN"><P ALIGN="JUSTIFY">指定記錄集的最大容量</P>
</B></FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">假設(shè)你想顯示在你站點(diǎn)上發(fā)布的最后10條信息,但是不能超過10條信息?;蛘吣阆腼@示3個(gè)連接,但是不超過3個(gè)。如何能夠限制取到一個(gè)記錄集中的記錄數(shù)?記錄集對(duì)象有一個(gè)屬性用于此目的。通過使用MaxRecords屬性,你可以限制從一個(gè)數(shù)據(jù)庫查詢返回到一個(gè)記錄集中的記錄數(shù)目。如下例所示:</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY"><%</P>
<P ALIGN="JUSTIFY">Set MyConn=Sever.CreateObject(</FONT><FONT FACE="Playbill,Courier New" SIZE=3>“</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>ADODB.Connection</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>)</P>
<P ALIGN="JUSTIFY">Set RS=Sever.CreateObject(</FONT><FONT FACE="Playbill,Courier New" SIZE=3>“</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>ADODB.RecordSet</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>)</P>
<P ALIGN="JUSTIFY">MyConn.Open </FONT><FONT FACE="Playbill,Courier New" SIZE=3>“</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>FILEDSN=d:\Program Files\</P>
<P ALIGN="JUSTIFY"> Common Files\ODBC\Data Sources\MyData.dsn</P>
<P ALIGN="JUSTIFY">RS.MaxRecords=10</P>
<P ALIGN="JUSTIFY">RS.Open </FONT><FONT FACE="Playbill,Courier New" SIZE=3>“</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>SELECT MyColumn FROM Mytable</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>,MyConn</P>
<P ALIGN="JUSTIFY">WHILE NOT RS.EOF</P>
<P ALIGN="JUSTIFY"> Response.Write(</FONT><FONT FACE="Playbill,Courier New" SIZE=3>“</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3><BR></FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>&RS(</FONT><FONT FACE="Playbill,Courier New" SIZE=3>“</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>MyColumn</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>))</P>
<P ALIGN="JUSTIFY"> RS.MoveNext</P>
<P ALIGN="JUSTIFY">WEND</P>
<P ALIGN="JUSTIFY">RS.Close</P>
<P ALIGN="JUSTIFY">MyConn.Close</P>
<P ALIGN="JUSTIFY">%></P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">在這個(gè)腳本中,MaxRecords屬性被設(shè)為10。當(dāng)記錄集RS被打開時(shí),不會(huì)有超過10個(gè)記錄被取到RS中。即使表中有10,000條記錄,也只有10條記錄被取出。使用MaxRecords屬性時(shí),你必須在打開記錄集之前設(shè)置該屬性值。記錄集打開之后,該屬性將成為只讀的。</P>
<P ALIGN="JUSTIFY"> </P>
</FONT><B><FONT FACE="宋體" LANG="ZH-CN" SIZE=5><P ALIGN="JUSTIFY">總結(jié)</P>
</B></FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">這一章討論了記錄集對(duì)象。你學(xué)會(huì)了如何在ASP網(wǎng)頁中使用記錄集對(duì)象顯示表中的數(shù)據(jù)。你還學(xué)會(huì)了如何用不同類型的游標(biāo)和鎖定打開記錄集。最后,你學(xué)習(xí)了記錄集對(duì)象的一些高級(jí)方法。</P></FONT></BODY>
</HTML>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -