将 DAO QueryDef 保存到临时查询并将结果输出到 Excel
Save DAO QueryDef to Temporary Query and Output Results to Excel
所以我有这个 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 数据库,因为我仅将此访问文件用作前端。
这是我到目前为止得到的:
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
修改后的导出代码在远程数据库中创建(或尝试)查询。由于远程数据库是 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
过程完成后,前端会保存一个查询对象(尽管它不会立即显示在导航窗格中)。由于创建了一个对象,可以只创建一个 table 并导出 table。不幸的是,我看不到如何在 QueryDefs 或 SELECT INTO 操作中引用 MySQL 数据库,以便在前端创建对象。可能会遍历记录集并将数据一次写入 table 一条记录。
我能看到的唯一其他选择是使用 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
所以我有这个 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 数据库,因为我仅将此访问文件用作前端。
这是我到目前为止得到的:
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
修改后的导出代码在远程数据库中创建(或尝试)查询。由于远程数据库是 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
过程完成后,前端会保存一个查询对象(尽管它不会立即显示在导航窗格中)。由于创建了一个对象,可以只创建一个 table 并导出 table。不幸的是,我看不到如何在 QueryDefs 或 SELECT INTO 操作中引用 MySQL 数据库,以便在前端创建对象。可能会遍历记录集并将数据一次写入 table 一条记录。
我能看到的唯一其他选择是使用 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