CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  ASP

执行效率的问题,大家帮忙看看有没有好方法可以改进?

楼主zjyweiweipb(游牧人)2006-06-01 16:46:57 在 Web 开发 / ASP 提问

<!--#include   file="../conn.asp"-->  
  <head>  
  <title></title>  
  </head>  
  <body   background="../../icon/back10.jpg">  
  <p   align="center">  
  <%  
  Server.ScriptTimeOut   =   500  
        dim   num1,num2         'num1为往年欠款已交金额数,num2为本年度实际交的金额数  
        dim   hj  
        id1=1  
  dim   rs1,sql1  
  '获取用户总帐信息表中的用户ID信息  
  'sql1="select   *   from   tv1_khzz   where   tvuser_id=12683"    
  'sql1="select   *   from   tv1_khzz   where       tvuser_id<3000   order   by   tvuser_id"    
  'sql1="select   *   from   tv1_khzz   where   tvuser_id>=6000   and   tvuser_id<10000"  
  'sql1="select   *   from   tv1_khzz   where   tvuser_id>=25000   and   tvuser_id<30000   order   by   tvuser_id"      
  'sql1="select   *   from   tv1_khzz   where   tvuser_id>=31000   and   tvuser_id<34000   order   by   tvuser_id"    
  'sql1="select   *   from   tv1_khzz   where   tvuser_id>=20000   and   tvuser_id<30000"    
  sql1="select   *   from   tv1_khzz   where   tvuser_id>=30000   and   tvuser_id<40000"    
  'sql1="select   *   from   tv1_khzz   where   tvuser_id>=100000"    
  response.write   sql1  
  set   rs1=server.CreateObject("adodb.recordset")    
  rs1.Open   sql1,conn,1,3  
  do   while   not   rs1.eof   and   not   rs1.bof    
        num1=0  
        num2=0  
        hj=0  
  '根据用户ID信息,然后读取往年欠费表中已交金额数  
  dim   rs2,sql2  
  sql2="select   *   from   view_khzz_bnkk   where   tvuser_id="&rs1("tvuser_id")&""      
  response.write   sql2  
  set   rs2=server.CreateObject("adodb.recordset")    
  rs2.Open   sql2,conn,1,3  
  if   not   rs2.eof   and   not   rs2.bof   then  
  num1=rs2("bnkk")  
  end   if  
  response.write   num1&"TTTT"  
  '根据用户ID信息,读取本年应交费表中已交金额数  
  dim   rs3,sql3  
  sql3="select   *   from   view_tv1_charge_table_bnkk   where   tvuser_id="&rs1("tvuser_id")&""      
  response.write   sql3  
  set   rs3=server.CreateObject("adodb.recordset")    
  rs3.Open   sql3,conn,1,3    
  if   not   rs3.eof   and   not   rs3.bof   then  
  num2=round(rs3("bnkk"),2)  
  end   if  
  rs3.close  
  response.write   num2&"NNNN"  
  hj=cdbl(num1)+cdbl(num2)  
  dim   qf  
  qf=0  
  'response.write   rs1("tvuser_id")&"用户ID"  
  response.write   hj&"合计"  
  '对于往年欠款负数户的特殊处理,将往年欠款数更新为冲销后数据.  
  if   rs1("wnqk")<0   then  
  dim   rs4,sql4,wnqk  
  wnqk=0  
  sql4="select   *   from   khzz   where   tvuser_id="&rs1("tvuser_id")&""  
  set   rs4=server.createobject("adodb.recordset")  
  rs4.open   sql4,conn,1,1  
  if   not   rs4.eof   and   not   rs4.bof   then  
  if   rs4("sqf")<>""   then  
  wnqk=rs4("sqf")  
  else  
  wnqk=rs4("qf")  
  end   if  
  end   if  
  qf=cdbl(wnqk)+rs1("bnykk")-hj  
  response.write   qf&"欠费<br>"  
  rs1("wnqk")=wnqk  
  rs1("bnkk")=hj  
  rs1("qf")=qf  
  rs1.update  
  else  
  '--用户信息总帐表中本年扣款项数据进行更新  
  'response.write   rs1("wnqk")  
  'response.write   rs1("bnykk")  
  'response.write   csng((rs1("wnqk")+rs1("bnykk"))*100)  
  'response.write   "<br>"  
  'response.write   csng(hj*100)  
  'response.write   csng((rs1("wnqk")+rs1("bnykk"))*100)-csng(hj*100)  
  'response.write   "ffffff<br>"  
  qf=(csng((rs1("wnqk")+rs1("bnykk"))*100)-csng(hj*100))/100  
  'qf=rs1("wnqk")+rs1("bnykk")-hj  
  response.write   qf&"欠费<br>"  
  rs1("bnkk")=hj  
  rs1("qf")=qf  
  rs1.update  
  end   if  
  id1=id1+1  
  rs1.movenext  
  loop                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
  %>  
  <p   align="center"><a   href="javascript:window.close()">请关闭窗口</a>  
  <p   align="center">  
  当月收费用户:<%=id1-1%>(户) 问题点数:100、回复次数:15Top

1 楼dam520()回复于 2006-06-02 09:04:28 得分 0

帮你顶,好像楼主做物业管理系统的吗?Top

2 楼zjyweiweipb(游牧人)回复于 2006-06-04 23:29:24 得分 0

谢谢!可是没人告诉我答案,5555......Top

3 楼zys59(三仙半)回复于 2006-06-04 23:36:27 得分 0

你不把自己想达到的要求和基本思路说出来,只是贴一堆代码,谁能看得明白呀!  
  你先整理一下自己的思路,然后发出来,大家会来帮你办法的。Top

4 楼sibang(QQ:9256114)回复于 2006-06-05 07:00:39 得分 0

我建议你把这种循环修改成刷新自身页面的方式,每刷新一次传一次值到自身,让数值进行累加,每次处理一条记录,这样就不会出现循环的那种超时,速度慢的问题了Top

5 楼kafly(王者)回复于 2006-06-05 09:58:08 得分 0

这么杂,没层次,没注释,看得我头晕SATop

6 楼kafly(王者)回复于 2006-06-05 10:06:59 得分 0

看清SO,,好大一个循环~~~  
   
  建议先做个数据分析,把数据关系搞熟。  
   
  另外某些工作放到日常去处理,比如某些用户交费时判断是否还欠费,增加字段记录。  
  再根据交费周期制定SQL计划任务```Top

7 楼xxsoft(上海,今夜请将我遗忘!)回复于 2006-06-05 10:28:34 得分 0

我觉得你可以写一个存储过程,然后加入事务,这样服务器也好受些,速度也比较快Top

8 楼cqhunter(跑)回复于 2006-06-05 22:02:35 得分 0

把你的表先考虑建立视图,然后建立存储过程,然后再优化好了。Top

9 楼deninghe(毛毛虫ァ野战军->挺进中原)回复于 2006-06-05 22:22:20 得分 0

好累Top

10 楼BlueDestiny(Design Life - never-online.net)回复于 2006-06-05 22:34:42 得分 0

要改进,直接就建立sp就好了,调用用command加paremeter,加几个参数调用就行了  
   
  如果不会的话,可以搜一下,sqlserver   存储过程,  
   
  其实联机手册上说得很清楚了Top

11 楼zjyweiweipb(游牧人)回复于 2006-06-14 16:02:50 得分 0

试了一下存储过程,速度也还是慢,记录条数少的时间速度都还是挺快的哦.可记录多了就慢了,试过处理3万多条记录,3个小时处理都还未完成,只好强行结束.郁闷ing...  
  Top

12 楼zjyweiweipb(游牧人)回复于 2006-06-16 14:55:25 得分 0

各位专家快帮我看看先!liuxiaoyi666呢Top

13 楼zhuangyan2004(庄严)回复于 2006-06-16 15:00:04 得分 0

谁看谁头晕Top

14 楼yeetoo(一土)回复于 2006-06-16 15:05:57 得分 0

我看你把查询的条件都放在tvuser_id上,把这列设置为聚簇索引吧.Top

15 楼zjyweiweipb(游牧人)回复于 2006-06-16 15:43:33 得分 0

 
  其中的表结构:  
  表1:khzz---往年欠费表(即2005年用户欠款情况表)   主要是记录2005年每个用户的欠费情况[name,tvuser_id,qf,sszs,ykk]  
  name为用户姓名  
  tvuser_id为用户的ID     唯一  
  qf   05年的欠费金额        
  sszs   为用户费用已交财务人员自收  
  ykk     由银行待扣成功  
   
  表2:tv1_charge_table----本年度用户欠费表(即2006年度的费用)  
  主要字段[name,tvuser_id,up_y,up_m,total,sszs,ykk]  
  total为金额   up_y,up_m为该金额所归输的年月份.  
  sszs     为费已交财务人员自收     类型bit---1为已自收  
  ykk     为由银行待扣成功               类型bit---1为银行已扣,0为银行未扣  
   
  表三tv1_khzz即我所要生成的总帐表  
  表结构:[id,name,tvuser_id,wnqk,bnykk,bnkk,qf]  
  id   为自动增量  
  name--   用户姓名  
  tvuser_id   用户ID  
  wnqk         往年欠款金额   (即根据khzz表中的qf金额得来)  
  bnykk       本年度应扣款金额   (将表2的total金额合计)  
  bnkk         本年度实际扣款金额   (即将表1的khzz中sszs=1   or   ykk=1   和表2中sszs=1   or   ykk=1的金额相加起来  
  qf             欠费金额(即qf=wnqk+bnykk-bnkk)  
   
  在此处理过程中我设了两个视图view_khzz_bnkk     视图目的即  
  SELECT   tvuser_id,   SUM(qf)   AS   bnkk  
  FROM   dbo.khzz   a  
  WHERE   (ykk   =   1)   OR  
              (sszs   =   1)  
  GROUP   BY   tvuser_id  
   
  和视图2:view_tv1_charge_table_bnkk   目的即  
  SELECT   tvuser_id,   SUM(total)   AS   bnkk  
  FROM   dbo.tv1_charge_table   a  
  WHERE   (ykk   =   1)   OR  
              (sszs   =   1)  
  GROUP   BY   tvuser_id  
   
  存储过程的目的就是在khzz表   和tv1_charge_table表中的信息变化后能将总帐表进行更新.  
  Top

相关问题

关键词

得分解答快速导航

  • 帖主:zjyweiweipb

相关链接

  • Web开发类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo