【问题标题】:Using VBA OR PowerShell to export all MS Access SQL queries to text files使用 VBA 或 PowerShell 将所有 MS Access SQL 查询导出到文本文件
【发布时间】:2019-06-19 07:15:21
【问题描述】:

希望从 access 2013 导出约 200 个查询的底层 sql 到单独的 txt/*.sql 文件 - 而不是查询收集的数据。

这个问答提供了一个合适的答案:Using VBA to export all MS Access SQL queries to text files 但我无法让它生成输出文件。我是 vba 新手,但需要一次性完成。这样可以节省很多时间。

我还在这里查看了使用 PowerShell 脚本: Export all queries of an access database with powershell 同样,我无法让它生成输出文件。

我不介意我使用哪个进程,我只需要 sql :)

Dim db As DAO.Database
 Dim qdf As DAO.QueryDef

 Set db = CurrentDB()
 For Each qdf In db.QueryDefs
   Debug.Print qdf.SQL
 Next qdf
 Set qdf = Nothing
 Set db = Nothing
$dbe = New-Object -com DAO.DBEngine.120
$db = $dbe.OpenDatabase("C:\Users\Public\Database1.accdb")
$queries = $db.QueryDefs
ForEach ($query in $queries) {
    $name = $query.Name
    If (!$name.StartsWith("~")) {
        $name
    }
}

VBA:没有返回错误消息,但我怀疑它缺少代码的输出组件。

PowerShell:没有返回错误消息,但同样缺少代码的输出组件。

感谢您的帮助!

【问题讨论】:

    标签: vba powershell ms-access


    【解决方案1】:

    让我们调整 VBA 解决方案。第 1 步是声明一个接受输入并将其写入文本文件的函数:

    'Writes content to a text file
    'Note: encoding = UTF-16, overwrites without prompt
    Public Sub ToTextFile(path As String, content As String)
        If Dir(path) <> "" Then Kill path
        Dim f As Integer
        f = FreeFile
        Open path For Binary Access Write As #f
        Put #f, , content
        Close #f
    End Sub
    

    然后,我们可以轻松调整您当前的代码,将每个查询放在单独的文本文件中。我将使用您的数据库的路径和查询的名称作为文本文件的位置:

    Dim db As DAO.Database
    Dim qdf As DAO.QueryDef
    
     Set db = CurrentDB()
     For Each qdf In db.QueryDefs
       If qdf.Name Not Like "~*" Then
           ToTextFile CurrentProject.Path & "\" & qdf.Name & ".txt", qdf.sql
       End If
     Next qdf
     Set qdf = Nothing
     Set db = Nothing
    

    【讨论】:

    • 一个可能很愚蠢的问题——但这两个部分是在一个“模块”中还是在两个不同的模块中?我尝试了两种方式,但是当我单击运行时,它会启动选择宏框,显示为空。
    • Eh...您需要将第二段代码包装在一个子中,例如Public Sub SomeName(),然后是代码,然后是 End Sub。我从问题中复制了它,我假设你已经这样做了。不管是一个模块还是两个模块。我确实建议学习基本的 VBA 教程,在不知道它在做什么的情况下粘贴代码是一件棘手的事情。
    • 是的,没错 - 它被包裹在公共子/结束子中。我收到错误的文件名或编号错误 - 我怀疑这是由于在某些查询名称中使用了“*”。
    • 是的,要么调整你的查询名称,要么编写一个函数来清理它们。请注意,在 SQL、VBA 等中按名称引用查询时,此类字符可能会导致各种麻烦。
    • 修复了名称 - 并且工作愉快 - 感谢您的帮助!是的,我已经意识到它会导致各种各样的问题,文件名、Excel 工作表名称等。
    猜你喜欢
    • 2010-11-19
    • 2013-06-20
    • 2013-12-13
    • 1970-01-01
    • 1970-01-01
    • 2016-03-16
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多