Part 1:目标

将数据库中数据表学生信息表中的语文成绩大于85分的人员信息读入当前工作簿示例工作表
逻辑过程
- 连接数据库
- 根据需求确定SQL语句
- 执行SQL*语句,得到recordset*
- 将recordset写入工作表(字段名+所有记录 即 列名+每一行)
- 断开与数据库的连接
所以与上一篇文章的区别在于SQL语句
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
| 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"
Set rs = cnn.Execute(SQL) Dim sht Dim fildNum Set sht = ThisWorkbook.Worksheets("示例")
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
|
代码截图

Access与Excel数据对比

Part 3:部分代码解读
"Select * from " & tblName & " where 语文成绩>85"
,中文释义:从工作表中获取满足语文成绩>85所有信息
rs.Fields.Count
获取字段数目
- 字段是从0开始计数,所以最后一个字段表示为rs.Fields(rs.Fields.Count-1)
rs.Fields(j).Name
获取字段的名称(列名)
CopyFromRecordset
复制整个rs
(所有记录)
联想:那么是不是还有其它筛选方式呢?那必须有,这也是SQL的强大之处,常规VBA语句需要写很多代码实现的功能,SQL一句可能就搞定了