相关文章推荐
VBA数据库解决方案第18讲:数据库中Recordset对象Find方法的利用

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。

发布于 2019-06-17 09:09

文章被以下专栏收录

 
推荐文章