📄 23-3.cfm.htm
字号:
<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">在这个例子中,用EOF属性检测是否一个查询有返回结果。如果EOF属性是true,说明用户输入的口令不在保存口令的表中。</P>
<P ALIGN="JUSTIFY">在某些情况下,你的确需要返回记录数目。例如,你也许想显示在你站点上注册的用户总数。但是同样,你应该避免使用RecordCount属性。取而代之,你可以执行一个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">注意这个查询中如何使用字段别名Mycount。通过给集合函数COUNT(*)提供一个名字,你可以在输入查询结果时使用这个名字。</P>
<P ALIGN="JUSTIFY"> </P>
<B><P ALIGN="JUSTIFY">注意</P>
</B><P ALIGN="JUSTIFY">下一章将讨论用SQL存储过程返回记录数目的方法。参见“在命令对象中使用返回状态值”一节。</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">假设你想显示你站点上销售的一系列商品。但是,你正在经营几百种项目。在这种情况下,你可能不希望把所有的商品显示在同一个ASP页中。这时允许用户进行翻页将是个不错的办法。</P>
<P ALIGN="JUSTIFY">记录集对象有三个属性用于此目的。你可以使用这些属性把一个记录集中的记录分成许多逻辑页。通过把记录集中的记录进行分页,你可以一次只显示记录集中的一部分。下面列出了这些属性:</P>
<P ALIGN="JUSTIFY"> </P>
<UL>
<P ALIGN="JUSTIFY"><LI>AbsolutePage。指定当前的页。</LI></P>
<P ALIGN="JUSTIFY"><LI>PagePount。返回记录集中的逻辑页数。</LI></P>
<P ALIGN="JUSTIFY"><LI>PageSize。指定一个逻辑页中的记录个数,缺省值是10。</LI></P></UL>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">要把一个记录集分成多个页,你应使用PageSize属性指定一页中的记录个数。然后你就可以用AbsolutePage属性移动到一个特定的页。最后,PageCount属性可以用来反回总页数。表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 对记录集进行分页</P>
</B><P ALIGN="JUSTIFY">这个ASP网页一次显示表Products中的五条记录一个session变量Currentpage被用来跟踪记录集的当前页。当用户单击NEXT时,就显示下一页记录,当用户单击PREV时,就显示上一页。</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">在特定情况下,你将需要把记录集中的记录取到数组中。例如,如果你需要修改一个记录集中的数据,担你不想改变记录集中的记录本身,这时你可以把记录取到数组中。</P>
<P ALIGN="JUSTIFY">要把一个记录集中的记录分配给一个数组,应使用记录集对象的GetRows()方法。这里有一个例子:</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">在这个脚本中,记录集RS中包含的所有记录被分配给数组MyArray。这个数组由GetRows()方法自动创建并添入数据。GetRows()方法创建了一个二维数组,第一个下标代表字段数,第二个下标代表记录数。</P>
<P ALIGN="JUSTIFY">下面的脚本可以用来显示数组MyArray中的内容:</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函数UBOUND()用来确定数组的第二维的维数。FOR</FONT><FONT FACE="Playbill,Courier New" SIZE=3>……</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>NEXT循环用来扫描数组的所有元素。这个数组代表一个有两个字段的记录集。当该数组的第一个下标值是0时,代表第一个字段,当第一个下标值是1时,代表第二个字段。</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">假设你想显示在你站点上发布的最后10条信息,但是不能超过10条信息。或者你想显示3个连接,但是不超过3个。如何能够限制取到一个记录集中的记录数?记录集对象有一个属性用于此目的。通过使用MaxRecords属性,你可以限制从一个数据库查询返回到一个记录集中的记录数目。如下例所示:</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">在这个脚本中,MaxRecords属性被设为10。当记录集RS被打开时,不会有超过10个记录被取到RS中。即使表中有10,000条记录,也只有10条记录被取出。使用MaxRecords属性时,你必须在打开记录集之前设置该属性值。记录集打开之后,该属性将成为只读的。</P>
<P ALIGN="JUSTIFY"> </P>
</FONT><B><FONT FACE="宋体" LANG="ZH-CN" SIZE=5><P ALIGN="JUSTIFY">总结</P>
</B></FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">这一章讨论了记录集对象。你学会了如何在ASP网页中使用记录集对象显示表中的数据。你还学会了如何用不同类型的游标和锁定打开记录集。最后,你学习了记录集对象的一些高级方法。</P></FONT></BODY>
</HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -