新增文章
文章标题
分类
C#
云星空
K3 BOS
K3 功能
用友
Oracle
python
SQL
MySql
PHP
HTML
script
windows
Access
影视后期
财务
服务
生活
内容
在 Access 中使用 VBA 读取本地表的数据,通常需要通过 DAO 或 ADO 来操作数据库。DAO(Data Access Objects)是 Access 自带的数据库访问技术,适合用来读取 Access 数据库中的表格数据。 以下是如何使用 VBA 在 Access 中读取本地表(假设表名为 MyTable)的数据的示例代码: 1. 使用 DAO 读取数据 Sub ReadDataUsingDAO() Dim db As DAO.Database Dim rs As DAO.Recordset Dim rowNum As Integer ' 获取当前数据库对象 Set db = CurrentDb ' 打开表格数据的 Recordset Set rs = db.OpenRecordset("SELECT * FROM MyTable", dbOpenSnapshot) ' 如果表格有数据 If Not rs.EOF Then rowNum = 1 ' 遍历 Recordset 中的所有记录 Do While Not rs.EOF ' 输出每一行的数据(在立即窗口中查看) Debug.Print "Row " & rowNum & ": " & rs.Fields("FieldName1").Value & ", " & rs.Fields("FieldName2").Value ' 可以把数据输出到Excel或者其它地方 rowNum = rowNum + 1 rs.MoveNext Loop End If ' 关闭 Recordset rs.Close Set rs = Nothing Set db = Nothing End Sub 代码解释: CurrentDb:CurrentDb 返回当前的数据库对象,可以在 VBA 中访问当前数据库中的所有对象。 打开 Recordset:使用 db.OpenRecordset("SELECT * FROM MyTable", dbOpenSnapshot) 打开表 MyTable 中的数据,dbOpenSnapshot 表示以只读方式打开数据集。 遍历 Recordset:Do While Not rs.EOF 是一个常见的遍历记录集的方式,它会在记录集的末尾(EOF)之前一直循环。 输出数据:通过 rs.Fields("FieldName1").Value 来获取字段的值,FieldName1 需要替换成实际的字段名。 关闭资源:操作完后,要关闭 Recordset 对象,并释放相关资源。 2. 使用 ADO 读取数据 如果你希望使用 ADO(ActiveX Data Objects)来读取数据,首先需要确保引用了 ADO 库。可以通过 VBA 编辑器中的 工具 -> 引用 -> 勾选 Microsoft ActiveX Data Objects 6.1 Library 来启用 ADO。 以下是一个使用 ADO 的示例: Sub ReadDataUsingADO() Dim conn As Object Dim rs As Object Dim sql As String Dim rowNum As Integer ' 创建 ADO 连接对象 Set conn = CreateObject("ADODB.Connection") ' 设置连接字符串(本地 Access 数据库) conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & CurrentDb.Name & ";" ' SQL 查询语句 sql = "SELECT * FROM MyTable" ' 执行查询,获取 Recordset 对象 Set rs = conn.Execute(sql) ' 如果查询有数据 If Not rs.EOF Then rowNum = 1 ' 遍历 Recordset 中的所有记录 Do While Not rs.EOF ' 输出数据(示例:在立即窗口查看) Debug.Print "Row " & rowNum & ": " & rs.Fields("FieldName1").Value & ", " & rs.Fields("FieldName2").Value rowNum = rowNum + 1 rs.MoveNext Loop End If ' 关闭 Recordset 和连接 rs.Close conn.Close Set rs = Nothing Set conn = Nothing End Sub 代码解析: ADO 连接字符串:conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & CurrentDb.Name & ";" 这行代码为 ADO 提供了连接字符串,CurrentDb.Name 获取当前数据库的路径。 执行 SQL 查询:conn.Execute(sql) 执行 SQL 查询,返回 Recordset。 遍历 Recordset:与 DAO 类似,使用 Do While Not rs.EOF 遍历查询结果。 关闭资源:同样,操作完后需要关闭 Recordset 和 Connection,并释放对象。 3. 输出数据到 Excel 如果你想将读取的数据输出到 Excel,可以通过以下方式: Sub ExportDataToExcel() Dim db As DAO.Database Dim rs As DAO.Recordset Dim rowNum As Integer Dim xlApp As Object Dim xlSheet As Object ' 获取当前数据库对象 Set db = CurrentDb ' 打开表格数据的 Recordset Set rs = db.OpenRecordset("SELECT * FROM MyTable", dbOpenSnapshot) ' 创建 Excel 应用对象 Set xlApp = CreateObject("Excel.Application") xlApp.Visible = True ' 显示 Excel 窗口 ' 创建新的工作簿 Set xlSheet = xlApp.Workbooks.Add.Sheets(1) ' 在 Excel 第一行输出字段名 For i = 0 To rs.Fields.Count - 1 xlSheet.Cells(1, i + 1).Value = rs.Fields(i).Name Next i ' 输出数据到 Excel rowNum = 2 ' 从第二行开始 Do While Not rs.EOF For i = 0 To rs.Fields.Count - 1 xlSheet.Cells(rowNum, i + 1).Value = rs.Fields(i).Value Next i rowNum = rowNum + 1 rs.MoveNext Loop ' 关闭 Recordset rs.Close Set rs = Nothing Set db = Nothing End Sub 代码解析: Excel 自动化:使用 CreateObject("Excel.Application") 创建 Excel 应用对象。 输出表头:在 Excel 中的第一行输出字段名。 填充数据:通过循环将 Recordset 中的数据逐行逐列填充到 Excel 表格。 总结: 使用 DAO 或 ADO 都可以在 Access VBA 中读取本地表的数据。 DAO 更适用于 Access 数据库,通常也更直接和高效。 ADO 是一个更通用的数据库访问技术,适用于多种数据库(如 SQL Server、Oracle、MySQL 等)。
返回
保存