错误:“找不到可安装的ISAM”

时间:2009-02-04 16:32:13

标签: excel ms-access vba connection-string

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

  

无法找到可安装的ISAM

我在网上搜索了一堆,但似乎无法找到具体的答案。连接字符串似乎很好,正如我所提到的,它适用于多台机器。

有谁知道可能导致这种情况的原因是什么?我的连接字符串如下:

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

由于

9 个答案:

答案 0 :(得分:66)

Extended Properties附近放置单引号:

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

尝试一下,它确实有效。

答案 1 :(得分:18)

尝试在数据源周围放置单引号:

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;';

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

答案 2 :(得分:3)

你检查了这个http://support.microsoft.com/kb/209805吗?特别是,你是否有Msrd3x40.dll。

您可能还想检查您是否拥有最新版本的Jet:http://support.microsoft.com/kb/239114

答案 3 :(得分:1)

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

以下是一个例子:

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

答案 4 :(得分:0)

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

和你一样,我的连接字符串显示正确 - 事实上,在其他情况下,完全相同的连接字符串正在工作。

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

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

答案 5 :(得分:0)

我用它来更新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 :(得分:-1)

使用此连接字符串

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

答案 7 :(得分:-2)

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

可能是因为机器没有安装MSACeess?我会确保你有最新版本的Jet,如果它仍然不起作用,从其他一台机器上找到文件Msrd3x40.dll,将其复制到Vista机器并在其上调用regsvr32(在管理员模式下) )应该为你解决。

答案 8 :(得分:-2)

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

  

string ConnectionString =“Provider = Microsoft.ACE.OLEDB.12.0; Data   来源=“+<> +”;扩展   Properties = Excel 8.0;“;