Filter 和 RecordCount 属性范例 该范例使用 Filter 属性打开一个新的 Recordset,它基于适用于已有 Recordset 的指定条件。它使用 RecordCount 属性显示两个 Recordsets 中的记录数。该过程运行时需要 FilterField 函数。Public Sub FilterX() Dim rstPublishers As ADODB.Recordset Dim rstPublishersCountry As ADODB.Recordset Dim strCnn As String Dim intPublisherCount As Integer Dim strCountry As String Dim strMessage As String ' 使用出版商表中的数据打开记录集。 strCnn = "Provider=sqloledb;" & _ "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=; " Set rstPublishers = New ADODB.Recordset rstPublishers.CursorType = adOpenStatic rstPublishers.Open "publishers", strCnn, , , adCmdTable ' 充填记录集。 intPublisherCount = rstPublishers.RecordCount ' 获得用户输入。 strCountry = Trim(InputBox( _ "Enter a country/region to filter on:")) If strCountry <> "" Then ' 打开已筛选的记录集对象。 Set rstPublishersCountry = _ FilterField(rstPublishers, "Country", strCountry) If rstPublishersCountry.RecordCount = 0 Then MsgBox "No publishers from that country/region." Else ' 打印原始记录集和已筛选记录集对象的记录数。 strMessage = "Orders in original recordset: " & _ vbCr & intPublisherCount & vbCr & _ "Orders in filtered recordset (Country = '" & _ strCountry & "'): " & vbCr & _ rstPublishersCountry.RecordCount MsgBox strMessage End If rstPublishersCountry.Close End IfEnd SubPublic Function FilterField(rstTemp As ADODB.Recordset, _ strField As String, strFilter As String) As ADODB.Recordset ' 在指定的记录集对象上设置筛选操作并打开一个新的记录集对象。 rstTemp.Filter = strField & " = '" & strFilter & "'" Set FilterField = rstTempEnd Function注意 当已知要选择的数据时,使用 SQL 语句打开 Recordset 通常更为有效。该范例说明了如何创建唯一的 Recordset 并从特定的国家(地区)获得记录。Public Sub FilterX2() Dim rstPublishers As ADODB.Recordset Dim strCnn As String ' 使用出版商表中的数据打开记录集。 strCnn = "Provider=sqloledb;" & _ "Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=; " Set rstPublishers = New ADODB.Recordset rstPublishers.CursorType = adOpenStatic rstPublishers.Open "SELECT * FROM publishers " & _ "WHERE Country = 'USA'", strCnn, , , adCmdText
' 打印记录集中的当前数据。 rstPublishers.MoveFirst Do While Not rstPublishers.EOF Debug.Print rstPublishers!pub_name & ", " & _ rstPublishers!country rstPublishers.MoveNext Loop rstPublishers.CloseEnd Sub
设置或返回游标服务的位置。设置和返回值设置或返回可设置为以下某个常量的长整型值。常量 说明
adUseNone 没有使用游标服务。(该常量已过时并且只为了向后兼容才出现)。
adUseClient 使用由本地游标库提供的客户端游标。本地游标服务通常允许使用的许多功能可能是驱动程序提供的游标无法使用的,因此使用该设置对于那些将要启用的功能是有好处的。AdUseClient 具有向后兼容性,也支持同义的 adUseClientBatch。
adUseServer 默认值。使用数据提供者的或驱动程序提供的游标。这些游标有时非常灵活,对于其他用户对数据源所作的更改具有额外的敏感性。但是,Microsoft Client Cursor Provider(如已断开关联的记录集)的某些功能无法由服务器端游标模拟,通过该设置将无法使用这些功能。
说明该属性允许在可用于提供者的各种游标库中进行选择。通常,可以选择使用客户端游标库或位于服务器上的某个游标库。该属性设置仅对属性已经设置后才建立的连接有影响。更改 CursorLocation 属性不会影响现有的连接。对于 Connection 或关闭的 Recordset 该属性为读/写,而对打开的 Recordset 该属性为只读。由 Execute 方法返回的游标继承该设置。Recordset 将自动从与之关联的连接中继承该设置。远程数据服务用法 当用于客户端 (ADOR) Recordset 或 Connection 对象时,只能将 CursorLocation 属性设置为 adUseClient。
该范例使用 Filter 属性打开一个新的 Recordset,它基于适用于已有 Recordset 的指定条件。它使用 RecordCount 属性显示两个 Recordsets 中的记录数。该过程运行时需要 FilterField 函数。Public Sub FilterX() Dim rstPublishers As ADODB.Recordset
Dim rstPublishersCountry As ADODB.Recordset
Dim strCnn As String
Dim intPublisherCount As Integer
Dim strCountry As String
Dim strMessage As String ' 使用出版商表中的数据打开记录集。
strCnn = "Provider=sqloledb;" & _
"Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=; "
Set rstPublishers = New ADODB.Recordset
rstPublishers.CursorType = adOpenStatic
rstPublishers.Open "publishers", strCnn, , , adCmdTable ' 充填记录集。
intPublisherCount = rstPublishers.RecordCount ' 获得用户输入。
strCountry = Trim(InputBox( _
"Enter a country/region to filter on:")) If strCountry <> "" Then
' 打开已筛选的记录集对象。
Set rstPublishersCountry = _
FilterField(rstPublishers, "Country", strCountry) If rstPublishersCountry.RecordCount = 0 Then
MsgBox "No publishers from that country/region."
Else
' 打印原始记录集和已筛选记录集对象的记录数。
strMessage = "Orders in original recordset: " & _
vbCr & intPublisherCount & vbCr & _
"Orders in filtered recordset (Country = '" & _
strCountry & "'): " & vbCr & _
rstPublishersCountry.RecordCount
MsgBox strMessage
End If
rstPublishersCountry.Close End IfEnd SubPublic Function FilterField(rstTemp As ADODB.Recordset, _
strField As String, strFilter As String) As ADODB.Recordset ' 在指定的记录集对象上设置筛选操作并打开一个新的记录集对象。
rstTemp.Filter = strField & " = '" & strFilter & "'"
Set FilterField = rstTempEnd Function注意 当已知要选择的数据时,使用 SQL 语句打开 Recordset 通常更为有效。该范例说明了如何创建唯一的 Recordset 并从特定的国家(地区)获得记录。Public Sub FilterX2() Dim rstPublishers As ADODB.Recordset
Dim strCnn As String ' 使用出版商表中的数据打开记录集。
strCnn = "Provider=sqloledb;" & _
"Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=; "
Set rstPublishers = New ADODB.Recordset
rstPublishers.CursorType = adOpenStatic
rstPublishers.Open "SELECT * FROM publishers " & _
"WHERE Country = 'USA'", strCnn, , , adCmdText
' 打印记录集中的当前数据。
rstPublishers.MoveFirst
Do While Not rstPublishers.EOF
Debug.Print rstPublishers!pub_name & ", " & _
rstPublishers!country
rstPublishers.MoveNext
Loop rstPublishers.CloseEnd Sub