Как вы экспортируете объекты 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