Как вы экспортируете объекты MS Access Query в текстовый файл

В MS Access мне нужно сделать резервную копию всех запросов в текстовый файл

Я в состоянии сделать это с другими объектами Access нормально, например, следующий пример, который создает резервные копии всех отчетов в текстовый файл

Dim oApplication
Set oApplication = CreateObject("Access.Application")

For Each myObj In oApplication.CurrentProject.AllReports
        WScript.Echo "Report  " & myObj.fullname
        oApplication.SaveAsText acReport, myObj.fullname, sExportpath & "\" & myObj.fullname & ".report"
Next

Ive пробовал следующее для резервного копирования всех запросов

For Each myObj In oApplication.CurrentData.AllQueries
    WScript.Echo "Query  " & myObj.fullname
    oApplication.SaveAsText acQuery, myObj.Name, sExportpath & "\" & myObj.Name & ".query"
Next

Однако полученный текстовый файл является результатом запроса. Это определенно не определение запроса, которое я ищу.

Чтобы было понятно, вот изображение того, что я пытаюсь экспортировать в текст

У кого-нибудь есть идеи о том, как это можно сделать?

3 ответа

Решение

Значение acQuery константа равна 1. ( перечисление AcObjectType)

Возможно, ваши результаты, потому что код использует 6 вместо 1. Я не знаю, что должно произойти в этой ситуации, потому что ни один из AcObjectType константы имеют значение 6. Использование Access VBA, когда я пытался SaveAsText с 6 произошло нечто странное: выходной файл был создан, но Windows отказала мне в разрешении на просмотр его содержимого; вскоре появилось диалоговое окно, которое выглядело так, будто Access что-то искал на SQL Server ... хотя определение запроса, которое я сохранял, не связано с SQL Server. Странные вещи!

Итерация по QueryDefs должна работать для вас

Dim def As DAO.QueryDef
Dim defCol As DAO.QueryDefs

Set defCol = CurrentDb.QueryDefs

For Each def In defCol
    Debug.Print def.SQL
Next

Как насчет этого (требуется "Среда выполнения сценариев Microsoft", отмеченная в разделе "Инструменты | Ссылки" в редакторе VBA):

Dim Def As DAO.QueryDef
Def FSO As New Scripting.FileSystemObject, Stream As Scripting.TextStream
For Each Def In CurrentDb.QueryDefs
  Set Stream = FSO.CreateTextFile(sExportpath & "\" & Def.Name & ".query")
  Stream.Write(Def.SQL)
  Stream.Close
Next

В качестве альтернативы, если вы используете VBScript:

Dim Def, FSO, Stream
Set FSO = CreateObject("Scripting.FileSystemObject")
For Each Def In oApplication.CurrentDb.QueryDefs
  Set Stream = FSO.CreateTextFile(sExportpath & "\" & Def.Name & ".query")
  Stream.Write(Def.SQL)
  Stream.Close
Next
Другие вопросы по тегам