使用VBA将所有MS Access SQL查询导出到文本文件

Pie*_*ber 27 sql ms-access access-vba

我必须使用许多宏查询来记录MS Access数据库等.我希望使用代码将每个SQL查询提取到与查询命名相同的文件,例如,如果查询名为q_warehouse_issues,那么我希望提取SQL到名为q_warehouse_issues.sql的文件

我不希望导出QUERY结果集,只是SQL!

我知道我可以在Access中手动执行此操作,但我厌倦了所有点击,执行saveas等.

Dav*_*ton 27

这应该让你开始:

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

  Set db = CurrentDB()
  For Each qdf In db.QueryDefs
    Debug.Print qdf.SQL
  Next qdf
  Set qdf = Nothing
  Set db = Nothing
Run Code Online (Sandbox Code Playgroud)

您可以使用文件系统对象或内置的VBA文件I/O功能将SQL写入文件.我假设您要求的更多关于如何获取SQL而不是关于如何写出文件,但是如果您需要,请在评论中这样说,我将编辑帖子(或者有人会发布他们自己的答案说明).


小智 18

希望这可以帮助.

Public Function query_print()
Dim db As Database
Dim qr As QueryDef

Set db = CurrentDb

For Each qr In db.QueryDefs
  TextOut (qr.Name)
  TextOut (qr.SQL)
  TextOut (String(100, "-"))
Next
End Function

Public Sub TextOut(OutputString As String)

    Dim fh As Long

    fh = FreeFile
    Open "c:\File.txt" For Append As fh
    Print #fh, OutputString
    Close fh

End Sub
Run Code Online (Sandbox Code Playgroud)


小智 8

此解决方案包括查询中的字段

Public Sub ListQueries()
    ' Author:                     Date:               Contact:
    ' André Bernardes             09/09/2010 08:45    bernardess@gmail.com     http://al-bernardes.sites.uol.com.br/
    ' Lista todas as queries da aplicação.
    ' Listening:

    Dim i As Integer
    Dim j As Integer
    Dim k As Integer
    Dim l As Integer

    On Error Resume Next

    For i = 0 To CurrentDb.QueryDefs.Count - 1
        Debug.Print "Query: " & CurrentDb.QueryDefs(i).Name

        For j = 0 To CurrentDb.QueryDefs(i).Fields.Count - 1
            Debug.Print "Field " & CurrentDb.QueryDefs(i).Fields(j).Name
        Next

        Debug.Print "  SQL: " & CurrentDb.QueryDefs(i).SQL
    Next
End Sub
Run Code Online (Sandbox Code Playgroud)

  • 请不要使用签名块.您的问题和答案的个人资料链接可以作为您在SO上的签名.人们可以点击它来查看您的个人资料,您可以在那里发布您想要的任何联系信息. (4认同)

lee*_*d00 5

  1. 在 VB 窗口中,单击Tools->References....
  2. 在“引用”窗口中,Microsoft Scripting Runtime通过选中它来添加依赖项。

然后此代码会将查询导出到适合使用 grep 的文件:

Sub ExportQueries()

  Dim fso As New FileSystemObject

  Dim stream As TextStream

  Set stream = fso.CreateTextFile("e:\temp\queries.txt")

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

  Set db = CurrentDb()
  For Each qdf In db.QueryDefs

    stream.writeline "Name: " & qdf.Name
    stream.writeline qdf.SQL
    stream.writeline "--------------------------"
  Next qdf
  Set qdf = Nothing
  Set db = Nothing

End Sub
Run Code Online (Sandbox Code Playgroud)