该范例使用 Clone 方法创建 Recordset 的副本并让用户独立地为每个副本的记录指针定位。
Public Sub CloneX() Dim arstStores(1 To 3) As ADODB.Recordset Dim intLoop As Integer Dim strSQL As String Dim strCnn As String Dim strMessage As String Dim strFind As String ' 将 SQL 语句和连接字符串赋值给变量。 strSQL = "SELECT stor_name FROM Stores " & _ "ORDER BY stor_name" strCnn = "Provider=sqloledb;" & _ "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=; " ' 将记录集作为静态游标类型记录集打开。 Set arstStores(1) = New ADODB.Recordset arstStores(1).CursorType = adOpenStatic arstStores(1).LockType = adLockBatchOptimistic arstStores(1).Open strSQL, strCnn, , , adCmdText ' 创建原始 Recordset 的两个副本。 Set arstStores(2) = arstStores(1).Clone Set arstStores(3) = arstStores(1).Clone Do While True ' 在数组中循环以使用户每一遍都搜索相同 Recordset 的不同副本。 For intLoop = 1 To 3 ' 要求在显示每个 Recordset 当前记录集指针位置时搜索字符串。 strMessage = _ "Recordsets from stores table:" & vbCr & _ " 1 - Original - Record pointer at " & _ arstStores(1)!stor_name & vbCr & _ " 2 - Clone - Record pointer at " & _ arstStores(2)!stor_name & vbCr & _ " 3 - Clone - Record pointer at " & _ arstStores(3)!stor_name & vbCr & _ "Enter search string for #" & intLoop & ":" strFind = Trim(InputBox(strMessage)) If strFind = "" Then Exit Do ' 查找搜索字符串,如果没有匹配的,请跳转到最后的记录。 arstStores(intLoop).Filter = "stor_name >= '" & strFind & "'" If arstStores(intLoop).EOF Then arstStores(intLoop).Filter = adFilterNone arstStores(intLoop).MoveLast End If Next intLoop Loop arstStores(1).Close arstStores(2).Close arstStores(3).CloseEnd Sub
VBScript 版本
下面是使用 VBScript 编写、并用于 Active Server Page (ASP) 的相同范例。如需查看该完整功能范例,请使用与 IIS 一同安装并位于 C:\InetPub\ASPSamp\AdvWorks 的数据源 AdvWorks.mdb,来创建名为 AdvWorks 的系统“数据源名称”(DSN)。这是 Microsoft Access 数据库文件。请使用“查找”命令定位文件 Adovbs.inc,并将其放入计划使用的目录中。请将以下代码剪切并粘贴到“记事本”或其他文本编辑器中,另存为“Clone.asp”。这样,便可在任何客户端浏览器中查看结果。
如要执行该范例,请将行 RsCustomerList.Source = "Customers" 改为 RsCustomerList.Source = "Products" 以便为更大的表计数。
<!-- #Include file="ADOVBS.INC" --> <% Language = VBScript %> <HTML><HEAD> <TITLE>ADO Clone Method</TITLE> </HEAD><BODY> <Center> <H3>ADO Clone Method</H3> <!--- A用于创建记录集的 ADO Connection 对象 --> <% ' 创建并打开 Connection 对象。 Set OBJdbConnection = Server.CreateObject("ADODB.Connection") OBJdbConnection.Open "AdvWorks" ' 创建并打开 Recordset 对象。 Set RsCustomerList = Server.CreateObject("ADODB.Recordset") RsCustomerList.ActiveConnection = OBJdbConnection RsCustomerList.CursorType = adOpenKeyset RsCustomerList.LockType = adLockOptimistic RsCustomerList.Source = "Customers" RsCustomerList.Open %> <HR> <!-- 在 Customers 表中循环,每循环一次将 Counter 变量加 1 --> <% Set MyRecordset = RSCustomerList.Clone Counter = 0 Do Until MyRecordset.EOF Counter = Counter + 1 MyRecordset.MoveNext Loop %> <!-- 显示结果 --> <H3>There Are <%=Counter %> Records in the Customers Table</H3> <BR><HR> <H4>Location of DSN Datbase</H4> <%' Show location of DSN data source Response.Write(OBJdbConnection) %> <HR></Center></BODY></HTML>