2009-07-29 4 views
1

Я пытаюсь подключиться к файлу базы данных Access 2000 (* .mdb), но у меня всего несколько проблем. Вот сценарий до сих пор,Проблемы с подключением к файлу доступа MDB через PowerShell

1) Googled, как подключиться к базе данных с помощью 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) Поскольку это Рациональный база данных RequisitePro я почти никогда не нужно редактировать базу данных непосредственно, но пришел узнать, если нам нужно изменить базу данных направить нам нужно выполнить следующую команду в качестве ссылки на винда Desktop:

"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) Когда я запускаю этот скрипт я получаю FOLLO ошибка крыла:

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% \

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

Вопросы:

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

2) Предполагая, что параметр «/ wrkgrp» в строке подключения не является проблемой, что может быть проблемой?

3) Должен ли быть установлен в системе доступ к системе, чтобы это работало?

Thanks, Mark

ответ

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

Смежные вопросы