示例:Excel*作为数据库,从Excel中获取来自于交通院,语文和数学成绩都是*>80**分的信息
实现结果
思考
传统方法:对数据表进行循环判断,找到满足条件的行
新方法:查询通过一句***SQL***实现
SQL = "Select " & filds & " From " & tbl_name & " Where (" & searchC & ")"
,逻辑过程如下:- 连接数据库
- 确定***SQL***语句
- 执行***SQL***语句
- 获取结果
- 断开数据库
SQL
代码
过程main
Sub main() Dim dbAddr
dbAddr = ThisWorkbook.Path & "\数据源.xlsx"
Dim adConn As ADODB.Connection '连接
Set adConn = New ADODB.Connection Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset Dim SQL As String
Dim filds Dim tbl_name Dim searchC
adConn.Open "provider=Microsoft.ACE.OLEDB.12.0;" _
& "extended properties=excel 12.0;" _
& "data source=" & dbAddr
filds = "姓名,学院,语文,数学"
tbl_name = "[data$]"
Dim searchC1 Dim searchC2 Dim searchC3 Dim sht_name Dim sht Dim i
searchC1 = "学院='交通院'"
searchC2 = "语文>80"
searchC3 = "数学>80"
searchC = searchC1 & " and " & searchC2 & " and " & searchC3
SQL = "Select " & filds & " From " & tbl_name & " Where (" & searchC & ")"
Set rs = adConn.Execute(SQL)
sht_name = "示例"
Set sht = ThisWorkbook.Worksheets(sht_name) For i = 1 To rs.Fields.Count Step 1
sht.Range("A1").Offset(0, i - 1) = rs.Fields(i - 1).Name '字段序号从0开始
Next i
sht.Range("A2").CopyFromRecordset rs
sht.Cells.EntireColumn.AutoFit '关闭数据库
adConn.Close Set adConn = NothingEnd Sub
代码截图
部分代码解读
数据库连接
***Excel***连接adConn.Open "provider=Microsoft.ACE.OLEDB.12.0;" _ & "extended properties=excel 12.0;" _ & "data source=" & dbAddr
Access连接
With adConn .Provider = "Microsoft.ACE.OLEDB.12.0;" .Open "Data Source=" & dbAddrEnd With
工作表的表示方法
tbl_name = "[data$]"
,使用[$]
复制***rs***信息到工作表:
sht.Range("A2").CopyFromRecordset rs
**
**
Ps:
1)采用ADO的方式连接的数据库,需要人为先在*VBE*中打开这个引用,菜单工具-引用
2)当数据量越大,本文中采用的方式,效率越明显,是不错的方法幺