如何将MS Access查询对象导出到文本文件

时间:2013-11-27 20:35:39

标签: vba ms-access 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

我已尝试以下方法备份所有查询

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

但是生成的文本文件是查询输出。它绝对不是我正在寻找的查询定义。

这里要清楚的是我试图导出到文本的图像

enter image description here

有没有人对如何实现这一点有任何想法?

3 个答案:

答案 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。奇怪的东西!