(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

从最后一条记录开始

(0)

相关推荐