将DAO QueryDef保存到临时查询并将结果输出到Excel

时间:2019-03-17 17:39:49

标签: mysql vba ms-access dao

因此,我有一个Access项目,首先我在其中创建了一个TempQuery,并使用该查询将结果输出到效果很好的Excel文件中。

这是代码:

    Dim qdf As QueryDef

    DoCmd.DeleteObject acQuery, "qryTemp"
    Set qdf = CurrentDb.CreateQueryDef("qryTemp", Me.Child13.Form.RecordSource)
    DoCmd.OutputTo acOutputQuery, "qryTemp", acFormatXLS, , True

    Exit Sub

我现在想做的事情是一样的,但是通过DAO连接使用MySQL数据库,因为我仅将此Access文件用作前端。

这是到目前为止我得到的:

    Dim db As DAO.Database
    Dim qdf As DAO.QueryDef
    Dim SQL As String


    Set db = OpenDatabase("", False, False, Globales.ConnString)

    SQL = "SELECT tbl1Facturas.Verificado, tbl1Facturas.Factura, tbl1Facturas.Fecha, tbl5Localidades.NombreLocalidad, tbl6Suplidores.NombreSuplidor, tbl1Facturas.Subtotal, tbl1Facturas.[IVU MUNICIPAL], tbl1Facturas.[IVU ESTATAL], tbl1Facturas.[Total de Compra], tbl1Facturas.[Exento al IVU ESTATAL], tbl1Facturas.[Credito al Subtotal], tbl1Facturas.[Credito IVU Municipal], tbl1Facturas.[Credito IVU ESTATAL], tbl1Facturas.[Metodo de Pago], tbl1Facturas.[ID Metodo Pago], tbl1Facturas.MetodoPago_PDF, tbl1Facturas.Factura_PDF " _
        & "FROM (tbl1Facturas INNER JOIN tbl5Localidades ON tbl1Facturas.Localidad_ID = tbl5Localidades.ID) INNER JOIN tbl6Suplidores ON tbl1Facturas.Suplidor_ID = tbl6Suplidores.ID " _
        & "WHERE MONTH(tbl1Facturas.Fecha) = Month(#" & Me.Text19 & "#) " _
        & "AND YEAR(tbl1Facturas.Fecha) = Year(#" & Me.Text19 & "#) " _
        & "AND tbl1Facturas.Localidad_ID = " & Me.Combo23.Column(0) & " " _
        & "ORDER BY tbl1Facturas.Fecha; "

    Set qdf = db.CreateQueryDef("qryTemp", SQL)

    DoCmd.OutputTo acOutputQuery, "qryTemp", acFormatXLS, , True
    Exit Sub

欢迎所有帮助! :P

1 个答案:

答案 0 :(得分:1)

修改后的导出代码在远程数据库中创建(或尝试)查询。由于远程数据库是MySQL,我希望尝试使用QueryDefs创建查询失败。即使创建了查询,OutputTo也会在本地数据库中查找查询,但找不到它。

请考虑以下示例,该示例是从另一个成功导出的Access数据库中提取的:

Dim qdf As DAO.QueryDef
DoCmd.DeleteObject acQuery, "qryTemp"
Set qdf = CurrentDb.CreateQueryDef("qryTemp", "SELECT * FROM sometable  IN '\\servername\path\DBname.accdb'")
DoCmd.OutputTo acOutputQuery, "qryTemp", acFormatXLS, , True

该过程完成后,前端中将保存一个查询对象(尽管它不会立即显示在导航窗格中)。由于创建了对象,因此只需创建一个表并导出该表即可。不幸的是,我看不到如何在QueryDefs或SELECT INTO操作中引用MySQL数据库,因此该对象将在前端创建。可能可以遍历一个记录集,然后一次将数据写入表中的一条记录。

我只能看到的其他替代方法是使用Excel自动化。打开Excel对象,并使用CopyFromRecordset方法导出到工作表范围。

Dim db As DAO.Database, rs As DAO.Recordset
Dim xl As Excel.Application, wb As Excel.Workbook

Set db = OpenDatabase("", False, False, Globales.ConnString)

Set rs = db.OpenRecordset("SELECT Verificado, Factura, Fecha, NombreLocalidad, NombreSuplidor, Subtotal, [IVU MUNICIPAL], [IVU ESTATAL], [Total de Compra], [Exento al IVU ESTATAL], [Credito al Subtotal], [Credito IVU Municipal], [Credito IVU ESTATAL], [Metodo de Pago], [ID Metodo Pago], MetodoPago_PDF, Factura_PDF " _
    & "FROM (tbl1Facturas INNER JOIN tbl5Localidades ON tbl1Facturas.Localidad_ID = tbl5Localidades.ID) " _
    & "INNER JOIN tbl6Suplidores ON tbl1Facturas.Suplidor_ID = tbl6Suplidores.ID " _
    & "WHERE MONTH(tbl1Facturas.Fecha) = Month(#" & Me.Text19 & "#) " _
    & "AND YEAR(tbl1Facturas.Fecha) = Year(#" & Me.Text19 & "#) " _
    & "AND tbl1Facturas.Localidad_ID = " & Me.Combo23.Column(0) & " " _
    & "ORDER BY tbl1Facturas.Fecha;")

Set xl = CreateObject("Excel.Application")
Set wb = Workbooks.Add
wb.Sheets("Sheet1").Range("A1").CopyFromRecordset rs
xl.Visible = True