Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e21'

系统环境
Windows server2003+IIS6+NTFS
ASP+Access

错误信息

Microsoft JET Database Engine 错误 80004005 未指定的错误
[Microsoft][ODBC Microsoft Access Driver]General error Unable to open registry key Temporary (volatile) Jet DSN for process 0x474 Thread 0x290 DBC 0x79d024 Jet.
Microsoft OLE DB Provider for ODBC Drivers 错误 80004005
[Microsoft][ODBC Microsoft Access Driver]常见错误 不能打开注册表关键字 Temporary (volatile) Jet DSN for process 0x1f0 Thread 0xd44 DBC 0x203e024 Jet。
Provider 错误 80004005 未指定的错误
Microsoft JET Database Engine 错误 80004005 操作必须使用一个可更新的查询。

故障原因

此类错误一般出现于文件系统为NTFS格式中,是IIS匿名帐号(IUSR_计算机名)对相关文件、文件夹操作权限不足引起的。
一、存放数据库文件夹对IIS匿名帐号没有写入、修改权限,错误表现为无法对数据库进行更新、写入
二、系统临时文件夹目录对IIS匿名帐号没有写入、修改权限,错误表现为访问服务器上任何采用Microsoft JET Database Engine 链接Access类数据库的文件都是出错。正常情况下是不会出现这个错误的,当使用某些系统垃圾清理优化工具、或其它一些因素可能会导致这个目录权限发生改变。所以请慎重使用此类工具。

解决办法

一、检查存放Microsoft Access数据库文件的文件夹是否有对IIS匿名帐号有写入权限,如果没有,请赋于写入权限,特别是当错误信息为(Microsoft JET Database Engine 错误 80004005 操作必须使用一个可更新的查询。)时。
二、JET引擎在链接数据库的时候会在%windir%/temp/目录下创建临时文件,而IIS匿名帐号对%windir%/temp/目录操作权限不够,添加IIS匿名帐号(IUSR_计算机名)对%windir%/temp/的读写权限即可。
其它一些未指定的错误,可以尝试重新注册ASP脚本解释链接库文件。
依顺序运行以下命令:
1.regsvr32 jscript.dll
2.regsvr32 vbscript.dll
3.iisreset
参考案例二:
Microsoft OLE DB Provider for ODBC Drivers 错误 80040e21
多步 OLE DB 操作产生错误。如果可能,请检查每个 OLE DB 状态值。没有工作被完成。
当服务器尝试处理包含"更新记录"或"插入记录"服务器行为的页时,会出现此错误。数据库无法处理该服务器行为尝试执行的更新或插入操作。
可能的原因和解决方案如下:
该服务器行为正尝试更新数据库表的自动编号字段或者尝试在自动编号字段中插入记录。由于自动编号域由数据库系统自动填充,因此任何从外部用值填充这些域的尝试都会失败。
服务器行为正在更新或插入的数据对于该数据库字段而言是错误的类型,例如将日期插入布尔型(是/否)字段,将字符串插入数值字段,或者将格式不正确的字符串插入"日期/时间"字段。
今天在做Oracle ODBC连接操作的时候出现了以上错误,网上查到的东西先保存在这里,看看是否有用。某个项目的格式不对,特别是时间格式和数字格式,必须按格式填写,一些项目填写的内容不要超过字段的长度,检查一下自己输入了什么东西,同时检查一下自己增加的字段,有没有对输入端做格式化处理。

Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e21'