Could not find installable ISAM(找不到可安装的ISAM)问题
一个叫openaspx的网站真的是相当无耻,抄袭的赤裸裸连出处都不注明。开源不等于偷窃!
一个系统有个导入Excel数据到datatable的功能, 在测试环境中, 某天业务人员测试的时候发现导入不成功了. 提示"Could not find installable ISAM"(英文操作系统,中文可能为"找不到可安装的ISAM").
在网上找了很多资料, 一般都是连接串写错了, 比如DataSource两个单词连在一起, 应该是Data Source; 或者Extended Properties的值需要加上引号;或缺少分号. 详细可以参考[1]
但是这个系统的源代码很长时间没有修改,之前也用的好好的. 怀疑是office的问题. 经查发现office 2003给卸载了(因为用上office 2010了), 是不是需要安装Excel 2003呢? 但是按理说Excel 2010应该向前兼容的, 微软也没必要去除啊.
后来看到[2], 突然想起会不会是因为卸载office 2003导致注册表出错? 于是按照[2]的方法重新手工注册了关键的几个dll, 一试果然行了. 看样子[2]也是转载微软帮助文档. 另外, 下面提及的几个dll, 均不是安装office才有的, windows系统自带, 如果没有, 可以到系统盘下搜索"40.dll", 可以发现在系统盘下的WINDOWS\ServicePackFiles\i386目录下就有这些文件, 拷贝到system32下再注册即可. 我测试发现Excel的话一般注册以下几个dll即可: Msexcl40.dll, Msexch40.dll,Msrd2x40.dll, Msrd3x40.dll.
问题描述:
在 Access 或Sql Server中收到“Could not find installable ISAM”(找不到可安装的 ISAM)错误信息或者丢失某些文件类
解决方法:
1.注册表编辑器使用不当可能导致严重问题,可能需要重新安装操作系统。Microsoft 不能保证您可以解决因注册表编辑器使用不当而导致的问题。使用注册表编辑器需要您自担风险。要解决此问题,您可以尝试手动注册此文件,或者必须更正 Windows 注册表中的路径名称错误,然后安装或替换问题文件。为此,请按照下列步骤操作。
注意:在“症状”一节中提到的错误信息 1 中,此文件名直接与尝试的操作相关联。在“症状”一节中提到的错误信息 2 中,此文件名在该信息的文本中提到。
1. 在下表中找到相关的文件:
文件名 导入/导出 ISAM: Windows 注册表
Msexcl40.dll Microsoft Excel HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel
Msexch40.dll Microsoft Exchange HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Exchange
Msrd2x40.dll Microsoft Jet 2.x HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Jet 2.x
Msrd3x40.dll Microsoft Jet 3.x HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Jet 3.x
Msltus40.dll Lotus 1-2-3 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Lotus
Mspbde40.dll Imprise Paradox HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Paradox
Mstext40.dll Text HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Text
Msxbde40.dll dBase HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Xbase
2. 使用 Microsoft Windows 资源管理器搜索文件。
3. 如果找到此文件,请记下此文件的路径名称。如果找不到此文件,请转至步骤 13。
4. 打开 Windows 注册表编辑器。
5. 找到此表中描述的注册表子项,然后按照实际的路径名称检查此路径名称。如果此注册表项不存在,请转至步骤 8。
6. 如果路径错误,更正此路径。如果路径正确,继续执行这些步骤。
7. 关闭注册表编辑器。
如果更改了此路径,请重复产生最初错误的过程。
8. 如果错误仍然存在,请使用 Regsvr32.exe 实用工具手动注册此文件。
Regsvr32.exe 实用工具是用于在 Windows 注册表中注册 DLL 和 ActiveX 控件的应用程序。您可以使用此文件解决错误匹配的 .dll 文件的问题。要使用 Regsvr32.exe 实用工具重新注册 .dll 文件,请转至下一步。
9. 验证 Regsvr32.exe 文件是否位于装有 Windows 的系统文件夹中。
例如,Regsvr32.exe 文件通常位于 C:\Windows\System 或 C:\Winnt\System32 中。
10. 单击“开始”,然后单击“运行”。
11. 在“运行”对话框中,在“打开”框中键入以下命令。
注意:Regsvr32.exe 的路径和 DLL 的名称和路径在计算机中可能有些不同。以下命令可注册 Excel ISAM:
Regsvr32 c:\winnt\system32\msexcl40.dll
注意:注册 DLL 的另一种方法是使用 Windows 资源管理器找到 DLL。
双击此 DLL。在“打开方式”对话框中,单击“Regsvr32.exe”,然后单击“确定”。
这会创建所有 DLL 与 Regsvr32.exe 的永久关联。您可以双击其他未注册的 DLL,来注册这些 DLL。
有关如何获得此文件的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
267279 (http://support.microsoft.com/kb/267279/) Regsvr32.exe 可从下载中心下载
12. 如果错误仍然存在,或者已经在步骤 5 中更正了路径名称,请重命名此文件。
13. 启动“添加/删除程序”工具,启动 Office 2000 安装程序,然后单击“修复 Office”。
另外, [3]也有提及导入注册表的方法, 但因不知道是那些dll的注册表, 服务器上不敢乱试. 转帖如下:
這個問題困擾了我二個月
在delphi 7 裏ADO連jet oledb 4.0 用的好好的,會突然就出現
"Microsoft.Jet.Oledb.4.0 找不到提供者或未安裝"
而今天在vm裏比對過oledb 4.0的登錄機碼後發現有兩個機碼消失了
可能是什麼系統優化的軟體搞的吧,在補上後jet 4.0就回來了....
以下是缺少的登錄資料
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\CLSID\{dee35071-506b-11cf-b1aa-00aa00b8de95}]
@="Microsoft Jet 4.0 OLE DB Provider Error Lookup"
[HKEY_CLASSES_ROOT\CLSID\{dee35071-506b-11cf-b1aa-00aa00b8de95}\InprocServer32]
@="C:\\WINDOWS\\system32\\msjetoledb40.dll"
"ThreadingModel"="Both"
[HKEY_CLASSES_ROOT\CLSID\{dee35071-506b-11cf-b1aa-00aa00b8de95}\ProgID]
@="Microsoft.Jet.OLEDB.ErrorLookup.4.0"
[HKEY_CLASSES_ROOT\CLSID\{dee35071-506b-11cf-b1aa-00aa00b8de95}\VersionIndependentProgID]
@="Microsoft.Jet.OLEDB.ErrorLookup"
[HKEY_CLASSES_ROOT\CLSID\{dee35070-506b-11cf-b1aa-00aa00b8de95}]
@="Microsoft.Jet.OLEDB.4.0"
"OLEDB_SERVICES"=dword:fffffffe
[HKEY_CLASSES_ROOT\CLSID\{dee35070-506b-11cf-b1aa-00aa00b8de95}\ExtendedErrors]
@="Microsoft Jet 4.0 OLE DB Provider Error Lookup"
[HKEY_CLASSES_ROOT\CLSID\{dee35070-506b-11cf-b1aa-00aa00b8de95}\ExtendedErrors\{dee35071-506b-11cf-b1aa-00aa00b8de95}]
@="Microsoft Jet 4.0 OLE DB ProviderError Lookup"
[HKEY_CLASSES_ROOT\CLSID\{dee35070-506b-11cf-b1aa-00aa00b8de95}\InprocServer32]
@="C:\\WINDOWS\\system32\\msjetoledb40.dll"
"ThreadingModel"="Both"
[HKEY_CLASSES_ROOT\CLSID\{dee35070-506b-11cf-b1aa-00aa00b8de95}\OLE DB Provider]
@="Microsoft Jet 4.0 OLE DB Provider"
[HKEY_CLASSES_ROOT\CLSID\{dee35070-506b-11cf-b1aa-00aa00b8de95}\ProgID]
@="Microsoft.Jet.OLEDB.4.0"
[HKEY_CLASSES_ROOT\CLSID\{dee35070-506b-11cf-b1aa-00aa00b8de95}\VersionIndependentProgID]
@="Microsoft.Jet.OLEDB"
有一樣問題的就試一下吧
存成reg檔,再滙入看看是不是解決了這個問題
参考文档:
[1]http://www.cnblogs.com/zyc2/articles/182492.html
[2]http://www.cnblogs.com/zgqys1980/archive/2010/11/23/1885661.html
[3]http://www.cnblogs.com/dotneter/archive/2008/11/28/1343132.html