Почему VBA может использовать провайдера ACE.OLEDB, который не является незарегистрированным?

У меня Office установлен поставщиком OLEDB "Microsoft.ACE.OLEDB.15.0;" не зарегистрирован (я не вижу его в списке из приведенного ниже PowerShell)

Однако в Excel VBA я могу создать и подключиться к источнику данных с этим поставщиком ACE в строке подключения.

Sub test()
Dim con As New ADODB.Connection
Dim database As String, AccessConnect_ACE As String

database = "C:\temp\test.mdb"
AccessConnect_ACE = "Provider=Microsoft.ACE.OLEDB.15.0;" & _
                    "Data Source=" & database & ";"

con.ConnectionString = AccessConnect_ACE
con.Open

End Sub

но очень похожий скрипт на Python не работает

import adodbapi

database = "D:\\test\\test.mdb"
constr = 'Provider=Microsoft.ACE.OLEDB.15; Data Source=%s'  % database

conn = adodbapi.connect(constr)

Какова причина?

PS: скрипт powershell для перечисления зарегистрированных провайдеров

function Get-OledbRegistered
{
[CmdletBinding()]
[OutputType([System.Collections.Generic.List[PSObject]])]
param ()

Process
{
    $list = New-Object ([System.Collections.Generic.List[PSObject]])

    foreach ($provider in [System.Data.OleDb.OleDbEnumerator]::GetRootEnumerator())
    {
        $v = New-Object PSObject        
        for ($i = 0; $i -lt $provider.FieldCount; $i++) 
        {
            Add-Member -in $v NoteProperty $provider.GetName($i) $provider.GetValue($i)
        }

        Write-Host "$v"
        Write-Host "111"
        $list.Add($v)
    }
    return $list
}
}

Get-OledbRegistered

1 ответ

Вы уверены, что Powershell работает в 32-битной версии, как вы делаете это в Excel?

Так что, возможно, поставщик OLEDB существует в 32-битной, но не для 64-битной. Установите пакет SCE для 64-битной тоже!

Другие вопросы по тегам