【问题标题】:OLEDB connection to Access database with password: "Could not find installable ISAM"OLEDB 使用密码连接到 Access 数据库:“找不到可安装的 ISAM”
【发布时间】:2016-11-26 02:34:48
【问题描述】:

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

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

故障排除尝试:

  1. 微软支持页面:https://support.microsoft.com/en-us/kb/209805
  2. StackOverflow 页面 A:Troubleshooting Could not find installable ISAM error
  3. StackOverflow 页面 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

这是 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

有人知道怎么解决吗?

【问题讨论】:

  • 有助于显示您的实际代码。

标签: excel vba ms-access oledb


【解决方案1】:

谢谢大家。

我发现它是什么:密码中的前导等号符号(对于受保护的访问数据库)。

► 问题:如果数据库密码以等号 ("=") 开头,则连接字符串会引发“可安装 ISAM”错误。
► 解决方法:去掉密码前导的等号。

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

我当然希望这对将来的其他人有所帮助。

【讨论】:

    【解决方案2】:

    对于另一个答案,如果我们用双引号将密码括起来,我们实际上可以处理以等号开头的密码。比如密码是=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 & "'"
    

    【讨论】:

    • 啊。很不错。谢谢。
    猜你喜欢
    • 2017-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-01
    相关资源
    最近更新 更多