2009-08-14 1 views
20

Ich muss eine MS Access-Datenbank mit vielen vielen Makroabfragen, etc. dokumentieren. Ich möchte Code verwenden, um jede SQL-Abfrage in eine Datei mit dem gleichen Namen zu extrahieren die Abfrage, zB wenn eine Abfrage den Namen q_warehouse_issues hat, dann möchte ich das SQL in eine Datei mit dem Namen q_warehouse_issues.sqlMit VBA alle MS Access SQL-Abfragen in Textdateien exportieren

extrahieren Ich möchte nicht das Abfrageergebnis SET EXPORTIERT, nur die SQL!

Ich weiß, dass ich das in Access manuell tun können, aber ich bin müde von all das Klicken, tun saveas usw.

+1

Persönlich würde ich nur die Abfragenamen exportieren und dokumentieren, wofür sie verwendet werden. Anstatt der vollständigen SQL-Zeichenfolge. Die gesamte Dokumentation wird in solchen Situationen ziemlich schnell veraltet, wenn die Leute, die an der Datenbank arbeiten, viel bessere Dinge zu tun haben, als daran zu denken, die Abfragezeichenfolge jedes Mal zu speichern, wenn sie Änderungen vornehmen. –

Antwort

21

Dies sollte Sie erhalten begonnen:

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 

Sie können die Dateisystem verwenden Object oder die integrierten VBA-Datei-E/A-Funktionen, um SQL in eine Datei zu schreiben. Ich nehme an, du fragst mehr darüber, wie du das SQL bekommen kannst, als über das Schreiben der Datei, aber wenn du das brauchst, sag es in einem Kommentar und ich bearbeite den Beitrag (oder jemand wird seine eigene Antwort mit posten) Anweisungen dafür).

+0

David, vielen Dank. Das ist genau das, was ich brauchte (wie man das SQL bekommt). Sollte das Leben einfach machen ... –

+0

Nur gerade herausgefunden, wie man es markiert. Es war nicht offensichtlich, aber StackOverflow ist großartig! –

8

Diese Lösung umfassen Felder in Abfrage

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

Bitte verwenden Sie keinen Signaturblock. Es gibt einen Link zu Ihrem Profil in Ihren Fragen und Antworten, der Ihre Unterschrift auf SO darstellt. Personen können darauf klicken, um Ihr Profil anzuzeigen, und Sie können die gewünschten Kontaktinformationen dort veröffentlichen. –

+1

Alter, du hast keine Ahnung, wie viel Arbeit du mir gerade erspart hast. Vielen Dank! –

+1

Es muss sein 'Für i = 0 bis CurrentDb.QueryDefs.Count - 1' nicht' TableDefs' – noway

3
  1. Im VB-Fensters auf Tools->References....
  2. Im Referenzen Fenster fügen Sie die Abhängigkeit Microsoft Scripting Runtime, indem Sie sie überprüfen.

Dann ist dieser Code wird die Abfragen in einer Datei geeignet für die Verwendung von grep exportieren auf:

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 
11

Hoffnung, das hilft.

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