希望将约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:不返回任何错误消息,但再次出现,缺少代码的输出组件。
感谢您的帮助!
答案 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