Part 1:目标

- 将数据库中数据表学生信息表中的语文成绩大于85分的人员信息读入当前工作簿示例工作表
- 逻辑过程
- 连接数据库
- 根据需求确定SQL语句
- 执行SQL语句,得到recordset
- 将recordset写入工作表(字段名+所有记录 即 列名+每一行)
- 断开与数据库的连接
- 所以与上一篇文章的区别在于SQL语句
上一篇文章:Access/VBA/Excel-获取数据库数据-08
Part 2:代码
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一句可能就搞定了