2009-08-14 12 views
20

Muszę udokumentować bazę danych MS Access za pomocą wielu wielu zapytań makr itp. Chciałbym użyć kodu do wyodrębnienia każdego zapytania SQL do pliku o nazwie takiej samej jak kwerenda, np. jeśli zapytanie ma nazwę q_warehouse_issues, a następnie chcę wyodrębnić SQL do pliku o nazwie q_warehouse_issues.sqlUżywanie języka VBA do eksportowania wszystkich zapytań SQL MS Access do plików tekstowych

NIE CHCĘ WYWRÓCIĆ ZESTAW WYNIKÓW QUERY, TYLKO W SQL!

wiem, że mogę to zrobić ręcznie w programie Access, ale jestem zmęczony wszystkimi kliknięcie, robi saveas itp

+1

Osobiście wyeksportowałem nazwy zapytań i udokumentowałem, do czego są przeznaczone. Zamiast kompletnego ciągu SQL. Cała dokumentacja szybko staje się nieaktualna w takich sytuacjach, w których ludzie pracujący w bazie danych mają o wiele lepsze rzeczy do zrobienia niż pamiętanie, aby zapisać ciąg zapytania za każdym razem, gdy wprowadzają zmiany. –

Odpowiedz

21

To powinno Ci 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żna użyć File System Obiekt lub wbudowane funkcje We/Wy pliku VBA do zapisania SQL do pliku. Zakładam, że pytasz więcej o to, jak uzyskać SQL, niż o to, jak napisać plik, ale jeśli potrzebujesz tego, powiedz to w komentarzu, a ja zmienię wpis (lub ktoś napisze własną odpowiedź instrukcje dla tego).

+0

David, wielkie dzięki. Właśnie tego potrzebowałem (jak uzyskać SQL). Powinno ułatwić życie ... –

+0

Tylko tylko dowiedziałem się, jak oznaczyć. Nie było to oczywiste, ale StackOverflow jest świetny! –

8

Rozwiązanie to 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 
+4

Proszę nie używać bloku podpisu. Na Twoich pytaniach i odpowiedziach znajduje się link do Twojego profilu, który działa jako Twój podpis na SO. Ludzie mogą to kliknąć, aby wyświetlić swój profil, i możesz publikować informacje kontaktowe, które chcesz tam umieścić. –

+1

Stary, nie masz pojęcia, ile pracy właśnie mnie uratowałeś. Dzięki! –

+1

Musi to być 'For i = 0 To CurrentDb.QueryDefs.Count - 1', a nie' TableDefs' – noway

3
  1. w oknie VB, kliknij Tools->References....
  2. W oknie Odniesienia dodać zależność Microsoft Scripting Runtime poprzez sprawdzenie go.

Następnie kod ten będzie eksportować kwerendy do pliku odpowiedniego korzystania 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 
11

nadzieję, że to pomaga.

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