今天给学校编写一个新生注册程序,在录入新生信息时发现执行到rs.update语句时,出现以下错误提示:
Microsoft OLE DB Provider for ODBC Drivers 错误 '80004005'[Microsoft][ODBC Excel 驱动程序] 操作必须使用一个可更新的查询
检查了excel文件属性及其所在目录属性,发现都已经给了iuser以写入权限,应该权限没有问题的。
在baidu上也搜了很多,类似的问题都说是权限问题,后来最终在微软的官网上找到了下面的一段话:
要解决此问题,请使用下列方法:
- 请确保该记录集对象的LockType属性未设置为只读
- 请确保您试图打开的文件不会存储为只读。
- 如果您要连接到一个 DSN,请执行以下步骤:
- 打开控制面板,然后单击ODBC 数据源管理器
- 双击您的 DSN。
- 在ODBC Microsoft Excel 设置对话框中,单击选项
- 请确保未选中只读复选框。
- 如果您使用的无 dsn 的连接,请确保包含"只读 = 0"选项,在连接字符串中的。例如:
cn.Open "Driver={Microsoft Excel Driver (*.xls)};DBQ=C:\MyDoc.xls;ReadOnly=0;"
果断在连接字符串后面加上一个readonly=0,果然解决了。
下面就把我的连接语句完整的贴出来,以供其他朋友碰到这个问题时可以参考(我是采用asp连接excel的方式进行操作的):
dbpath="#test.xls"
set rs=server.createobject("ADODB.RECORDSET")
rsstr="driver={microsoft excel driver (*.xls)};dbq="&server.mappath(dbpath)&";Extended Properties='Excel 8.0;HDR=YES;IMEX=1';ReadOnly=0;"
rsql="SELECT * FROM [Sheet1$] WHERE t1='" & t1 & "' AND t2='" & t2 & "'"
rs.open rsql,rsstr,0,1(读取数据时)
rs.open rsql,rsstr,1,3(写入数据时)
微软官网参考地址:http://support.microsoft.com/kb/316475/zh-cn