我在Excel工作簿中编写了一些VBA代码,用于从桌面上同一目录中的Access数据库中检索数据。它在我的机器和其他几台运行Windows XP的机器上运行良好,但是当我们在Vista机器上测试时,我们遇到了以下错误:
无法找到可安装的ISAM
我在网上搜索了一堆,但似乎无法找到具体的答案。连接字符串似乎很好,正如我所提到的,它适用于多台机器。
有谁知道可能导致这种情况的原因是什么?我的连接字符串如下:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\ptdb\Program Tracking Database.mdb;
由于
答案 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;“;