ADO如何善用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.Cloners 的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")取得料表型。