|
蓝森林 http://www.lslnet.com 2006年8月25日 8:28
(ASP)为什么我的这个页面就出现问题。
我想搞一个点击排名,弄出来了但是就是没有反应,,望各位高手给我指点指点!
以下为我的源代码:
<html>
<style type="text/css">
</style>
<!--#include file="conn.asp" -->
<body>
<%
set rs_top=server.CreateObject("adodb.recordset")
sqlstr="select top 15 * from wz order by count desc"
rs_top.open sqlstr,conn,1,1
%>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>点击前15</td>
</tr>
<tr>
<%
Do while not rs_top.eof
%>
<td>
<A TARGET=_blank HREF=shownews.asp?id=<%=rs_top("id")%>><%=rs_top("title")%></A></td>
<%
rs_top.movenext
loop
rs_top.close
conn.close
%>
</tr>
</table>
</body>
</html>
运行结果就是长久没有反应,同时电脑速度变的超慢,,我个人估计可能是消耗系统资源太多,但我就是没有找到原因。(但我网站里面其他页面运行不会出现这个问题。) |
没看出任何问题~~
汗.>~ |
我也是看了N 久,没有问题啊!!所以我一直很郁闷。
那位高手能指点指点!搞的我郁闷几天了! |
Do while not rs_top.eof
<%=rs("title")%>
在rs_top的循环上引用rs?
这样rs并没有发生movenext
可能在上下文中还有对rs的操作,结果造成死循环 |
楼上的这样写有问题吗
do while not rs.eof
rs("title")
rs.movenext
loop
请指点. |
powerdave在上个帖子中说
这个是我一时搞错了,但我之前是用的是RS 后来想想要包含到其他页面中,,临时改成RS_TOP,但问题还是没有解决,我都改成一样的问题还是没有解决。依旧消耗系统资源未能显示数据! |
把sql语句打出来看看
<td>
<A TARGET=_blank HREF=shownews.asp?id=<%=rs("id")%>><%=rs("title")%></A></td>
换成
<td>response.write"<a href='shownews.asp?id="&rs("id")&"'>" &rs("title")&"</a>"
</td>
试试 |
循环没有问题啊
当然rs("Title")这里要换成输出语句或其他操作
你想问的是什么呢?在使用的时候报错吗?
do while 循环是先进行一次操作然后再做判断
如果报错了的话 是不是没有符合条件的记录 第一次的输出没有完成
在使用do while 的时候要在开始以前先做个判断
if not rs.eof then
//do while.....
end if
如果不在中途做exit动作的话
推荐使用
while not rs.eof
//操作
rs.movenext
wend |
shuijing2000在上个帖子中说
我按照你说的改动,好像也没有什么变化,还是无法显示! |
powerdave在上个帖子中说
我打开这个网页的时候,它也不报错,也没有显示内容。下面打开进度条一点点加,,如果等待时间一久感觉机器速度慢了很多。
本来我在搞这个页面的时候是用的while。。wend语句,,反应也是这样,我就换成DO..LOOP的语句试试还是同样的问题!
所以我非常想不通。。但我估计应该有地方死循环!严重消耗了机器资源,又不知道那里! |
<%
on error resume next
db="123456.asp"
connstr="driver={microsoft access driver (*.mdb)};dbq="&server.mappath(db)
%>
这个是COON.ASP的代码!
大家整体看看可能会容易解决些! |
消耗系统资源最大的可能性就是出现死循环
把程序分开来调试一下
先打开recordset直接输出一天记录 看连接上有没有问题
然后检测循环 注意在上下文中不要冲突
改成相同名称后 我用你的语句输出本机数据没问题 |
把on error resume next去掉再调试
这样才能看到真正的错误地址 |
sqlstr="select top 15 * from wz order by [count] desc"
这样试试 |
powerdave在上个帖子中说
按照你说的,,出现了错误显示代码 如下:
Microsoft VBScript 编译器错误 错误 '800a03f6'
缺少 'End'
/iisHelp/common/500-100.asp,行242
ADODB.Recordset 错误 '800a0bb9'
变量或者类型不正确,或者不在可以接受的范围之内,要不就是与其他数据冲突。
/yinger/top20.asp,行16
就是这句 “rs_top.open sqlstr,conn,1,1” 问一下,这个是那里错了! |
幻想曲好仔细
我太粗心了 -_-!
count为关键字 不可直接引用
最好在数据库设计的时候就避免使用关键字
常见并被经常误用的有date,order,count等等 |
powerdave在上个帖子中说
我可以确认连接上面没有问题,我显示其他内容都能显示,而且速度很快,但一旦运行这个TOP20.ASP的页面,就问题来了。而且我将其停止,在运行其他页面速度变慢了。只有等一段时间后在运行速度才恢复过来! |
经过前面各位的指点,代码改了很多,
TOP20.ASP页面内容如下:
<html><style type="text/css">
<!--
body {
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
}
-->
</style>
<!--#include file="conn.asp" -->
<body>
<%
set rs_top=server.CreateObject("adodb.recordset")
sqlstr="select top 15 * from wz order by [count] desc"
rs_top.open sqlstr,conn,1,1
%>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>点击前15</td>
</tr>
<tr>
<%
Do while not rs_top.eof
%>
<td>
<A TARGET=_blank HREF=shownews.asp?id=<%=rs_top("id")%>>
<%=rs_top("title")%>
</A>
</td>
<%
rs_top.movenext
loop
rs_top.close
conn.close
%>
</tr>
</table>
</body>
</html>
CONN.ASP页面如下:
<%
db="123456.asp"
connstr="driver={microsoft access driver (*.mdb)};dbq="&server.mappath(db)
%>
但问题依旧未能解决。出现错误提示为;
Microsoft VBScript 编译器错误 错误 '800a03f6'
缺少 'End'
/iisHelp/common/500-100.asp,行242
ADODB.Recordset 错误 '800a0bb9'
变量或者类型不正确,或者不在可以接受的范围之内,要不就是与其他数据冲突。
/yinger/top20.asp,行16
|
conn.asp改成这样
<%
db="123456.asp"
Set conn = Server.CreateObject("ADODB.Connection")
connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(""&db&"")
conn.Open connstr
%> |
powerdave在上个帖子中说
现在打开速度不慢了,好像是这个数据库连接问题!
请问这个是为什么???难道这个数据库连接不行?
|
少了
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open connstr
这两句
你的conn文件里并没有创建Connection对象
所以出现800a0bb9错误
在你原来基础上加上这两句也可以
db="123456.asp"
connstr="driver={microsoft access driver (*.mdb)};dbq="&server.mappath(db)
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open connstr |
但我其他页面也是调用同一个CONN.ASP的文件,,显示数据正常,为什么就这个页面不行???我就是地方比较纳闷的? |
其他页面可能在程序的开始或其插入文件中有个创建Connection的语句
另一个可能是打开recordset的时候使用了形如下面的语句:
<%
rs_top.open sqlstr,connstr,1,1 //PS:这不是个好的习惯
%> |
谢谢powerdave,问题得到了根本的解决,同时我也明白了一些东西!非常感谢! |
还有一个问题就是为什么我要显示10条,但显示出来都会不等于10条,或多或少! |
:)不用客气 互相帮助嘛
这是因为count有很多是一样的
也就是排序后第9、10、11条记录的count值是相等的
进行排序的时候top 15不能强制记录数
所在在recordset其实检索到了更多记录
这种情况下最好使用for循环来做
for i = 1 to 10
//......
next
也可以在do while循环中加个累加变量i
i = 1
do while..
//...
i = i + 1
if i > 10 then exit do
loop |
问题彻底解决了!
对powerdave表示强烈的感谢。今天解决了我几个一直困惑的几个问题。
有Q吗?有点冲动加你了。以便以后可以随时找你。哈哈! |
有问题到论坛上解决吧
这里高手很多
我也很菜的-_-! |
|