【发布时间】:2015-12-26 21:49:39
【问题描述】:
我需要获取数百个 MS Access 数据库的元数据,因此我需要自动化元数据收集过程。
我想查询here 描述的内容,但在查询数据库之前,我需要对MSysObjects 表的读取权限。
我不断收到以下错误:
无法读取记录; 'MsysObjects' 没有读取权限。
所以我挖得更深了:
我已阅读 C# 部分中有关类似问题的文章(see here 和 this one)。
我编写了一个简单的脚本,可以很好地用于创建表等,但是我在设置读取访问权限时遇到了问题。
$ScrUsr = $(whoami)
Write-Host $ScrUsr
$cmd = "GRANT SELECT ON MSysObjects TO [$ScrUsr]"
Write-Host $cmd
Function Invoke-ADOCommand($Db)
{
$connection = New-Object -ComObject ADODB.Connection
$connection.Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=$db;" )
$command = New-Object -ComObject ADODB.Command
$command.ActiveConnection = $connection
$command.CommandText = $cmd
$rs = $command.Execute()
$connection.Close()
}
$Db = "C:\Temp\test1.accdb"
Invoke-ADOCommand -db $Db
执行脚本会引发以下错误原因:
无法打开 Microsoft Office Access 数据库引擎工作组信息文件。
如何允许对MSysObjects 的读取权限?
【问题讨论】:
-
我认为这不是问题,但你的函数参数有异常
Invoke-ADOCommand($Db, $Command)当你 调用 函数时你不使用$command所以只是去掉它。该数据库密码是否受保护? -
感谢提示,已经修复,脚本可以工作,因为 $command 变量将在函数中设置。 Nop DB 不受密码保护。我已经尝试过 Grant to Public,但这也没有用。
-
你试过了吗? ...
GRANT SELECT ON MSysObjects TO Admin; -
Jepp,我的初始语句是针对 MdB 触发的,同样的 errorMsg
标签: powershell ms-access metadata adodb office-automation