2009-07-29 101 views
1

我正在尝试连接到Access 2000数据库文件(* .mdb),但我遇到了一些问题。这里是迄今为止的剧本,通过PowerShell连接到Access 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:\ WINDOWS \ SYSTEM32 \ mspbde40.dll

该文件位于%SYSTEM32%\

注意,我没有安装我的系统上访问(这可能是一个潜在的问题?我不知道,但我不这么认为,因为我现在用的是ADO)

问题:

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

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

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

谢谢,马克

回答

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() 
+0

感谢DJ,将系统数据库连接字符串中的工作。请注意,在'数据源'行缺少'+'。 – lordhog 2009-07-29 22:55:37