动网论坛,站长建站首选,国内使用量最多的论坛软件 动网论坛官方技术讨论区 站长工具 申请属于您自己的免费论坛
首页 | 新闻资讯 | 网站运营 | 网络编程 | 数据库 | 服务器 | 网页设计 | 图像媒体 | 网络应用 | 搜索优化 | 资源下载 | 动网主机 | DVBOX
    本站内  互联网 ASP论坛  ASP.Net论坛  PHP论坛
   Asp → 阅读文章

 讨论错误——操作必须是可更新的查询

作者:东方蜘蛛 来源:chinaasp.com 
阅读 3943 人次 , 2001-2-17 

这里是微软官方站点对此的解释,通常来说,这个是一个权限问题。

http://support.microsoft.com/support/kb/articles/Q175/1/68.ASP

特征:
下面是使用ADO和ASP遇到这个情况的一种错误代码。

Microsoft OLE DB Provider for ODBC Drivers error ' 80004005'
[Microsoft][ODBC Microsoft Access 97 Driver] 操作必须是一个可更新的查询

原因:
本篇文章描述了三个该错误发生的主要原因以及错误产生区域。尽管这儿引用的是ACCESS数据库,但是对其他类型的数据库也同样适用。

解决办法

这个错误通常是在你对数据库内容做更新或者在试图改变数据库内容的时候产生的,这个错误的发生是因为您的ADO操作由于以下的某个原因而导致写入失败:

1、最普遍的原因是您的INTERNET来宾帐号(Iuser_machine)没有写入数据库(ACCESS)的权限,您可以在浏览器安全设置里给该帐号设置正确的权限。注意:当使用ACCESS和ADO的时候,也必须给该帐号以写目录的权限,也就是存放该MDB文件的地方,这个是因为数据库引擎会建立一个.LDB文件来出路数据库的锁定操作。你同时也应该给INTERNET临时文件夹设置读写权限,因为数据库引擎有可能会在该目录里面建立相关临时文件。

2、第二个原因是数据库的打开方式不对,比如打开方式是不可写的,也会导致该错误,当您使用CONNECTION对象的时候,您可以使用如下代码:
SQL = "UPDATE Products Set UnitPrice = 2;"
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Mode = 3 ' 3 = adModeReadWrite
Conn.Open "myDSN"
Conn.Execute(SQL)
Conn.Close
注意,默认的模式是0,一般说来,该模式是允许更新操作的

3、另外一个原因是你有可能在ODBC管理器里把相应的DNS设置里让READ ONLY选项给选中了

4、最后一个原因(FOR SQL),您的操作可能违反了数据库参照完整性,下面是一些普遍的导致该错误的操作:
比如您在试图改变一些不能改变的部件:比如交叉表、SQL PASS-THROUGH,连接,或者UPDATE操作一些已经设置为唯一的选项,比如一个自动编号的ID等等。
还有一个普遍的原因是你的JOIN操作包含了没有唯一索引的关联表,在这种情况下,SQL无法保证您要试图更新的表里的数据是唯一的。

任何一种原因都可能发生在很多情况下面,当您试图去更新一和一对多的联合,也会发生这个错误,除非允许层叠更新,请注意实施数据参照完整性

希望能对你有所帮助。
  

 
 收藏本文  打印本文  论坛讨论  关闭窗口
· 上一篇:关于翻页的函数
· 下一篇:二文件上传,才30行代码
· 正则表达式简介(微软)--6.优先权顺序
· 仅用xsl和asp实现分页功能
· c#里面的namespace基础(一)
· 如何使Web更安全 - 3
· 如何用foreach遍历页面上所有的TextBox


关于本站 | 联系我们 | 业务合作 | 客户案例 | 诚聘英才 | 广告合作 | 收藏本站
海口动网先锋网络科技有限公司版权所有
Copyright © 2000 - 2006 Cndw.Com
中华人民共和国电信与信息服务业务经营许可证编号 琼 ICP 020077