日期:2014-05-17  浏览次数:20873 次

各位大哥赶快救命啊,我是asp菜鸟
网页报的错误为:Microsoft   JET   Database   Engine   错误   '80004005 '

操作必须使用一个可更新的查询。

/bbs/index.asp,行   109  

该段程序为:if   nowtime <> realnowtime   then
conn.execute( "update   bdinfo   set   todaynum=0 ")
conn.execute( "update   config   set   todaynum=0,nowtime= ' "&realnowtime& " ' ")
end   if

------解决方案--------------------
一般来说是mdb的路径不对,或者mdb文件本身的权限问题,IUSER_XX用户没有权限访问到.


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,一般说来,该模式是允许更新操作的
------解决方案--------------------
if nowtime <> realnowtime then
conn.execute "update bdinfo set todaynum=0 where ID= "&id& " "
conn.execute "update bdinfo set todaynum=0,nowtime= ' "&realnowtime& " ' where ID= "&id& " "
end if

必须要判断是要修改哪条记录撒...加个where语句

------解决方案--------------------
你先查询数据库看能不能连接
------解决方案--------------------
1.数据库文件权限不够。
2.文件占用空间达到磁盘限额上限。
当提示“操作必须使用一个可更新的查询”时有几个主要的错误原因:这个错误发生在当你的程序试图执行更新数据库或其它类似操作时。这是因为ADO由于以下的几个原因而不能够写数据库造成的。

1.最普遍的原因是匿名用户帐号(IUSR_MACHINE)对该数据库文件没有写权限。要解决这个问题,在管理器中调整数据库文件的属性,让匿名用户有正确的权限。当使用ACCESS数据库时,不仅要给文件写的权限,还要给该目录写的权限,因为Jet需要在该目录建立一个.ldb文件。

2.第二个原因是数据库没有使用正确的模式打开。应该使用下面的方法打开。

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

注意默认的Mode是设置0(adModeUnknown),它是允许更新的。

3.还有可能是在ODBC管理器中将该DSN的只读选项选中。

4.你是在同时更新两个表中的字段,也会出现这个错误信息,解决办法是分开来更新这两个表中各自字段。

5.当你使用了一个从低版本中(如ACCESS2.0,ACCESS7.0)载入到高版本(ACCESS 2000)中的查询时,在执行这个查询是会出现该错误。

http://hi.baidu.com/wltx_fly/blog/item/06367ced875fd4d5b31cb1d5.html