本文逐步介绍如何将数据从 Microsoft SQL Server 附带的示例数据库 Pubs 中导入 Microsoft Excel。
ActiveX 数据对象 (ADO) 可用来访问任意类型的数据源。它是具有少数几个对象的平面对象模型。ADO 对象模型中的主要对象有:
对象 说明
--------------------------------------------------------------------------
Connection 指示到数据源的连接。
Recordset 指示所提取的数据。
Command 指示需要执行的存储过程或 SQL 语句。
尽管使用 ADO 返回记录集有很多种方法,但本文主要介绍 Connection 和 Recordset 对象。
要求
必须具有运行 Microsoft SQL Server 且包含 Pubs 数据库的本地服务器。
Microsoft 建议您掌握以下几个方面的知识:
• | 在 Office 程序中创建 Visual Basic for Applications 过程。 |
• | 使用 Object 变量。 |
• | 使用 Excel 对象。 |
• | 关系数据库管理系统 (RDBMS) 概念。 |
• | 结构化查询语言 (SQL) SELECT 语句 |
引用 ADO 对象库
1. | 启动 Excel。打开一个新工作簿,然后将其保存为 SQLExtract.xls。 |
2. | 启动 Visual Basic 编辑器并选择您的 VBA 项目。 |
3. | 在工具菜单上,单击引用。 |
4. | 单击以选中最新版本的 Microsoft ActiveX 数据对象库的复选框。 |
创建连接
1. | 在项目中插入一个新模块。 |
2. | 创建一个新的名为 DataExtract 的子过程。 |
3. | 键入或粘贴以下代码: ' Create a connection object.
Dim cnPubs As ADODB.Connection
Set cnPubs = New ADODB.Connection
' Provide the connection string.
Dim strConn As String
'Use the SQL Server OLE DB Provider.
strConn = "PROVIDER=SQLOLEDB;"
'Connect to the Pubs database on the local server.
strConn = strConn & "DATA SOURCE=(local);INITIAL CATALOG=pubs;"
'Use an integrated login.
strConn = strConn & " INTEGRATED SECURITY=sspi;"
'Now open the connection.
cnPubs.Open strConn
|
提取数据
键入或粘贴以下代码以提取您的记录:
' Create a recordset object.
Dim rsPubs As ADODB.Recordset
Set rsPubs = New ADODB.Recordset
With rsPubs
' Assign the Connection object.
.ActiveConnection = cnPubs
' Extract the required records.
.Open "SELECT * FROM Authors"
' Copy the records into cell A1 on Sheet1.
Sheet1.Range("A1").CopyFromRecordset rsPubs
' Tidy up
.Close
End With
cnPubs.Close
Set rsPubs = Nothing
Set cnPubs = Nothing
验证能否正常工作
1. | 运行上述代码。 |
2. | 切换到 Excel 并在工作簿的 Sheet1 中查看数据。 |
疑难解答
如果代码似乎挂起并出现运行时错误,则数据库服务器可能已停机。您可以使用 ConnectionTimeout 属性来控制返回运行时错误所需的时间。请将此属性的值设置为大于零。如果将该值设置为零,则连接将永远不会超时。默认值是 15 秒。
通过搜索以下 Microsoft Web 站点可以找到其他代码示例: