使用密码连接到Access数据库的OLEDB:“找不到可安装的ISAM”

时间:2016-11-26 02:34:49

标签: excel vba ms-access oledb

问题:尝试通过MS Excel与MS Access数据库通信时出现以下错误:“找不到可安装的ISAM”。

Excel文件扩展名= .xlsm
访问文件扩展名= .mdb
MS Office版本= Office 2013
操作系统= Windows 7家庭高级版(64位)

故障排除尝试:

  1. Microsoft支持页面:https://support.microsoft.com/en-us/kb/209805
  2. StackOverflow页面A:Troubleshooting Could not find installable ISAM error
  3. StackOverflow Page B:How to resolve "Could not find installable ISAM." error for OLE DB provider "Microsoft.ACE.OLEDB.12.0"
  4. StackOverflow页面C:Could not find installable ISAM when importing Access table to Excel
  5. 这是VBA代码:

        Dim cnn as New ADODB.Connection
        cnn.Provider = "Microsoft.ACE.OLEDB.12.0;"
        cnn.ConnectionString = "Data Source=" & Range("fld") & "\MyDB.mdb:Jet OLEDB: Database Password=" & "Range("pwdDB")
        '≈Do stuff
        cnn.close
        set cnn = nothing
    

    有人知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

谢谢大家。

我发现它是什么:领先的等号登录密码(对于受保护的Access数据库)。

►问题:连接字符串抛出"可安装的ISAM"如果数据库密码以等号开头,则出错(" =")。
►解决方案:删除密码中的前导等号。

错误消息确实没有详细说明,或暗示密码是问题。

我相信希望将来可以帮助其他人。

答案 1 :(得分:1)

除了另一个答案之外,如果我们用双引号括起密码,我们实际上可以处理以等号开头的密码。例如,如果密码为=test,我们使用

Jet OLEDB:Database Password="=test"

如果密码包含双引号,那么我们需要将它们加倍(通常用于双引号字符串文字中的双引号),因此对于密码="test我们需要使用

Jet OLEDB:Database Password="=""test"

一般情况下的VBA代码,假设密码位于名为pwd的String变量中:

Dim connStr As String
connStr = "Data Source=C:\__tmp\pwdTest.accdb;"
If Len(pwd) > 0 Then
    connStr = connStr & "Jet OLEDB:Database Password=""" & Replace(pwd, """", """""") & """;"
End If
Dim cnn As New ADODB.Connection
cnn.Provider = "Microsoft.ACE.OLEDB.12.0"
cnn.Open connStr
Debug.Print "Connected using '" & connStr & "'"