Использование VBA для экспорта всех запросов SQL Access в текстовые файлы

Мне нужно документировать базу данных MS Access с большим количеством запросов макросов и т.д. Я хочу использовать код для извлечения каждого запроса SQL в файл, который называется так же, как и запрос, например, если запрос называется q_warehouse_issues, тогда я хотите извлечь SQL в файл с именем q_warehouse_issues.sql

Я НЕ ХОЧУ ЭКСПОРТ УСТАНОВИТЬ РЕЗУЛЬТАТ QUERY, ТОЛЬКО SQL!

Я знаю, что могу сделать это вручную в Access, но я устал от всех щелчков, делая saveas и т.д.

Ответ 1

Это должно помочь вам:

  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

Вы можете использовать объект файловой системы или встроенные функции ввода-вывода VBA для записи SQL файла в файл. Я предполагаю, что вы спрашивали больше о том, как получить SQL, чем о том, как записать файл, но если вам это нужно, скажите это в комментарии, и я отредактирую сообщение (или кто-то опубликует свой собственный ответ с инструкции для этого).

Ответ 2

Надеюсь, что это поможет.

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

Ответ 3

Это решение включает поля в запросе

Public Sub ListQueries()
    ' Author:                     Date:               Contact:
    ' André Bernardes             09/09/2010 08:45    [email protected]     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

Ответ 4

  • В окне VB нажмите Tools->References....
  • В окне "Ссылки" добавьте зависимость 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