(1条消息) Excel中VBA编程学习笔记(十七)
【例1】使用Connection对象,从数据库test.accdb的students表查询所有数据并存放到Sheet1表中。
Sub test()
Dim cnn, rst
Set cnn = CreateObject("ADODB.Connection")
Set rst = CreateObject("ADODB.Recordset")
Dim conStr$, sqlStr$
conStr = "provider=Microsoft.ace.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\test.accdb;"
cnn.Open conStr
sqlStr = "select * from students"
Worksheets("Sheet1").[A2].CopyFromRecordset cnn.Execute(sqlStr)
MsgBox "操作完成"
cnn.Close
End Sub
操作结果如下:

【例2】使用RecordSet对象,从数据库test.accdb的students表查询所有数据并存放到Sheet1表中。
Sub test()
Dim cnn, rst
Set cnn = CreateObject("ADODB.Connection")
Set rst = CreateObject("ADODB.Recordset")
Dim conStr$, sqlStr$
conStr = "provider=Microsoft.ace.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\test.accdb;"
cnn.Open conStr
sqlStr = "select * from students"
rst.Open sqlStr, cnn
Worksheets("Sheet1").[A2].CopyFromRecordset rst
rst.Close
cnn.Close
Set rst = Nothing
Set cnn = Nothing
End Sub
注:数据库及表均跟例1相同。
将读取的数据存储到数组
数据库记录如下:

读取结果如下:

Sub test()
Dim cnn, rst
Set cnn = CreateObject("ADODB.Connection")
Set rst = CreateObject("ADODB.Recordset")
Dim conStr$, sqlStr$
Dim arr(), title()
conStr = "provider=Microsoft.ace.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\test.accdb;"
cnn.Open conStr
sqlStr = "select * from students"
rst.Open sqlStr, cnn, adopenkeyset, adLockOptimistic
title = Array("ID", "sName", "sSex", "sAddress") '数据库中需要提取内容的字段(部分或者全部)
rst.Filter = "sAddress <>'武汉'" '过滤住址为武汉的记录
Rem 第二个参数设置为adbookmarkfirst表示从第1行开始,返回数组的第1个下标标识字段,第2个下标表示记录编号
arr = rst.getrows(adgetrowsrest, adbookmarkfirst, title)
Worksheets("Sheet1").[A1].Resize(UBound(arr, 2) + 1, UBound(arr, 1) + 1) = Application.WorksheetFunction.Transpose(arr)
rst.Close
cnn.Close
Set rst = Nothing
Set cnn = Nothing
End Sub
注:getrows的第三个参数为需要读取的字段。第二个字段可以取值如下
|
常量 |
值 |
含义 |
|
adBookmarkCurrent |
0 |
从当前记录开始 |
|
adBookmarkFirst |
1 |
从第1条记录开始 |
|
adBookmarkLast |
2 |
从最后一条记录开始 |
