VBA数据库解决方案第18讲:数据库中Recordset对象Find方法的利用
大家好,今日讲解VBA数据库解决方案第18讲:Recordset对象Find方法。FIND方法是我极力推崇的一个,在VBA代码解决方案中我曾就详细的讲过,可以说FIND是VLOOKUP的终结者,当你开始利用FIND的时候就不会再lookup了,那么这个方法在数据库中是否可以利用呢?答案当然是肯定的。我们先看看对于这个方法的解释:
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 中的值可以是字符串,浮点数或者日期字符串以单引号分割;日期以”#”号分割。
实例讲解:我们要在上一讲的数据中找到姓马的记录,并显示出来。看下面的代码:
Sub mynzRSJLJF_2() '测试数据FIND
Dim cnADO, rsADO As Object
Dim strPath, strSQL As String
Set cnADO = CreateObject("ADODB.Connection")
Set rsADO = CreateObject("ADODB.RecordSet")
strPath = ThisWorkbook.Path & "\mydata2.accdb"
cnADO.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strPath
strSQL = "SELECT * FROM 员工信息 WHERE 部门='一厂'"
rsADO.Open strSQL, cnADO, 1, 3
Sheets("Sheet1").Rows("2:30").Select
Selection.ClearContents
For i = 0 To rsADO.Fields.Count - 1
Sheets("Sheet1").Cells(1, i + 1) = rsADO.Fields(i).Name
Next i
i = 0
rsADO.MoveFirst
rsADO.Find "姓名 Like '马*'"
If rsADO.EOF Then
MsgBox ("没有找到查找内容"): GoTo 100
Else
Do While Not rsADO.EOF
For j = 0 To rsADO.Fields.Count - 1
Sheets("Sheet1").Cells(2 + i, j + 1) = rsADO.Fields(j)
Next j
rsADO.Find "姓名 Like '马*'", 1, 1
i = i + 1
Loop
End If
100:
rsADO.Close
cnADO.Close
Set rsADO = Nothing
Set cnADO = Nothing
End Sub
代码截图:
代码的解读:
1 rsADO.Find "姓名 Like '马*'"
上述代码查找姓马的职工姓名
2 If rsADO.EOF Then
MsgBox ("没有找到查找内容"): GoTo 100
Else
如果没有找到,也就是说到了记录集的尾部,那么提示用户,没有找到。
3 Do While Not rsADO.EOF
For j = 0 To rsADO.Fields.Count - 1
Sheets("Sheet1").Cells(2 + i, j + 1) = rsADO.Fields(j)
Next j
rsADO.Find "姓名 Like '马*'", 1, 1
i = i + 1
Loop
End If
如果找到,那么显示记录,并查找下一条rsADO.Find "姓名 Like '马*'", 1, 1 是查找下一条,步长为1,向下查找。
好了,我们看下面的代码的运行测试,首先看看我们的数据库的记录:
我们再利用本讲的程序进行FIND查找,结果:
今日内容回向:
1 在Recordset 中如何利用FIND方法查找?
2 criteria 中的“比较操作符”是否理解呢?
《VBA代码解决方案》系列电子书,是我将一些非常实用的VBA内容结集成册,PDF格式文件,朋友们可以从中查找到你想要解决问题的思路和方法,可以复制文中的VBA代码直接使用。有需要的朋友微信联络我NZ9668。