Использование VBA ИЛИ PowerShell для экспорта всех запросов MS Access SQL в текстовые файлы - PullRequest
0 голосов
/ 19 июня 2019

Желание экспортировать базовый sql из ~ 200 запросов из Access 2013 в отдельные файлы txt / *. Sql, а не данные, собираемые запросами.

Этот вопрос предоставил подходящий ответ: Использование VBA для экспорта всех запросов MS Access SQL в текстовые файлы но я не смог заставить его работать для генерации выходных файлов. Я новичок VBA, но мне нужно, чтобы это работало как раз. Это сэкономит много времени.

Я также рассмотрел использование сценария PowerShell: Экспорт всех запросов к базе данных доступа с powershell Похоже, я не смог получить его для создания выходных файлов.

Я не против, какой процесс я использую, мне просто нужен sql:)

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
$dbe = New-Object -com DAO.DBEngine.120
$db = $dbe.OpenDatabase("C:\Users\Public\Database1.accdb")
$queries = $db.QueryDefs
ForEach ($query in $queries) {
    $name = $query.Name
    If (!$name.StartsWith("~")) {
        $name
    }
}

VBA: сообщения об ошибках не возвращаются, но я подозреваю, что в нем отсутствует компонент вывода кода.

PowerShell: сообщения об ошибках не возвращаются, но снова отсутствует компонент вывода кода.

Ценю вашу помощь!

1 Ответ

1 голос
/ 19 июня 2019

Давайте настроим решение VBA.Шаг 1 состоит в том, чтобы объявить функцию, которая принимает ввод и записывает его в текстовый файл:

'Writes content to a text file
'Note: encoding = UTF-16, overwrites without prompt
Public Sub ToTextFile(path As String, content As String)
    If Dir(path) <> "" Then Kill path
    Dim f As Integer
    f = FreeFile
    Open path For Binary Access Write As #f
    Put #f, , content
    Close #f
End Sub

Затем мы можем легко настроить ваш текущий код так, чтобы каждый запрос помещался в отдельный текстовый файл.Я собираюсь использовать путь к вашей базе данных и имя запроса в качестве местоположения текстового файла:

Dim db As DAO.Database
Dim qdf As DAO.QueryDef

 Set db = CurrentDB()
 For Each qdf In db.QueryDefs
   If qdf.Name Not Like "~*" Then
       ToTextFile CurrentProject.Path & "\" & qdf.Name & ".txt", qdf.sql
   End If
 Next qdf
 Set qdf = Nothing
 Set db = Nothing
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...