在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
我已尝试以下方法备份所有查询
For Each myObj In oApplication.CurrentData.AllQueries
WScript.Echo "Query " & myObj.fullname
oApplication.SaveAsText acQuery, myObj.Name, sExportpath & "\" & myObj.Name & ".query"
Next
但是生成的文本文件是查询输出。它绝对不是我正在寻找的查询定义。
这里要清楚的是我试图导出到文本的图像
有没有人对如何实现这一点有任何想法?
答案 0 :(得分:6)
通过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
答案 1 :(得分:5)
这个怎么样(需要在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
或者,如果您使用的是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
答案 2 :(得分:1)
acQuery
常量的值为1.(AcObjectType Enumeration)
也许你的结果是因为代码使用的是6而不是1.我不知道应该在那种情况下发生什么,因为AcObjectType
常量都没有值为6使用Access VBA时,当我尝试使用6 SaveAsText
时,发生了一些奇怪的事情:输出文件已创建,但Windows拒绝我查看其内容的权限;不久之后,出现了一个对话框,看起来像Access正在寻找SQL Server上的东西......虽然我保存的查询定义不涉及SQL Server。奇怪的东西!