【问题标题】:Error: "Could Not Find Installable ISAM"错误:“找不到可安装的 ISAM”
【发布时间】:2010-10-05 10:58:57
【问题描述】:

我在 Excel 工作簿中编写了一些 VBA 代码,以从桌面上同一目录中的 Access 数据库中检索数据。它在我的机器和其他几台运行 Windows XP 的机器上运行良好,但是当我们在 Vista 机器上测试它时,我们遇到了以下错误:

找不到可安装的 ISAM

我在网上做了很多搜索,但似乎找不到具体的答案。连接字符串似乎很好,而且,正如我所提到的,它可以在多台机器上运行。

有人知道是什么原因造成的吗?我的连接字符串如下:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\ptdb\Program Tracking Database.mdb;

谢谢

【问题讨论】:

    标签: excel ms-access vba connection-string


    【解决方案1】:

    Extended Properties 周围加上单引号:

    OleDbConnection oconn = 
        new OleDbConnection(
            @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1;';");
    

    试试看,真的很管用。

    【讨论】:

    • 酷。它也适用于Microsoft.ACE.OLEDB.12.0 提供程序和Excel 12.0 xml 扩展属性。谢谢!
    • 谢谢,这为我解决了一个奇怪的问题。请注意,如果您的结果中出现神秘的缺失数据,则需要使用 IMEX=1 标志。
    • 传奇!省了很多麻烦
    • 我爱你!你是救生员@2:00 AM 上帝保佑你 ;) :)
    • 哇。这让我既高兴又沮丧!
    【解决方案2】:

    尝试在数据源周围加上单引号:

    Provider=Microsoft.Jet.OLEDB.4.0;Data Source='D:\ptdb\Program Tracking Database.mdb';
    

    问题往往是对解析器有意义的空白。

    如果您有其他属性(例如,扩展属性),它们的值也可能必须用单引号括起来:

    Provider=Microsoft.Jet.OLEDB.4.0;Data Source='D:\ptdb\Program Tracking Database.mdb'; Extended Properties='Excel 8.0;HDR=YES;IMEX=1;';
    

    你同样可以使用双引号;但是,您可能不得不逃避它们,而且我发现算法中的痛苦比使用单打法更多。

    【讨论】:

    • 而不是单引号,使用 \"...\" 来封装数据源路径,这对我有用
    • @Ortund:它没有解决您的特定问题,值得投反对票吗?!?吉斯-路易丝。
    • @Dave 问题标记为 VBA,不支持 C 风格的字符转义。在 VBA 中,您可以在字符串中使用两个双引号来表示一个双引号。
    • @Ortund 您使用的是 VBA 还是 C#?
    • 我不得不在数据源和扩展属性周围加上单引号,然后它就被修复了。谢谢!
    【解决方案3】:

    只需在您的连接字符串中使用 Jet OLEDB:。 它为我解决了。

    下面是一个例子:

    "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=E:\Database.mdb;Jet OLEDB:Database Password=b10w"
    

    【讨论】:

      【解决方案4】:

      我刚刚遇到了一个非常相似的问题。

      和你一样,我的连接字符串看起来是正确的——事实上,完全相同的连接字符串在其他情况下也能正常工作。

      问题原来是缺乏资源。 20 次中有 19 次,我会看到“找不到可安装的 ISAM”,但有一两次(根本没有任何代码更改),它会产生“内存不足”。

      重新启动机器“解决”了问题(现在......?)。这是在 Windows XP 上使用 Jet 版本 4.0.9505.0 时发生的。

      【讨论】:

        【解决方案5】:

        我用它来更新一个 excel 12 xlsx 文件

                System.Data.OleDb.OleDbConnection MyConnection;
                System.Data.OleDb.OleDbCommand myCommand = new System.Data.OleDb.OleDbCommand();
                MyConnection = new System.Data.OleDb.OleDbConnection("provider=Microsoft.ACE.OLEDB.12.0;Data Source='D:\\Programming\\Spreadsheet-Current.xlsx';Extended Properties='Excel 12.0;HDR=YES;';");
                MyConnection.Open();
                myCommand.Connection = MyConnection;
                string sql = "Update [ArticlesV2$] set [ID]='Test' where [ActualPageId]=114";// 
                myCommand.CommandText = sql;
                myCommand.ExecuteNonQuery();
                MyConnection.Close();
        

        【讨论】:

          【解决方案6】:

          使用此连接字符串

          string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;" +
                "Data Source=" + strFileName + ";" + "Extended Properties=" + "\"" + "Excel 12.0;HDR=YES;" + "\"";
          

          【讨论】:

          • OP 不是从 Excel 获取数据,而是从 MS Access 获取数据,因此 Excel 连接字符串不是一个好主意。另外,标签上写的是VBA,所以你显示的语法不合适。
          【解决方案7】:

          这个问题是因为机器找不到Access需要的正确的ISAM(索引顺序驱动方法)注册。

          可能是因为机器没有安装MSACeesss?我会确保您拥有最新版本的 Jet,如果它仍然无法工作,请从其他机器中找到文件 Msrd3x40.dll,将其复制到 Vista 机器的某个位置并在其上调用 regsvr32(在管理员模式下) ) 这应该会为您解决。

          【讨论】:

          • OLE DB(注意空格)有提供程序而不是“驱动程序”,并且没有一个名称为“MS Access”。 ACE 提供程序名为 Microsoft.ACE.OLEDB.,已弃用的 Jet 提供程序名为 Microsoft.Jet.OLEDB..
          【解决方案8】:

          使用下面的连接字符串从 XLSX 文件中读取:

          string ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;数据 来源=" + + ";扩展 属性=Excel 8.0;";

          【讨论】:

            猜你喜欢
            • 2012-03-18
            • 2014-03-05
            • 1970-01-01
            • 1970-01-01
            • 2012-08-01
            相关资源
            最近更新 更多