Использование VBA для экспорта всех запросов MS Access SQL в текстовые файлы
Я должен документировать базу данных MS Access со многими запросами макросов и т. Д. Я хочу использовать код для извлечения каждого запроса SQL в файл, который называется так же, как запрос, например, если запрос называется q_warehouse_issues, то я хочу извлечь SQL для файла с именем q_warehouse_issues.sql
Я НЕ ХОЧУ ЭКСПОРТИРОВАТЬ НАБОР РЕЗУЛЬТАТОВ, ПРОСТО SQL!
Я знаю, что могу сделать это вручную в Access, но я устал от всех нажатий, сохранения и т. Д.
4 ответа
Это должно помочь вам начать:
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, чем о том, как выписать файл, но если вам это нужно, скажите об этом в комментарии, и я отредактирую сообщение (или кто-то опубликует свой ответ с инструкции для этого).
Надеюсь это поможет.
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
Это решение включает в себя поля в запросе
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
- В окне 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
Я изменил код @andre-bernardes, чтобы использовать "|" разделители перед именами запросов и разделители ":" перед операторами SQL. Различные разделители облегчают анализ Queries.txt
файл с питоном и создать словарь запросов и операторов SQL. Затем вы можете использовать этот словарь, например, для создания представлений в таблице SQLite.
Код VBA для извлечения запросов SQL
Public Sub ListQueries()
' Modified from André Bernardes
Dim i As Integer
Dim ff As Long
ff = FreeFile()
Open "C:\Dev\Queries.txt" For Output As #ff
On Error Resume Next
For i = 0 To CurrentDb.QueryDefs.Count - 1
Debug.Print "|" & CurrentDb.QueryDefs(i).Name & ":"
Print #ff, "|" & CurrentDb.QueryDefs(i).Name & ":"
Debug.Print CurrentDb.QueryDefs(i).SQL
Print #ff, CurrentDb.QueryDefs(i).SQL
Next
End Sub
Python код для разбора Queries.txt в словарь
queries_file = open(data_path + '/Queries.txt')
queries = queries_file.read().split('|')
l = [x.split(':') for x in queries]
l.pop(0)
table_name_to_query = {name: query for name, query in l}
Создание представлений SQLite из запросов Access
import sqlite3
conn = sqlite3.connect('example.db')
c = conn.cursor()
for table, query in table_name_to_query.items():
try:
c.execute("CREATE VIEW `%s` AS %s" % (table,query))
print("\n\n"+ table + " passed")
print(query)
except Exception as e:
print("\n\n"+ table + " error")
print(e)
print(query)