Access/VBA/Excel-多条件筛选数据-10


Part 1:目标

图片

  1. 目标1:将数据库中数据表学生信息表中的语文成绩大于85分且学号大于4的人员信息读入当前工作簿示例工作表

  2. 目标2:将数据库中数据表学生信息表中姓名为张三或者小红的人员信息读入当前工作簿示例工作表

  3. 逻辑过程

    • 连接数据库
    • 根据需求确定SQL语句
    • 执行SQL语句,得到recordset
    • recordset写入工作表(字段名+所有记录 列名+每一行)
    • 断开与数据库的连接
  4. 实现两个目标只有SQL语句不同,其余一致

    • 目标1:SQL = "Select * from " & tblName & " where 语文成绩>85 and 学号>4"
    • 目标2:SQL = "Select * from " & tblName & " where 姓名 in('张三','小红')"

目标1
图片

目标2
图片

Part 2:代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Sub test()        
Dim cnn As New ADODB.Connection '连接
Dim rs As New ADODB.Recordset
Dim SQL As String
Dim tblName
Dim dbAddr

dbAddr = ThisWorkbook.Path & "\学生信息.accdb"
tblName = "学生信息表"

'连接数据库
With cnn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.Open "Data Source=" & dbAddr
End With

SQL = "Select * from " & tblName & " where 语文成绩>85 and 学号>4"' SQL = "Select * from " & tblName & " where 姓名 in('张三','小红')"

Set rs = cnn.Execute(SQL)
Dim sht
Dim fildNum
Set sht = ThisWorkbook.Worksheets("示例")
sht.Cells.ClearContents

fildNum = rs.Fields.Count
For j = 0 To fildNum - 1 Step 1
fildName = rs.Fields(j).Name
sht.Cells(1, j + 1) = fildName
Next j

sht.Cells(2, 1).CopyFromRecordset rs

cnn.Close
Set rs = Nothing
Set cnn = NothingEnd Sub

代码截图
图片

Part 3:部分代码解读

  1. SQL = "Select * from " & tblName & " where 语文成绩>85 and 学号>4",中文释义:从工作表中获取满足语文成绩>85且学号>4的所有信息

  2. SQL = "Select * from " & tblName & " where 姓名 in('张三','小红')",中文释义:从工作表中获取满足姓名为张三或者小红的所有信息,也可以使用or来实现该功能

    • "Select * from " & tblName & " where 姓名='张三' or 姓名='小红'"