【问题标题】:How do you export MS Access Query Objects to text file如何将 MS Access 查询对象导出到文本文件
【发布时间】:2013-12-13 16:37:43
【问题描述】:

在 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

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

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

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

【问题讨论】:

  • 我在 Access 2007 或 2010 中没有遇到这个问题。使用SaveAsText acQuery 为我提供了查询定义......其中包括 SQL 属性和 Access 在定义中存储的各种其他属性。但是SaveAsText 绝对不会给我运行查询返回的数据。添加到 2013 年似乎是一个奇怪的“功能”。:-(
  • 您对 acQuery 使用什么值?我设置 acForm = 2、acModule = 5、acMacro = 4、acReport = 3 和 acQuery = 6
  • “其中包括 SQL 属性和各种其他属性 Access 存储在定义中”可能我没有以纯文本形式返回 SQL 属性并且它有其他相关数据? (返回的文本文件实际上是一个非常大的二进制加密文件,我假设是查询结果)
  • 我是通过 Access VBA 完成的。 acQuery 是 1。请参阅 AcObjectType Enumeration。这些常量都没有 6 作为它的值。
  • 太好了,我一直在寻找那个枚举表

标签: vba ms-access ms-access-2013


【解决方案1】:

这个怎么样(需要在 VBA 编辑器的工具|参考下检查“Microsoft 脚本运行时”):

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

【讨论】:

  • 你是什么意思“需要在 VBA 中的工具|参考下检查'Microsoft Scripting Runtime'”我实际上使用 cscript 在 shell 中运行这个脚本它基于这个答案:stackoverflow.com/questions/187506/…
【解决方案2】:

acQuery 常量的值为 1。(AcObjectType Enumeration)

也许您的结果是因为代码使用 6 而不是 1。我不知道在那种情况下应该发生什么应该,因为 AcObjectType 常量的值都不是 6。使用访问 VBA,当我用 6 尝试 SaveAsText 时,发生了一些奇怪的事情:输出文件已创建,但 Windows 拒绝我查看其内容的权限;不久之后,出现了一个对话框,看起来 Access 正在 SQL Server 上寻找某些东西……虽然我保存的查询定义不涉及 SQL Server。奇怪的东西!

【讨论】:

  • 我发现您的帖子试图弄清楚 6 的含义。我在一个几乎没有评论的实用程序插件中找到了它。它似乎创建了包含表的数据库文件的副本。一个未记录的命令接受一些未记录的参数应该不会让我们感到惊讶。
【解决方案3】:

遍历 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

【讨论】:

    猜你喜欢
    • 2010-11-19
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多