通过PowerShell连接到Access MDB文件时出现问题

时间:2009-07-29 21:55:53

标签: ms-access powershell

我正在尝试连接到Access 2000数据库文件(* .mdb),但我只有一些问题。这是迄今为止的剧本,

1)使用powershell搜索如何连接到数据库,导致以下内容作为源代码基线。

$adOpenStatic = 3
$adLockOptimistic = 3

$objConnection = New-Object -comobject ADODB.Connection
$objRecordset = New-Object -comobject ADODB.Recordset

$objConnection.Open("Provider = Microsoft.Jet.OLEDB.4.0; Data Source = c:\scripts\sample.mdb")
$objRecordset.Open("Select * from TotalSales", $objConnection,$adOpenStatic,$adLockOptimistic)

$objRecordset.MoveFirst()

do 
{ $objRecordset.Fields.Item("EmployeeName").Value; $objRecordset.MoveNext() } 
until ($objRecordset.EOF -eq $True)

$objRecordset.Close()
$objConnection.Close()

2)我将数据源替换为数据库的完全限定路径,然后显示以下内容。

Exception calling "Open" with "5" argument(s): "Record(s) cannot be read; no read permission on 'RqRequirements'."
At :line:23 char:18
+ $objRecordset.Open <<<< ("Select * from RqRequirements", $objConnectionCsdscDB,$adOpenStatic,$adLockOptimistic) 

3)由于这是一个Rational RequisitePro数据库,我几乎不需要直接编辑数据库,但是要知道我们是否需要直接编辑数据库,我们需要在Windows桌面上发出以下命令作为链接:

"C:\Program Files\Microsoft Office\OFFICE11\MSACCESS.EXE" /wrkgrp C:\Program Files\Rational\RequisitePro\bin\rqprodb.mda" /user "xxxxxxx" /pwd "yyyyy"

4)使用上面列出的脚本并稍微更改它,我有以下内容:

$adOpenStatic     = 3
$adLockOptimistic = 3

$objConnectionRqProDB = New-Object -comobject ADODB.Connection
$objConnectionCsdscDB = New-Object -comobject ADODB.Connection
$objRecordset         = New-Object -comobject ADODB.Recordset

$cnnStringRqProDB = "Provider = Microsoft.Jet.OLEDB.4.0;" + 
                    "Data Source = C:\\Program Files\\Rational\\RequisitePro\\bin\\rqprodb.mda;" +
                    "UID=requisite admin;" +
                    "PWD=multiuser"

$cnnStringCsdscDB = "Provider = Microsoft.Jet.OLEDB.4.0;" + 
                    "Data Source = J:\\TestPowerShell\\Rational.MDB"

$objConnectionRqProDB.Connectionstring = $cnnStringRqProDB
$objConnectionRqProDB.Open()

$objConnectionCsdscDB.Connectionstring = $cnnStringCsdscDB
$objConnectionCsdscDB.Open()

$objRecordset.Open("Select * from RqRequirements", $objConnectionCsdscDB,$adOpenStatic,$adLockOptimistic)

$objRecordset.Close()
$objConnection.Close() 

5)当我运行此脚本时,我收到以下错误:

Exception calling "Open" with "4" argument(s): "Could not find installable ISAM."
At :line:17 char:26
+ $objConnectionRqProDB.Open <<<< ()

6)我做了一些搜索并找到了以下链接http://support.microsoft.com/kb/209805,我检查了注册表并且条目存在

HKEY_LOCAL_MACHINE \ SOFTWARE \微软\喷气\ 4.0 \发动机\悖论   的win32 = C:\窗口\ system32 \ mspbde40.dll

此文件位于%SYSTEM32%\

注意,我的系统上没有安装Access(这可能是一个潜在的问题吗?我不确定,但我不这么认为,因为我使用的是ADO)

问题:

1)如何在脚本的连接字符串中包含“/ wrkgrp”选项?

2)假设连接字符串中缺少“/ wrkgrp”选项不是我的问题可能会出现什么问题?

3)是否需要在系统上安装Access以使其正常工作?

谢谢,Mark

1 个答案:

答案 0 :(得分:2)

您不应该安装Access。

您正在尝试单独打开工作组数据库(mdw) - 不要这样做。

您需要在连接字符串

中指定工作组数据库
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\mydatabase.mdb;
Jet OLEDB:System Database=system.mdw;User ID=myUsername;Password=myPassword;

因此,在您的情况下,请使用以下内容:

$cnnStringRqProDB = "Provider = Microsoft.Jet.OLEDB.4.0;" + 
                    "Data Source = J:\\TestPowerShell\\Rational.MDB;" +
                    "Jet OLEDB:System Database = C:\\Program Files\\Rational\\RequisitePro\\bin\\rqprodb.mda;" +
                    "User ID=requisite admin;" +
                    "Password=multiuser"

$objConnectionCsdscDB.Connectionstring = $cnnStringCsdscDB
$objConnectionCsdscDB.Open()