Проблемы с подключением к файлу Access MDB через PowerShell - PullRequest
1 голос
/ 30 июля 2009

Я пытаюсь подключиться к файлу базы данных 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 \ Microsoft \ Jet \ 4.0 \ Engines \ Paradox win32 = C: \ WINDOWS \ system32 \ mspbde40.dll

этот файл находится в% SYSTEM32% \

Обратите внимание, у меня не установлен Access в моей системе (может ли это быть основной проблемой? Я не уверен, но я так не думаю, так как использую ADO)

Вопросы:

1) Как включить параметр "/ wrkgrp" в строку подключения в сценарии?

2) При условии отсутствия опции "/ wrkgrp" в строке подключения, это не моя проблема, в чем может быть проблема?

3) Нужно ли установить Access в системе, чтобы это работало?

Спасибо, Марк

1 Ответ

2 голосов
/ 30 июля 2009

Вам не нужен установленный доступ.

Вы пытаетесь открыть базу данных рабочей группы (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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...