sql - 如何将 SQL 语句结果导出到 Excel 文件

标签 sql excel vba ms-access

我在 Excel VBA 中有一个 Access 数据库和一个表单。我输入数据库的所有数据都是通过VBA表单输入的。

该数据库包含我们今年在公司收到的所有福利卡。但是同一个员工可以两次或多次索取卡,因此我们在数据库中为他提供了不止一条记录。

我需要的是当记录数大于1时,SQL语句结果应该出现在Excel报告中。

我使用 SELECT (*) COUNT声明以了解何时有多个记录与搜索条件兼容。但我不能让结果出现在 Excel 文件中。

这是我的代码:

Public Function Relatorio()
    Dim sql As String
    Dim cn  As ADODB.Connection
    Dim rs  As ADODB.Recordset
    Dim rel As String

    Set cn = New ADODB.Connection
    cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & enderecoDB & ";Jet OLEDB:Database"
    cn.Open
    Set rs = New ADODB.Recordset
    sql = "INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=" & enderecoDB & ";', 'SELECT * FROM [Planilha1$]') SELECT * FROM controle WHERE BP = " & controlectform.nmbpbox.Value & ";"
    rs.Open sql, cn
End Function

当我运行此代码时,它会给我一条消息,内容如下:

Can't locate the OPENROWSET Table exit



我无法安装新程序,因此我只需要使用 Excel VBA 和 Access DB 即可。

我怎样才能使这项工作?

最佳答案

我不相信 Access 支持您在那里使用的 OPENROWSET 动态表。我有很多旧项目可以做到这一点,所以这是我的方法

Public Function Relatorio()

    Dim sql As String
    Dim cn  As ADODB.Connection
    Dim rs  As ADODB.Recordset
    Dim rel As String


    Set cn = New ADODB.Connection

    cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & enderecoDB & ";Jet OLEDB:Database"

    cn.Open

    Set rs = New ADODB.Recordset

    dim path_To_XLSX
    dim name_of_sheet
    path_To_XLSX = "c:\temp\output.xlsx"
    name_of_sheet = "Planilha1"
    sql = sql = "SELECT * INTO [Excel 12.0;Database=" & path_To_XLSX & "]." & name_of_sheet & " FROM controle WHERE BP = '" & controlectform.nmbpbox.Value & "';" 

    rs.Open sql, cn

    'If this application is in an unsecure environment, use the following code instead!  This is to prevent a SQL injection, security concern here.
    'As it is an Access Database, this is likely overkill for this project
    'Create Command Object.
    Set Cmd1 = New ADODB.Command
    Cmd1.ActiveConnection = cn
    cmd1.CommandText = "SELECT * FROM controle INTO [Excel 12.0;Database=" & path_To_XLSX & "]." & name_of_sheet & " WHERE BP = ?"
    ' Create Parameter Object.
    Set Param1 = Cmd1.CreateParameter(, adInteger, adParamInput, 5) 'use adVarchar for strings(versus adInteger), https://www.w3schools.com/asp/met_comm_createparameter.asp
    Param1.Value = controlectform.nmbpbox.Value
    Cmd1.Parameters.Append Param1
    Set Param1 = Nothing
    Set Rs = Cmd1.Execute()

End Function

关于sql - 如何将 SQL 语句结果导出到 Excel 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43239512/

相关文章:

sql - 从 Postgres 查询格式化嵌套的 JSON 对象

MySQL 索引不用于 LIKE for INT?

如果未找到值,Excel 最小值大于 x 返回 0?

Excel VBA 即时窗口在测试我的函数时产生一个空行,但在测试内置函数时正常工作

html - VBA:单击网站下拉列表中的选项

php - 避免唯一约束与学说冲突的最佳方法是什么?

SQL 查询总重量

excel - 在 Microsoft Excel 2007 中查找并排序与单个月份相同的月份名称

database - 未打开 MS Access 时 DMax 功能不起作用

excel - 如何使用 vba 和另一个工作簿仅对空单元格应用 vlookup