用记录集显示记录
记录集可以用来代表表中的记录。与表一样,一个记录集包含一条或多条记录(行),每个记录包括一个或多个域(字段)。在任何时刻,只有一条记录是当前记录。
要创建记录集对象的一个实例,你可以使用连接对象的Execute()方法。当你用Execute()方法从一个数据库返回查询结果时,一个记录集对象会被自动创建。这里有一个例子:
<%
Set MyConn=Sever.CreateObject(
“ADODB.Connection”)MyConn.Open
“FILEDSN=d:\Program Files\Common Files\ODBC\Data Sources\MyData.dsn
”Set RS=MyConn.Execute(
“SELECT * FROM Mytable”)RS.Close
MyConn.Close
%>
在这个例子中,使用一个SQL SELECT语句从一个表Mytable中返回了所有的记录。Execute()方法返回一个记录集。在这个脚本中,该记录集被分配给变量RS,然后关闭了这个记录集。最后,关闭与数据库的连接。
记录集中的每一条记录都对应于表Mytable中的一条记录。要显示记录集中的所有记录,你只要简单地做一个循环就可以,如下例所示:
<%
Set MyConn=Sever.CreateObject(
“ADODB.Connection”)MyConn.Open
“FILEDSN=d:\Program Files\Common Files\ODBC\Data Sources\MyData.dsn
”Set RS=MyConn.Execute(
“SELECT * FROM Mytable”)WHILE NOT RS.EOF
Response.Write(
“<BR>”&RS(“Mycolumn”))RS.MoveNext
WEND
RS.Close
MyConn.Close
%>
在这个例子中,WHILE
……WEND循环用来扫描记录集RS中的每一条记录,把每个记录的Mycolumn域输出到浏览器。这段脚本显示了表Mytable中的所有记录。当一个记录集对象中收集了数据时,当前记录总是第一条记录。在上面的例子中,调用了记录集对象的MoveNext方法,使当前记录移到下一条记录。当所有的记录都显示完时,记录集对象的EOF属性的值将变为true,从而退出WHILE
……WEND循环。一个记录集对象有一个域集合,包含一个或多个域对象。一个域对象代表表中的一个特定的字段。例如,在上面的脚本中,使用了表达式RS(
“Mycolumn”)来显示字段Mycolumn。实际上,你可以通过许多中途径显示一个字段的值。下面的每一个表达式都可以显示字段Mycolumn的值:
RS(
“Mycolumn”)RS(0)
RS.Fields(
“Mycolumn”)RS.Fields(0)
RS.Fields.Item(
“Mycolumn”)RS.Fields.Item(0)
注意你既可以通过字段名,也可以通过顺序号来指定一个字段。例如,你可以使用RS(
“Mycolumn”)或RS(0)来代表字段Mycolumn.两种方法起到同样的效果,因为字段Mycolumn对应于表中的第一个字段(第一个字段的顺序号是0)。当你不知道一个记录集中的字段名时,通过顺序号指定一个域是有用处的。例如,下面的ASP脚本显示了一个表中的所有记录的所有字段(见图23.1):
<HTML>
<HEAD><TITLE>Show All Rows And Columns</TITLE></HEAD>
<BODY>
<%
Set MyConn=Sever.CerateObject(
“ADODB.Connection”)MyConn.Open
“FILEDSN=d:\Program Files\Common Files\ODBC\Data Source\MyData.dsn
”Set RS=MyConn.Execute(
“SELECT * FROM Mytable”)%>
<TABLE BORDER=1>
<TR>
<% FOR i=0 to RS.Fields.Count-1 %>
<TH><% =RS(i).Name *></TH>
<% Next %>
</TR>
<% While Not RS.EOF %>
<TR>
<% FOR i=0 TO RS.Fields.Count-1 %>
<TD><% = RS(i) %></TD>
<% Next %>
</TR>
<%
RS.MoveNext
WEND
RS.Close
MyConn.Close
%>
</TABLE>
</BODY>
</HTML>
图23.1 显示一个数据表中的所有的记录
在这个例子中,域集合的Count属性用来返回该记录集中的域的数目。Name属性用来返回每个域的名字。两个FOR
……NEXT循环用来对记录集中的所有字段进行操作。不论表中有多少记录和字段,它们将被全部显示。