执行效率的问题,大家帮忙看看有没有好方法可以改进?
<!--#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




