注册 登录
编程论坛 ASP技术论坛

请前辈帮忙,关于 asp 循环嵌套

hutoo 发布于 2014-04-18 06:47, 624 次点击
新手学asp+access,求前辈帮忙........拜谢!!!

设想效果:1.嵌套查询生成表格
                2.以下很多  留空其实是想从内循环内得到的数据再处理,比如求和,取最大值之类
                  这个是不是需要在内循环建立数组?将数据传出来?还是另写sql直接查询?
         
出现问题:1.循环不能正常,运行后显示(103928+1 0 操作3)不停重复,报错超出系统负荷
                2.为什么直接进入了最内部循环,外边的都没有运行?
                3.循环进入死循环?
                4.网页显示调试部分出现乱码,浏览器修改用编码用gbk后变成显示内容乱码,调试部分可读,什么情况?

换个角度:1.如果直接用 SELECT * from sitetbl , zonetbl , farmtbl where sitetbl.zoneid=zonetbl.zoneid and zonetbl.farmid=farmtbl.farmid
                2.可以得到查询集,怎样处理会得到原设想效果呢?
                    比如按farmname排列,但farmname只显示一次,
                    farmname相同的某列area求和,
                    farmname相同的某列surplusdays取最大值
程序代码:

<!--#include file="inc/Conn.asp"-->
    <%
   
dim rsfarm,rszone,rssite,b,c,crop
   
set rsfarm=server.CreateObject("adodb.recordset")
    rsfarm.open
"Select * From farmTbl",conn,1,3
    a
=0
   
%>
    <table>
    <tr height="60">
    </tr>
    <tr>
        <td>
        <table>
        <tr rowspan="11" height="60">
        <td>生产概况</td>
        </tr>
        <tr>
        <td height="30">林场名</td>
        <td height="30">工程名</td>
        <td height="30">工地名</td>
        <td height="30">面积/亩</td>
        <td height="30">人数</td>
        <td height="30">产率(吨/亩)</td>
        <td height="30">预产(吨)</td>
        <td height="30">现产/吨</td>
        <td height="30">完成率%</td>
        <td height="30">剩余工期(预计/天)</td>
        <td height="30">操作</td>
        </tr>               
    <%
   
do while not rsfarm.eof
    a
=a+1
   
%>        
        <tr>
        <td height="30"><%=a%><%=rsfarm("farmName")%></td>
        <td height="30">&nbsp;&nbsp;</td>
        <td height="30">&nbsp;&nbsp;</td>
        <td height="30">&nbsp;&nbsp;</td>
        <td height="30">&nbsp;&nbsp;</td>
        <td height="30">&nbsp;&nbsp;</td>
        <td height="30">&nbsp;&nbsp;</td>
        <td height="30">&nbsp;&nbsp;</td>
        <td height="30">&nbsp;&nbsp;</td>
        <td height="30">&nbsp;&nbsp;</td>
        <td height="30">操作1</td>
            </tr>
    <%
   
set rszone=server.CreateObject("adodb.recordset")
    rszone.open
"Select * From zoneTbl Where farmID='" & rsfarm("farmID") & "'",conn,1,3
   
if not(rszone.bof and rszone.eof) then
    b
=0
   
do while not rszone.eof
    b
=b+1
   
%>
        <tr>
        <td height="30">&nbsp;&nbsp;</td>
        <td height="30"><%=b%><%=rszone("zoneName")%></td>
        <td height="30">&nbsp;&nbsp;</td>
        <td height="30">&nbsp;&nbsp;</td>
        <td height="30">&nbsp;&nbsp;</td>
        <td height="30">&nbsp;&nbsp;</td>
        <td height="30">&nbsp;&nbsp;</td>
        <td height="30">&nbsp;&nbsp;</td>
        <td height="30">&nbsp;&nbsp;</td>
        <td height="30">&nbsp;&nbsp;</td>
        <td height="30">操作2</td>
        </tr>

                    
    <%
   
set rssite=server.CreateObject("adodb.recordset")
    rssite.open
"Select * From siteTbl Where zoneID='" & rszone("zoneID") & "'",conn,1,3
   
if not(rssite.bof and rssite.eof) then
    c
=0
   
do while not rssite.eof
    c
=c+1
   
%>
                    
        <tr>
        <td height="30">&nbsp;&nbsp;</td>
        <td height="30">&nbsp;&nbsp;</td>
        <td height="30"><%=c%><%=rssite("zoneName")%></td>
        <td height="30"><%=rssite("area")%></td>
        <td height="30"><%=rssite("peopleNum")%></td>
        <td height="30"><%=rssite("proRate")%></td>
        <td height="30">
                    <%
            crop
=0
            crop
=rssite("area")*rssite("proRate")
            
%>
            <%=crop%>
        </td>
        <td height="30">&nbsp;&nbsp;</td>
        <td height="30"><%=rssite("finishRate")%></td>
        <td height="30"><%=rssite("surplusdays")%></td>
        <td height="30">操作3</td>
        </tr>
                        
    <%
    rssite.movenext
   
loop
   
end if
    rssite.close
   
set rssite=nothing
   
%>
               
        
    <%
    rszone.movenext
   
loop
   
end if
    rszone.close
   
set rszone=nothing
   
%>
    <%
    rsfarm.movenext
   
loop
   
%>
        
        </table>
        </td>
        </tr>
        </table>
   
    <%
    rsfarm.close
   
set rsfarm=nothing
   
call CloseConn()
   
%>

        </tr>
        </table>


[ 本帖最后由 hutoo 于 2014-4-18 07:57 编辑 ]
2 回复
#2
hu9jj2014-04-18 20:00
不清楚楼主要达到什么结果?三个循环嵌套,结果是三个记录集记录数的乘积,有可能就是一个不小的数字。因此造成假死或内存溢出也就不奇怪了。
#3
hutoo2014-04-19 21:27
回复 2 楼 hu9jj
其实就是一个很简单的三循环嵌套,一般情况是不会出现死循环的,不过后来检查,错不在循环,错在sql,现在正在解决不管什么错都别出现死循环。
1