大家好,今日继续讲解VBA数据库解决方案,今日讲解的是第75讲,内容是:记录集中筛选(Filter)的用法。
我们在*作EXCEL表格的时候,筛选是经常用到的,可以解决很多数据处理的问题,那么记录集中可否能做到筛选呢?答案当然是肯定的。今日我们的内容就是讲解记录集的筛选,当然我们也可以在取得记录集的时候用WHERE来前期实现此功能,今日我们讲的是后期实现的办法。
实例,我们有如下的工作表数据:
我们首先要用ADO连接方法,取得这个工作表的记录集,这个并不难,然后我们用筛选的方法得到民族为汉的记录,然后把筛选的结果反馈。
下面看我给出的代码:
Sub mynzRecords_75() '第75讲 记录集中筛选(Filter)的用法
Dim cnADO, rsADO As Object
Dim strPath, strSQL As String
Dim myData() As Variant
Dim myTitle() As Variant
Dim myResult() As Variant
Worksheets("75").Select
Cells.ClearContents
Set cnADO = CreateObject("ADODB.Connection")
Set rsADO = CreateObject("ADODB.Recordset")
strPath = ThisWorkbook.FullName
cnADO.Open "provider=Microsoft.ACE.OLEDB.12.0;extended properties='excel 12.0;hdr=yes;imex=1';" _
& "data source=" & strPath
strSQL = "SELECT * FROM [数据8$]"
rsADO.Open strSQL, cnADO, 1, 3
rsADO.Filter = "民族='汉'"
For Each Field In rsADO.Fields
[a1].Offset(0, i) = Field.Name
i = i + 1
Next
Range("a2").CopyFromRecordset rsADO
rsADO.Close
cnADO.Close
Set rsADO = Nothing
Set cnADO = Nothing
End Sub
代码截图:
代码讲解:
1 上述代码实现了记录集的筛选功能,也就是说,记录集也可以如同工作表一样的筛选,
2 rsADO.Filter = "民族='汉'" 这句就是实现筛选的语句,要注意写法。Filter将返回一个针对 Recordset 对象中数据的过滤器。
下面看代码的运行:
上述为返回的结果,正是我们需要的结果。
这里需要再补充一点,刚才我讲过,关于Recordset对象Filter属性,是可以在形成记录集的前用WHERE语句来实现的,可见一样的结果有多种的实现手段,不要拘泥于一种思路,但有的资料上记载,用FILTER不如用WHERE实现速度快。这一点还望大家注意。