Python 为什么VBA可以使用未注册的ACE.OLEDB提供程序?

Python 为什么VBA可以使用未注册的ACE.OLEDB提供程序?,python,com,oledb,adodb,adodbapi,Python,Com,Oledb,Adodb,Adodbapi,我发现OLEDB提供程序“Microsoft.ACE.OLEDB.15.0;”安装的Office未注册(我无法从下面随附的powershell列表中看到它) 但是,在Excel VBA中,我可以使用连接字符串中的此ACE提供程序创建并连接到数据源 子测试() Dim con作为新的ADODB连接 Dim数据库作为字符串,AccessConnect\u ACE作为字符串 database=“C:\temp\test.mdb” AccessConnect_ACE=“Provider=Microsof

我发现OLEDB提供程序“Microsoft.ACE.OLEDB.15.0;”安装的Office未注册(我无法从下面随附的powershell列表中看到它)

但是,在Excel VBA中,我可以使用连接字符串中的此ACE提供程序创建并连接到数据源

子测试()
Dim con作为新的ADODB连接
Dim数据库作为字符串,AccessConnect\u ACE作为字符串
database=“C:\temp\test.mdb”
AccessConnect_ACE=“Provider=Microsoft.ACE.OLEDB.15.0;”_
“数据源=”&database&“;”
con.ConnectionString=AccessConnect\u ACE
未结
端接头
但是一个非常相似的python脚本不起作用

导入adodbapi
database=“D:\\test\\test.mdb”
constr='Provider=Microsoft.ACE.OLEDB.15;数据源=%s“%s”数据库
conn=adodbapi.connect(CONT)
原因是什么

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

您确定Powershell以32位运行,就像您在我的系统中所做的那样吗

因此,OLEDB提供程序可能存在于32位,但不存在于64位。也为64位安装SCE包