菜鸟问:一个数据库问题,解决了立刻高分节贴

baoxiaohua 2005-12-10 11:06:33
我的数据库路径是:"db/scershou.asp"
里面有一个表"mytable"
ID name islend
1 王 是/否 应该用方格的,(可惜我画不出来)
2 张 是/否

下面是有问题的代码.
<%
dim startime,conn
startime=timer()
db="db/scershou.asp"
Set conn = Server.CreateObject("ADODB.Connection")
connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(""&db&"")
conn.Open connstr
id="1"
dim sql
dim rs
dim islend
islend=true
set rs=server.createobject("adodb.recordset")
sql="update mytable set islend="&islend&" where id="+id
rs.Open sql,connstr,1,1
rs.open "select * from mytable where id="+id,conn,1,3
password=rs(1)
%>
<%Response.Write(password)
%>


提示是
Microsoft JET Database Engine 错误 '80004005'
操作必须使用一个可更新的查询。
/LEND2.ASP,行 18


其实有问题的就是
sql="update mytable set islend="&islend&" where id="+id
rs.Open sql,connstr,1,1
把它删掉就可以正常显示了.

看来我更新的语法写错了,谁能帮帮我该怎么改呢?高分节贴!

...全文
121 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
baoxiaohua 2005-12-10
  • 打赏
  • 举报
回复
解决了,用showlin(深陷asp泥潭)方法是可以解决了
而hangeb(hangeb)方法也可以了,这可好,99分怎么分呢
不如你们告诉我为什么这么改的原因好了
我也好给分呀(非分要求)
itzhiren 2005-12-10
  • 打赏
  • 举报
回复
权限问题,给everyone赋所有权限
showlin 2005-12-10
  • 打赏
  • 举报
回复
rs.Open sql,connstr,1,1

conn.execute(sql)
hangeb 2005-12-10
  • 打赏
  • 举报
回复
改成<%
id="1"
dim sql
dim rs
dim islend
islend=true
set rs=server.createobject("adodb.recordset")
conn = "DBQ=" + server.mappath("db/scershou.asp") + ";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"
sql="update mytable set islend="&islend&" where id="+id
rs.Open sql,connstr,1,1
rs.open "select * from mytable where id="+id,conn,1,3
password=rs(1)
%>
<%Response.Write(password)
%>

baoxiaohua 2005-12-10
  • 打赏
  • 举报
回复
我想大概是connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(""&db&"")这句有问题,你要进行改一下,才能进行更新.
竹林听雨2005 2005-12-10
  • 打赏
  • 举报
回复
另外,帮你搜索了一下,应该有几个主要的错误原因:
这个错误发生在当你的程序试图执行更新数据库或其它类似操作时。这是因为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)中的查询时,在执行这个查询是会出现该错误
竹林听雨2005 2005-12-10
  • 打赏
  • 举报
回复
在ASP中常见的错误80004005信息和解决办法

错误信息(错误信息我不用翻译成中文了吧,呵呵,大家谅解)
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC Microsoft Access 97 Driver] The Microsoft Jet database
engine cannot open the file '(unknown)'. It is already opened exclusively
by another user, or you need permission to view its data.
原因:
这个错误发生在当IIS使用匿名帐号(通常是IUSR)时,该帐号在NT中对数据库所在的目录
没有正确的权限.(这就是为什么在Win95和PWS下没问题,因为win95根本就没有目录权限这一说)
检查文件和目录的权限. 确定你能够在该目录中有能够新建和删除临时文件的权限。
这些临时文件其实是数据库建立在同一个目录下的文件, 但是要注意的是,有可能这些文件
也可能建立在别的目录,例如 /Winnt.

使用NT的文件监视程序监视文件失败时到底是访问了什么目录。
这个NT的文件监视程序可以在这个地方下载http://www.sysinternals.com.

如果你对数据库使用了一个网络地址,例如映射地址,就要检查一下共享文件和目录的权限,

还要检查一下数据源文件(DSN)是否被别的程序标志成为正在使用中,
这些别的程序一般是Visual InterDev,关闭任何一个InterDev中的正打开和数据库连接的项目。

这个错误还可能发生在这种情况:如果在DSN中使用了一个UNC路径(就是通用命名协议),请改用
本地路径进行测试,因为如果对本地数据库使用UNC也可能出错。
还可能发生在这种情况,如果服务器要访问Access中的一个表,而这个表却联接在一个网络服务器上。

错误信息:
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC Microsoft Access 97 Driver] Couldn't use '(unknown)'; file
already in use.
原因:
多人使用时数据库被锁定。

错误信息:
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC Driver Manager] Data source name not found and no default
driver specified.
原因:
最可能的原因是ConnectString是一个在global.asa中初始化的Session变量 ,但是global.asa
却没有正常工作。解决办法是,检查赋值时是否正确:(在你的asp中加入下面的代码)
<%= "'auth_user' is " & request.servervariables("auth_user")%>
<P>
<%= "'auth_type' is " & request.servervariables("auth_type")%>
<P>
<%= "connection string is " & session("your_connectionstring")%>
<P>
还有一个原因就是你在你的ConnectString中加入了多余的空格,例如
DSN = MyDSN; Database = Pubs;
试试改成下面这个样子:
DSN=MyDSN;Database=Pubs;

如果是global.asa还没有工作,检查该文件是否在运用程序的根目录中,或者是虚拟目录的根目录中。

还有可能错误出现的原因是DSN名称没找着,这可以采用我提供的id=36767的办法解决。
最后是检查是否安装了最新的驱动程序,既是否是最新的MDAC版本。

错误信息
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC Driver Manager] Data source name not ??
原因:
这个错误有可能是出现在你的计算机上软件安装(或则反安装)的顺序上。
如果ODBC的版本不一致的话,就会发生该错误。
解决办法是安装最新版本的MDAC

错误信息:
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC Access 97 ODBC driver Driver]General error Unable to open
registry key 'DriverId'.
原因:
这个错误发生在爱从注册表中读取数值的时候。 使用regedit32.exe检查你的注册表的权限。
你也可以使用NT中的注册表监视程序(NTRegMon)来看读取失败信息。 该程序到这找:http://www.sysinternals.com

错误信息:
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC SQL Server Driver][dbnmpntw]ConnectionOpen (CreateFile()).
原因:
两个原因:当一个数据库中包含有分别在不用机器上的许可关系时,
这也可能发生在同一台机器上,当你给一个关系设置了UNC路径,而另一个关系却是本地路径。
错误原因是:
当用户使用IIS匿名帐号登录后,对本地这台机器而言他是有权的,但是对于一个UNC路径的机器,
另外这台机器是不会认为你当前匿名登录的帐号在它那上面也是合法的。
这样它就不允许你访问它上面的资源,导致错误。

两个解决办法:
1。在IIS工具中,改变IIS匿名帐号成另外一个基于域的帐号。(也就是不使用匿名登录)
2。或则在那台你要访问资源的机器上也创建一个和当前匿名帐号同样的帐号,使用同样的密码。

错误信息
Microsoft OLE DB Provider for ODBC Drivers error '80004005' Microsoft][ODBC
Microsoft SQL Driver] Logon Failed()
原因:
该错误是由SQL Server产生的,当它不接受或则不能够认识这个登录帐号的时候,或者没有使用管理员身份登录,
也可能是在NT中没有SQL影射帐号造成的。

使用系统管理员帐号(SA)登录,一般密码应该为空.注意,这时必须使用CoonectString而不能够使用DSN文件。
因为DSN中没有保存用户名和密码。
检查NT是否给SQL映射了帐号。

错误信息
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC SQL Server Driver][SQL Server] Login failed- User: Reason:
Not defined as a valid user of a trusted SQL Server connection.
原因:
原因同上。
试试这个办法:在SQL Server的Enterprise Manager中,选择Server/SQL Server/Configure[ASCII
133]/Security Options/Standard.
如果是运行在IIS4中,取消选择该项目的Password Synchronization选项。

错误信息
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC Microsoft Access 97 Driver] Couldn't lock file.
原因:
也许是没有正确的权限生成Access数据库的锁定文件(.ldb)
默认时,该文件和你的数据库是同一个目录的。
给匿名帐号全权访问数据库共享目录的权限。

有时是因为文件是因为共享时有意使用了只读的权限限制。试试使用下面的代码。
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Mode = adModeShareDenyWrite '8

错误信息
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC Microsoft Access 97 Driver] '(unknown)' isn't a valid
path. Make sure that the path name is spelled correctly and that you are
connected to the server on which the file resides.
原因:
路径非法。最可能发生在当Global.asa和CoonecntString被使用到另外一台机器上的时候。

错误信息
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC SQL Server Driver][SQL Server] The query and the views in
it exceed the limit of 16 tables.

原因:
查询太复杂了,对查询有限制。

错误信息:
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC SQL Server Driver][DBMSSOCN] General network error. Check
your network document
原因:
当装有SQL Server的机器改名的时候。但是DSN还使用了原来的机器名。
baoxiaohua 2005-12-10
  • 打赏
  • 举报
回复
我用ID="1"的意思只是想测一个这个代码有没有问题,到后来就会用 id=session("nuber")了
而二楼交方法没用,用过了,其实我写错了,我本身也就是用rs.Open sql,conn,1,1

希望大家慷慨解囊,我用的99分,这个吉利的数字哦,等下谁解出了给谁?
hangeb 2005-12-10
  • 打赏
  • 举报
回复
用楼上的那个一试好了
竹林听雨2005 2005-12-10
  • 打赏
  • 举报
回复
几点建议:
1、
sql="update mytable set islend="&islend&" where id="+id
改成:
sql="update mytable set islend="&islend&" where id="&id

2、
id="1"
这里赋值做什么?如果你的表中ID属性是字符型,那这样还可以,如果是自动编号,那不能这样写,id=1

3、
还是跟ID有关的,如果表中没有这条记录,那是无法实现更新的,你将ID换成其它的试试,比如表中有个ID=5的,你就换成5试试。
showlin 2005-12-10
  • 打赏
  • 举报
回复
rs.Open sql,conn,1,1
ybfqlyq 2005-12-10
  • 打赏
  • 举报
回复
connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("&db&")

28,390

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧