【问题标题】:Export all queries of an access database with powershell用powershell导出一个access数据库的所有查询
【发布时间】:2016-06-15 16:28:24
【问题描述】:

This question 演示了如何使用 VBA 进行操作,但我想使用 PowerShell 进行操作,因此可以编写脚本和计划。

我预计实现应该是相同的,因为据称它们都使用相同的 COM,但似乎 QueryDefs 未在 PowerShell 访问的 COM 中定义,因为它不返回任何内容。

# Open file in Access.
$accessCOM = New-Object -ComObject Access.Application
$accessCOM.OpenCurrentDataBase($dbPath, $false)

# get list of queries
$queries = $accessCOM.CurrentDB.QueryDefs # returns nothing.

# export query to file
ForEach ($query in $queries) {
    $name = $query.name
    $sql = $query.sql
    $dest = "$queryDest\$name.sql"
    Write-Output $sql > $dest
}

我可以使用.CurrentData.AllQueries,但它会返回一个 AccessObjects 的集合,我不知道如何从中获取 SQL。有没有其他方法可以从名称中获取 QueryDef 或至少 SQL?

【问题讨论】:

  • $accessCOM.CurrentDB.Name 告诉你什么?
  • "CurrentDb" 这不是 .accdb 文件的名称。

标签: powershell ms-access com


【解决方案1】:

这适用于我的 Access 2010。它只是将非系统 QueryDefs 的名称转储到控制台,但它应该让你开始:

$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
    }
}

【讨论】:

  • 我添加了我在 powershell 中打开数据库的方式,因为它与您的不同。希望你的方法能奏效。
【解决方案2】:

请尝试对上一篇文章进行此修改。为我工作。 运行一次后,变量的其他属性将通过 IntelliSense 在 PowerShell ISE 中可用。

$dbe = New-Object -com DAO.DBEngine.120
$dbpath ="path/to/data.mdb"
$db = $dbe.OpenDatabase($dbpath,$false,$false,";pwd=r3ealLy?")
$queries = $db.QueryDefs
ForEach ($query in $queries) {
    $name = $query.Name
    If (!$name.StartsWith("~")) {
       $name + ":"
       $query.SQL
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    • 2016-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    相关资源
    最近更新 更多