使用VBA或PowerShell将所有MS Access SQL查询导出到文本文件

时间:2019-06-19 07:15:21

标签: powershell ms-access access-vba

希望将约200个查询的基础sql从Access 2013导出到单独的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:不返回任何错误消息,但再次出现,缺少代码的输出组件。

感谢您的帮助!

1 个答案:

答案 0 :(得分: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