WIXOO

Digest

善用RecordSet物件

作者:Admin 发布时间 20/04/06

为了善用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