Сохранение DAO QueryDef во временный запрос и вывод результатов в Excel - PullRequest
1 голос
/ 17 марта 2019

Итак, у меня есть этот проект 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

То, что я пытаюсь сделать сейчас, это то же самое, но с использованием базы данных MySQL через соединение DAO, так как я использую этот файл Accessтолько как Front End.

Вот что я получил до сих пор:

    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 Ответ

1 голос
/ 18 марта 2019

Пересмотренный код экспорта создает (или пытается) запрос в удаленной базе данных. Поскольку удаленной базой данных является 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

Когда процедура завершится, во внешнем интерфейсе будет сохранен объект запроса (хотя он не будет сразу отображаться в области навигации). Поскольку объект создан, можно просто создать таблицу и экспортировать таблицу. К сожалению, я не вижу, как ссылаться на базу данных MySQL в QueryDefs или на действие SELECT INTO, чтобы объект создавался во внешнем интерфейсе. Возможно, может пройти через набор записей и записать данные в таблицу по одной записи за раз.

Единственная альтернатива, которую я вижу, - это использование автоматизации 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
...