大家好,今日继续讲解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实现速度快。这一点还望大家注意。 |