Używanie VBA do eksportowania wszystkich zapytań MS Access SQL do plików tekstowych

Muszę udokumentować bazę danych MS Access z wieloma zapytaniami makr itp. Chcę użyć kodu, aby wyodrębnić każde zapytanie SQL do pliku, który ma taką samą nazwę jak zapytanie, np. jeśli zapytanie ma nazwę q_warehouse_issues to chcę wyodrębnić SQL do pliku o nazwie q_warehouse_issues.sql

NIE CHCĘ EKSPORTOWAĆ ZESTAWU WYNIKÓW ZAPYTANIA, TYLKO SQL!

Wiem, że mogę to zrobić ręcznie w Access, ale mam dość klikania, robienia saveas itp.

Author: Pieter Nienaber, 2009-08-14

4 answers

To powinno zacząć:

  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

Możesz użyć obiektu systemu plików lub wbudowanych funkcji We/Wy plików VBA, aby zapisać SQL do pliku. Zakładam, że pytałeś więcej o to, jak uzyskać SQL niż o to, jak napisać plik, ale jeśli potrzebujesz, powiedz to w komentarzu, a ja edytuję post (lub ktoś zamieści własną odpowiedź z instrukcjami na to).

 23
Author: David-W-Fenton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-18 17:31:19

Mam nadzieję, że to pomoże.

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
 15
Author: yoonjinl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-17 04:38:12

To rozwiązanie zawiera pola w zapytaniu

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
 8
Author: Andre Bernardes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-07 20:20:11
  1. w oknie VB Kliknij Tools->References....
  2. w oknie Referencje dodaj zależność Microsoft Scripting Runtime, zaznaczając ją.

Następnie ten kod wyeksportuje zapytania do pliku odpowiedniego do użycia grep na:

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
 3
Author: leeand00,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-18 17:44:49