数据库连接常见错误\解决方案总结 (引)
hanhaiyiou提交于:2007-8-13 | 本文目前专长值:数据库连接常见错误\解决方案总结
引:
和数据库打交道,常常碰上不是这样就是那样的问题.其实,碰上的问题越多越好,网络上一搜,然后解决,再做开发,速度也就快了!同一数据库问题会有多种原因和情况,本文仅为个人数据库处理中遇到的问题及解决方法的网络搜集\实践\总结\细化.
首先,感谢网络上为我们支招话策的有心人,你们辛苦了!
(1)问题1"[Microsoft][ODBC Microsoft Access Driver] 操作必须使用一个可更新的查询。"错误;(参考:http://www.it-school.cn/html/XML-SOAP/200611/144268.html)
(1)提示出错信息:
Microsoft OLE DB Provoer for ODBC Drivers 错误 '80004005'
[Microsoft][ODBC Microsoft Access Driver] 操作必须使用一个可更新的查询。
/hdfx/inc/inc_doc_disp.asp,行54
(2)出错原因及解决方法
[Microsoft][ODBC Microsoft Access Driver] 操作必须使用一个可更新的查询。
/hdfx/inc/inc_doc_disp.asp,行54
(2)出错原因及解决方法
原因:
有几个主要的错误原因(风雨者):
这个错误发生在当你的程序试图执行更新数据库或其它类似操作时。这是因为
ADO由于以下的几个原因而不能够写数据库造成的。
1、最普遍的原因是匿名用户帐号(IUSR_MACHINE)对该数据库文件没有写权限。
要解决这个问题,在管理器中调整数据库文件的属性,让匿名用户有正确的权限。当使用ACCESS数据库时,不仅要给文件写的权限,还要给该目录写的权限,因狫et需要在该目录建立一个.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)中的查询时,在执行这个查询是会出现该错误。
有几个主要的错误原因(风雨者):
这个错误发生在当你的程序试图执行更新数据库或其它类似操作时。这是因为
ADO由于以下的几个原因而不能够写数据库造成的。
1、最普遍的原因是匿名用户帐号(IUSR_MACHINE)对该数据库文件没有写权限。
要解决这个问题,在管理器中调整数据库文件的属性,让匿名用户有正确的权限。当使用ACCESS数据库时,不仅要给文件写的权限,还要给该目录写的权限,因狫et需要在该目录建立一个.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)中的查询时,在执行这个查询是会出现该错误。
6,点击你的数据库名字/右键/属性/安全/把everyone设为完全控制。/修改数据库所在目录的权限,把internet来宾 用户加上修改等权限
(3)调整数据库连接方式,不用ODBC连接,改用DSN事实;
用DSN连接并且没有用户名和密码:
MS Access数据库连接
<%
set conn = Server.CreateObject("ADODB.Connection")
conn.open "YourDSNo"
%>
用DSN连接并且有用户名和密码:
<%
set conn = Server.CreateObject("ADODB.Connection")
conn.open "YourDSNo","usero","password"
%>
用实际的数据库绝对路径连接:
<%
Set conn = Server.CreateObject("ADODB.Connection")
Strconn="DRIVER={Microsoft Access Driver (*.mdb)}; "
Strconn=Strconn & "DBQ=e:\\yanhang\\database.mdb"
conn.Open Strconn
%>
用实际的数据库相对路径连接:
<%
Set conn = Server.CreateObject("ADODB.Connection")
Strconn="DRIVER={Microsoft Access Driver (*.mdb)}; "
Strconn=Strconn & "DBQ=" & Server.MapPath("/database/yanhang.mdb")
conn.Open Strconn
%>
用DSN连接并且没有用户名和密码:
MS Access数据库连接
<%
set conn = Server.CreateObject("ADODB.Connection")
conn.open "YourDSNo"
%>
用DSN连接并且有用户名和密码:
<%
set conn = Server.CreateObject("ADODB.Connection")
conn.open "YourDSNo","usero","password"
%>
用实际的数据库绝对路径连接:
<%
Set conn = Server.CreateObject("ADODB.Connection")
Strconn="DRIVER={Microsoft Access Driver (*.mdb)}; "
Strconn=Strconn & "DBQ=e:\\yanhang\\database.mdb"
conn.Open Strconn
%>
用实际的数据库相对路径连接:
<%
Set conn = Server.CreateObject("ADODB.Connection")
Strconn="DRIVER={Microsoft Access Driver (*.mdb)}; "
Strconn=Strconn & "DBQ=" & Server.MapPath("/database/yanhang.mdb")
conn.Open Strconn
%>
(2)问题2:[Microsoft][ODBC Microsoft Access Driver] 标准表达式中数据类型不匹配错误:
我遇到的问题,area,year为数值型,type为文本型,想根据三者的赋值进行查询,错误代码如下:
chaxunresult.Source = "SELECT * FROM landindex WHERE year = " + Replace(chaxunresult__MMColParam, "'", "''") + " and area = " + Replace(chaxunresult__MMColParam2, "'", "''") + " and type = " + Replace(chaxunresult__MMColParam3, "'", "''") + ""
修改后为:
修改后为:
chaxunresult.Source = "SELECT * FROM landindex WHERE year = " + Replace(chaxunresult__MMColParam, "'", "''") + " and area = " + Replace(chaxunresult__MMColParam2, "'", "''") + " and type = '" + Replace(chaxunresult__MMColParam3, "'", "''") + "'"
例如网络上的例子:
(1)$sql="select * from pass where passle='1'"; 用的是PHP +ACCESS ,运行出现以上错误,如果库中变量passle 是文本型的,则不会出现以上错误,错误的原因是passle是数值型的,应改为:$sql="select * from pass where passle=1";
(2)mstartworktime是时间类型
sql="select * from WorkLog where MStartWorkTime between '" & sDate & "' and '" & edate & "' and uo='"&usero&"'"
sql="select * from WorkLog where MStartWorkTime between '" & sDate & "' and '" & edate & "' and uo='"&usero&"'"
出错,
可修改为: sql="select * from WorkLog where MStartWorkTime between #" & sDate & "# and #" & edate & "# and uo='"&usero&"'"
(3)问题3 数据库连接出错
方案:
1//conn.asp:
<%
db_path="../access/hechuanning.mdb"
set conn=server.CreateObject("ADODB.connection")
connstr="driver={Microsoft Access Driver (*.mdb)};dbq="&server.MapPath(db_path)
conn.open connstr
%>
<%
db_path="../access/hechuanning.mdb"
set conn=server.CreateObject("ADODB.connection")
connstr="driver={Microsoft Access Driver (*.mdb)};dbq="&server.MapPath(db_path)
conn.open connstr
%>
2//db_path="../access/hechuanning.mdb"
set conn=server.createobject("adodb.Connection")
connstr="provoer=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(db_path)
conn.Open connstr
set conn=server.createobject("adodb.Connection")
connstr="provoer=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(db_path)
conn.Open connstr
(4)错误类型:
ADODB.Field (0x800A0BCD)
BOF 或 EOF 中有一个是“真”,或者当前的记录已被删除,所需的操作要求一个当前的记录。
/baohuqufindshanchuresult.asp, 第 137 行
ADODB.Field (0x800A0BCD)
BOF 或 EOF 中有一个是“真”,或者当前的记录已被删除,所需的操作要求一个当前的记录。
/baohuqufindshanchuresult.asp, 第 137 行
其中一个原因是 :本页需要一个变量的初始赋值,而该赋值语句不在该页,测试方法是从赋值页进入测试.
待续!
你对本文的评价:
本文目前专长值:
| 本文发布者:hanhaiyiou (在本营发布了条专长内容) 专业值: | 汗水: [联系我] [加我为好友] |
hanhaiyiou在本栏的其他内容查看全部相关评论(0条)
! 本网信息均由网友提供,并不代表蚁集观点.
热门帖子


