善用RecordSet物件
为了善用RecordSet物件,RecordSet物件还有许多有用的属性和方法,让我们再学学:
Filter属性:于ReecordSet设定搜寻过滤的条件,只显示合乎条件的资料。
Clone方法:复制一份RecordSet。
CacheSize属性:设定或得知RecordSet暂存(cache)于记忆体的的记录笔数。
Filter属性
经由SELECT等指令将查询存放到RecordSet的记录,仍然可以于RecordSet中再设定搜寻过滤的条件,方法为使用Filter属性。
Filter属性,于ReecordSet设定搜寻的过滤条件,只显示合乎条件的资料。
让我们看一个于ASP程式码当中使用Filter属性的例子。
譬如ASP程式码rs19.asp如下,Filter设定为rs2.Filter = "出版='松岗'",表示只要搜寻 [出版] 栏位为 [松岗] 的记录:
<%
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.Filter = "出版='松岗'"
%>
<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>
<% Do while not rs2.EOF %>
<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>
<% rs2.MoveNext %>
<% Loop %>
</TABLE>
<% rs2.Close %>
以上的 ASP程式码rs19.asp,于用户端使用浏览器,浏览执行的结果,显示过滤后的结果,只显示合乎条件的资料。
CacheSize属性
CacheSize属性,设定或得知RecordSet暂存(cache)于记忆体的的记录笔数,预设值为1。
譬如您若将CacheSize设定为10时,ADO首先将前10笔的记录暂存(cache)放到本机记忆体缓冲器(local memory buffer)当中,一旦您移动到最末的第10笔记录时,ADO暂存(cache)第二个10笔记录。
若要更新暂存(cache)的记录,可使用Resync方法。
让我们看一个于ASP程式码当中使用CacheSize的例子。
譬如ASP程式码rs18.asp如下,这个例子将产品资料表的资料由第一笔逐一移动到最末笔,总计循环做了100次,计算总共花了多少时间,比较有和没有设定CacheSize的执行效能差别:
<%
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
t1 = Timer
For i = 1 to 100
rs2.MoveFirst
Do while not rs2.EOF
A = rs2(0)
rs2.MoveNext
Loop
Next
t2 = Timer
Response.Write "<BR>无设CacheSize: " & CINT(t2 - t1)
rs2.MoveFirst
rs2.CacheSize = 10
t2 = Timer
For i = 1 to 100
rs2.MoveFirst
Do while not rs2.EOF
A = rs2(0)
rs2.MoveNext
Loop
Next
t2 = Timer
Response.Write "<BR>有设CacheSize: " & CINT(t2 - t1)
%>
<% rs2.Close %>
由本例,未设定CacheSize,花了6秒时间就完成。将CacheSize设定为10时,反而花了9秒时间才完成。可见CacheSize须小心使用,否则将影响执行的效能。
Clone方法
Clone方法,复制一份RecordSet。
有时候想处理一下RecordSet,譬如使用如上的Filter属性,于ReecordSet设定搜寻的过滤条件,RecordSet就被变更,此时若又想保留原RecordSet时,就可以使用Clone方法,先复制一份RecordSet,再处理复制的那一份。
让我们看一个于ASP程式码当中使用Clone的例子。
譬如ASP程式码rs12.asp如下,使用Set rs1 = rs.Clone将rs 的RecordSet复制一份到rs1的RecordSet当中:
<%
Set conn1 = Server.CreateObject("ADODB.Connection")
conn1.Open "DBQ="& Server.MapPath("ntopsamp.mdb") &";Driver={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;"
Set rs = Server.CreateObject("ADODB.Recordset")
SqlStr = "SELECT * FROM 着作"
rs.Open SqlStr,conn1,1,1
Set rs1 = rs.Clone
%>
<Center>
<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>
<%
Do While Not rs1.EOF
%>
<TR>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs1("书名")%></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs1("出版")%></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs1("图片")%></TD>
<TD BGCOLOR="f7efde" ALIGN=CENTER><%= rs1("简介")%></TD>
</TR>
<% rs1.MoveNext
Loop
rs1.Close %>
</TABLE>
以上的 ASP程式码rs12.asp,于用户端使用浏览器,浏览执行的结果,显示经过复制的那一份rs1的RecordSet。
DSN data source
当我们想得知DSN data source的详细资讯时,可以直接将连线显示出来。
让我们看一个于ASP程式码当中得知DSN data source详细资讯的例子。
譬如ASP程式码rs11.asp如下:
<%
Set conn1 = Server.CreateObject("ADODB.Connection")
conn1.Open "DBQ="& Server.MapPath("ntopsamp.mdb") &";Driver={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;"
Response.Write(conn1)
%>
以上的 ASP程式码rs11.asp,于用户端使用浏览器,浏览执行的结果,使用Response.Write(conn1),即可显示DSN data source的详细资讯。
OpenSchema
OpenSchema方法,可得知SQL Server某一个资料库的资料表资讯。
让我们看一个于ASP程式码当中使用OpenSchema的例子,请先安装本书所附‘网站热门应用精选’光碟片,以便自动于SQL Server建立comPak资料库。
譬如ASP程式码rs30.asp如下:
<%
Set conn1 = Server.CreateObject("ADODB.Connection")
conn1.Open "driver={SQL Server};server=(Local);uid=sa;pwd=;database=comPak"
set rs = conn1.OpenSchema(20) 'adSchemaTables
Do while not rs.EOF
Response.Write "<BR>" & rs("TABLE_NAME") & ": " & rs("TABLE_TYPE")
rs.MoveNext
Loop
%>
以上的 ASP程式码rs30.asp,于用户端使用浏览器,浏览执行的结果,由set rs = conn1.OpenSchema(20) 取得SQL Server 的comPak资料库的资料表资讯,其中rs("TABLE_NAME")取得资料表名称,rs("TABLE_TYPE")取得资料表类型。
资料引用:http://www.knowsky.com/525.html