为了自己,努力生活,快乐活着。
《VBA数据库解决方案》教程是我推出第二套教程,目前已经是第一版修订了。这套教程定位于中级,是学完字典后的另一个专题讲解。数据库是数据处理的利器,教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法和实例操作,教程第一版的修订内容主要是完成所有程序文件的32位和64位OFFICE系统测试。这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是第18讲:数据库中记录的查找第十八讲 数据库中Recordset对象Find方法的利用大家好,今日讲解VBA数据库解决方案第18讲:Recordset对象Find方法。FIND方法是我极力推崇的一种方法,在VBA代码解决方案中我曾详细地讲过,可以说FIND是VLOOKUP的终结者,当你开始利用FIND的时候就不会再lookup了,那么这个方法在数据库中是否可以利用呢?答案当然是肯定的。1 Recordset对象的Find 方法Recordset对象的Find 方法用于搜索 Recordset记录中满足指定标准的记录。如果满足标准,则记录集游标位置设置在找到的记录上,否则位置将设置在记录集的末尾。语法: Find (criteria, SkipRows, searchDirection, start)参数a criteria 字符串,包含指定用于搜索的列名、比较操作符和值的语句。b SkipRows 可选。Long 值,其默认值为零,它指定当前行或 Start 书签的行偏移量以开始搜索。在默认情况下,搜索将从当前行开始c searchDirection 可选的 SearchDirectionEnum 值,指定搜索应从当前行还是下一个有效行开始。其值可为 adSearchForward(1) 或 adSearchBackward(-1)。搜索是在记录集的开始还是末尾结束由 searchDirection 值决定。d start 可选,变体型书签,用作搜索的开始位置。0或者缺省代表搜索从当前位置开始1 表示搜索从第一条记录开始 2表示搜索从最后一条记录开始特别注意1:criteria 中的“比较操作符”可以是“>”(大于)、“<”(小于)、“=”(等于)、“>=”(大于或等于)、“<=”(小于或等于)、“<>”(不等于)或“like”(模式匹配)比较操作符”为LIKE则字符串””(某字符可以出现一次或多次)或者”_”,表示某字符只出现一次特别注意2:criteria 中的值可以是字符串,浮点数或者日期字符串以单引号分割;日期以”#”号分割。2 Recordset对象Find方法的实例应用实例讲解:我们要在上一讲的数据中找到姓马的记录,并显示出来。看下面的代码:Sub mynz_18() ' 第18讲:Recordset对象Find方法Dim cnADO, rsADO As ObjectDim strPath, strSQL As StringSet cnADO = CreateObject("ADODB.Connection")Set rsADO = CreateObject("ADODB.RecordSet")strPath = ThisWorkbook.Path & "\mydata2.accdb"cnADO.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strPathstrSQL = "SELECT FROM 员工信息 WHERE 部门='一厂'"rsADO.Open strSQL, cnADO, 1, 3Sheets("18").Rows("2:30").SelectSelection.ClearContentsFor i = 0 To rsADO.Fields.Count - 1Sheets("18").Cells(1, i + 1) = rsADO.Fields(i).NameNext ii = 0rsADO.MoveFirstrsADO.Find "姓名 Like '马'"If rsADO.EOF ThenMsgBox ("没有找到查找内容"): GoTo 100ElseDo While Not rsADO.EOFFor j = 0 To rsADO.Fields.Count - 1Sheets("18").Cells(2 + i, j + 1) = rsADO.Fields(j)Next jrsADO.Find "姓名 Like '马'", 1, 1i = i + 1LoopEnd If100:rsADO.ClosecnADO.CloseSet rsADO = NothingSet cnADO = NothingEnd Sub代码截图:代码的解读:1) rsADO.Find "姓名 Like '马'"上述代码查找姓马的职工姓名2) If rsADO.EOF ThenMsgBox ("没有找到查找内容"): GoTo 100Else如果没有找到,也就是说到了记录集的尾部,那么提示用户,没有找到。3) Do While Not rsADO.EOFFor j = 0 To rsADO.Fields.Count - 1Sheets("Sheet1").Cells(2 + i, j + 1) = rsADO.Fields(j)Next jrsADO.Find "姓名 Like '马'", 1, 1i = i + 1LoopEnd If如果找到,那么显示记录,并查找下一条rsADO.Find "姓名 Like '马'", 1, 1 是查找下一条,步长为1,向下查找。好了,我们看下面的代码的运行测试,首先看看我们的数据库的记录:我们再利用本讲的程序进行FIND查找,结果:今日内容回向:1 在Recordset 中如何利用FIND方法查找?2 criteria 中的“比较操作符”是否理解呢?本讲内容参考程序文件:VBA与数据库操作(第一册).xlsm我20多年的VBA实践经验,全部浓缩在下面的各个教程中:第7套教程(共三册):《VBA之EXCEL应用》:是对VBA基本的讲解第1套教程(共三册):《VBA代码解决方案》:是入门后的提高教程第4套教程(16G):VBA代码解决方案之视频(第一套的视频讲解)第3套教程(共两册):《VBA数组与字典解决方案》:是对数组和字典的专题讲解第2套教程(共两册):《VBA数据库解决方案》:是对数据库的专题讲解第6套教程(共两册):《VBA信息获取与处理》:讲解VBA的网络及跨程序应用第5套教程(共两册):VBA中类的解读和利用:类及接口技术的讲解第8套教程(共三册):VBA之Word应用(最新教程):word中VBA的利用上述教程的学习顺序:① 7→1→3→2→6→5或者7→4→3→2→6→5。② 7→8
(图片来源网络,侵删)
0 评论