Mic*_*r3D 3 ms-access vba ms-access-2013
在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
Run Code Online (Sandbox Code Playgroud)
我尝试了以下备份所有查询
For Each myObj In oApplication.CurrentData.AllQueries
WScript.Echo "Query " & myObj.fullname
oApplication.SaveAsText acQuery, myObj.Name, sExportpath & "\" & myObj.Name & ".query"
Next
Run Code Online (Sandbox Code Playgroud)
但是,生成的文本文件是查询输出.它绝对不是我正在寻找的查询定义.
这里要清楚的是我试图导出到文本的图像

有没有人对如何实现这一点有任何想法?
迭代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
Run Code Online (Sandbox Code Playgroud)
这个怎么样(需要在VBA编辑器的Tools | References下选中'Microsoft Scripting Runtime'):
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
Run Code Online (Sandbox Code Playgroud)
或者,如果您使用的是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
Run Code Online (Sandbox Code Playgroud)