使用 powershell 导出 access 数据库的所有查询
Export all queries of an access database with powershell
This question 演示了如何使用 VBA 执行此操作,但我想使用 PowerShell 执行此操作,因此可以编写脚本和计划。
我预计实现应该是相同的,因为据称它们都使用相同的 COM,但似乎 QueryDefs
没有在 PowerShell 访问的 COM 中定义,因为它 returns 什么都没有。
# 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
,但是 returns 是一个 AccessObjects 集合,我不知道如何从中获取 SQL。有没有其他方法可以从名称中获取 QueryDefs 或至少 SQL?
这适用于我的 Access 2010。它只是将非系统 QueryDef 的名称转储到控制台,但它应该可以帮助您入门:
$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
}
}
请尝试对之前的 post 进行此修改。为我工作。
在你 运行 它一次之后,变量的其他属性将通过 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
}
}
This question 演示了如何使用 VBA 执行此操作,但我想使用 PowerShell 执行此操作,因此可以编写脚本和计划。
我预计实现应该是相同的,因为据称它们都使用相同的 COM,但似乎 QueryDefs
没有在 PowerShell 访问的 COM 中定义,因为它 returns 什么都没有。
# 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
,但是 returns 是一个 AccessObjects 集合,我不知道如何从中获取 SQL。有没有其他方法可以从名称中获取 QueryDefs 或至少 SQL?
这适用于我的 Access 2010。它只是将非系统 QueryDef 的名称转储到控制台,但它应该可以帮助您入门:
$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
}
}
请尝试对之前的 post 进行此修改。为我工作。 在你 运行 它一次之后,变量的其他属性将通过 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
}
}