Используя VBA для экспорта всех SQL-запросов Доступа MS в текстовые файлы

Это потому, что согласно документации :

Значения параметров по умолчанию оцениваются при выполнении определения функции. Это означает, что выражение оценивается один раз, когда функция определена

blockquote>

Когда определено __init__(), определение MyClass является неполным, поскольку оно все еще анализируется, поэтому вы можете Пока не указывайте MyClass.__DefaultName. Один из способов обойти это - передать особое уникальное значение __init__(), например None:

def __init__(self, name=None):
    if name is None:
        name = MyClass.__DefaultName
    # ...

27
задан Pieter Nienaber 14 August 2009 в 00:56
поделиться

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, чем о том, как записать файл, но если вам это нужно, скажите это в комментарии, и я отредактирую сообщение (или кто-то опубликует свой ответ с инструкции для этого).

27
ответ дан leeand00 14 October 2019 в 13:33
поделиться

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

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
18
ответ дан yoonjinl 14 October 2019 в 13:33
поделиться
  1. В окне VB щелкните Tools->References....
  2. . В окне «Ссылки» добавьте зависимость 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
4
ответ дан leeand00 14 October 2019 в 13:33
поделиться

Я изменил код @ andre-bernardes, чтобы использовать «|» разделители перед именами запросов и разделители ":" перед операторами SQL. Различные разделители облегчают анализ файла Queries.txt с помощью python и создание словаря запросов и операторов 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)
0
ответ дан Paul Rougieux 14 October 2019 в 13:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: