如何从 VBA Access 中的查询中获取记录?

Posted

技术标签:

【中文标题】如何从 VBA Access 中的查询中获取记录?【英文标题】:How to get the record from a query in VBA Acces? 【发布时间】:2021-01-16 18:17:30 【问题描述】:

考虑到这个excel

我在 Microsoft Access 中创建了一个 VBA 函数来读取此文件并将其保存/导入到我的表上,即:部门、员工和职位。这就是我制作函数的方式:

Private Sub Command41_Click()
    Dim fileName As String
    Dim fso As New FileSystemObject
    Dim xlApp As Excel.Application
    Dim xlWb As Excel.Workbook
    Dim xlWs As Excel.Worksheet
    Dim intLine As Long
    Dim rs As DAO.Recordset
    
    Dim sql As String, deptId As Long, empId As Long, jobId As Long
    
    fileName = "C:\Users\Admin\Documents\Reports.xlsx"
    
    If fso.FileExists(fileName) Then
        Set xlApp = New Excel.Application
        xlApp.Visible = True
        
        Set xlWb = xlApp.Workbooks.Open(fileName)
        Set xlWs = xlWb.Worksheets(1)
        
        intLine = xlWs.Cells(Rows.Count, 1).End(xlUp).Row
        For i = 2 To intLine
            sql = "SELECT ID FROM Departments WHERE DeptName = " & xlWs.Cells(i, 1)
            Set rs = CurrentDb.OpenRecordset(sql, dbOpenSnapshot)
            MsgBox rs
        Next
    End If
End Sub

我的问题是这一行Set rs = CurrentDb.OpenRecordset(sql, dbOpenSnapshot) 正在返回此错误:错误 3061 参数太少。预计 4。我不知道我还缺少哪些其他参数,因为在网上我只找到了两个。

非常感谢任何帮助

【问题讨论】:

【参考方案1】:

DeptName 是一个文本类型字段。文本字段的串联参数需要撇号分隔符。

sql = "SELECT ID FROM Departments WHERE DeptName = '" & xlWs.Cells(i, 1) & "'"

不使用 VBA 打开 Excel 对象,另一种方法是设置指向 Excel 工作表的链接并将链接视为表格(除了无法编辑其数据)。在连接表的查询中使用链接或使用 DLookup() 聚合函数。

MsgBox rs 也会失败,因为 rs 是一个记录集对象,而 MsgBox 需要一个字符串。可以读取记录集的一个字段:MsgBox rs!ID。如果检索到多个 ID 值,则必须遍历记录集以构建具有串联的字符串。使用 Excel 链接替代,可以只打开一个过滤的查询对象。

【讨论】:

以上是关于如何从 VBA Access 中的查询中获取记录?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Access VBA,如何计算选择查询中的输出记录数并将计数存储为 VBA 变量?

VBA Access SQL SELECT查询只返回一条记录

如何在 Access VBA 中运行附加查询以根据表单字段中的数量创建一定数量的相同记录?

如何在 VBA 代码中的 ms-access 中执行查询?

在不使用 VBA/Access 中的内联查询的情况下向表中添加记录

如何从 Access VBA 中的另一个私有子获取私有子中声明的变量的值