CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  ASP

asp:执行搜索、更改access数据库问题

楼主wauo10()2003-09-01 08:42:43 在 Web 开发 / ASP 提问

我先搜索数据库,然后判断条件是否符合,符合条件的更新记录,但是执行很慢,等半天也没结果(2W多条记录),程序如下:  
  <%Server.ScriptTimeOut=999999  
  set   rs1=server.CreateObject   ("ADODB.RECORDSET")  
  sql1="select   tb_sell.sell_id,tb_stock.stock_table   from   tb_sell,tb_stock   where   tb_stock.stock_name=tb_sell.sell_stock"  
  rs1.open   sql1,conn,3,1  
  if   not   rs1.eof   then  
  for   i=0   to   rs1.recordcount-1  
  set   rs3=server.CreateObject   ("ADODB.RECORDSET")  
  sql3="select   "&rs1("stock_table")&".sell_price,tb_sell_list.sell_price,tb_sell_list.sell_list_id   from   "&rs1("stock_table")&",tb_sell_list   where   "&rs1("stock_table")&".material_no=tb_sell_list.material_no   and   tb_sell_list.sell_id="&rs1("sell_id")&"   and   cint("&rs1("stock_table")&".sell_price)<>cint(tb_sell_list.sell_price)"  
  rs3.open   sql3,conn,3,1  
  if   not   rs3.eof   then  
  for   j=0   to   rs3.recordcount-1  
  conn.execute   "update   tb_sell_list   set   sell_price="&rs3(0)&"   where   sell_list_id="&rs3(2)  
  response.write   "update   tb_sell_list   set   sell_price="&rs3(0)&"   where   sell_list_id="&rs3(2)  
  rs3.movenext  
  next  
  end   if  
  rs3.close  
  set   rs3=nothing  
  rs1.movenext  
  next  
  end   if  
  set   rs1=nothing  
  set   conn=nothing  
  %>  
  但用在一个5000条记录是,成功执行       请大家给点意见 问题点数:100、回复次数:9Top

1 楼tigerwen01(小虎)回复于 2003-09-01 09:04:57 得分 10

那是ACCESS数据库的一个局限吧。Top

2 楼ganq(小case,再烂的我都玩过~)回复于 2003-09-01 09:06:53 得分 10

关注~~Top

3 楼xiaobaowu(很想和你吹吹风(抵制日货))回复于 2003-09-01 09:25:34 得分 10

把第二个for中的rs3(0),rs3(2)改成他们的字段名rs3("sell_price"),rs3("sell_list_id")应该可以提高速度,但效果不一定理想,你试试吧。Top

4 楼wauo(泪尽北枝花)回复于 2003-09-01 09:36:37 得分 10

to   :xiaobaowu(很想和你吹吹风)    
       
          我试了,现在还在执行中,~~~~~~~~~~~~~~慢~~~~~~~~~~~~Top

5 楼61(儿童节快乐)回复于 2003-09-01 09:44:23 得分 10

语句改为  
  <%Server.ScriptTimeOut=999999  
  set   rs1=server.CreateObject   ("ADODB.RECORDSET")  
  sql1="select   tb_sell.sell_id,tb_stock.stock_table   from   tb_sell,tb_stock   where   tb_stock.stock_name=tb_sell.sell_stock"  
  rs1.open   sql1,conn,3,1  
  while   not   rs1.EOF    
      set   rs3=server.CreateObject   ("ADODB.RECORDSET")  
      sql3="select   "&rs1("stock_table")&".sell_price,tb_sell_list.sell_price,tb_sell_list.sell_list_id   from   "&rs1("stock_table")&",tb_sell_list   where   "&rs1("stock_table")&".material_no=tb_sell_list.material_no   and   tb_sell_list.sell_id="&rs1("sell_id")&"   and   cint("&rs1("stock_table")&".sell_price)<>cint(tb_sell_list.sell_price)"  
      rs3.open   sql3,conn,3,1  
      while   not   rs3.EOF    
          conn.execute   "update   tb_sell_list   set   sell_price="&rs3(0)&"   where   sell_list_id="&rs3(2)  
          response.write   "update   tb_sell_list   set   sell_price="&rs3(0)&"   where   sell_list_id="&rs3(2)  
          rs3.movenext  
      wend  
      rs3.close  
      set   rs3=nothing  
      rs1.movenext  
  wend  
  set   rs1=nothing  
  set   conn=nothing  
  %>  
  请讲明实现的目的,可以优化一下sql语句,你的循环嵌套太多,影响查询速度。Top

6 楼xiaobaowu(很想和你吹吹风(抵制日货))回复于 2003-09-01 09:44:23 得分 10

其实速度慢的主要原因不在数据库方面,而是字符串拼接。就是这种  
  sql3="select   "&rs1("stock_table")&".sell_price,tb_sell_list.sell_price,tb_sell_list.sell_list_id   from   "&rs1("stock_table")&",tb_sell_list   where   "&rs1("stock_table")&".material_no=tb_sell_list.material_no   and   tb_sell_list.sell_id="&rs1("sell_id")&"   and   cint("&rs1("stock_table")&".sell_price)<>cint(tb_sell_list.sell_price)"  
   
  你可以做实验,如果改成很短的,速度就可以提高很多。  
  所以你要想方法使你的字符串拼接尽可能的减少,比如原来有10个&改成5个。Top

7 楼rangwoxiao(让我笑)回复于 2003-09-01 10:11:42 得分 10

我认为速度慢的原因是由于内存里的记录数目太多,我估计你的有数万条记录同时在内存里。你可以把rst1的当前记录赋予几个变量,然后把rst1先close,然后在执行rst3,不然的话内存里由于是使用了两个循环,在记录少时问题不大,当记录多了,象你的有两完条记录,两个循环就是4万条,呵呵,不是个小数目呀,多少内存都不够呀。Top

8 楼wauo(泪尽北枝花)回复于 2003-09-01 10:55:30 得分 20

请问有没有办法分匹执行Top

9 楼wauo(泪尽北枝花)回复于 2003-09-01 11:17:08 得分 10

还有cint(tab1.sell_price)<>cint(tab2.sell_price)有没有用???  
  cint在access中能不能运行??Top

相关问题

  • ASP中执行数据库的语句
  • 急,ASP更改INTERBASE数据库时出错
  • 急,ASP更改INTERBASE数据库时出错
  • asp 数据库
  • response.Write 如何执行数据库中的ASP脚本
  • 用ASP执行数据库查询语句的问题:
  • 在线等候!请问如何用ASP更改数据库字段名!
  • ASP与数据库
  • ASP+SQL数据库
  • asp连数据库

关键词

  • 执行
  • 数据库
  • 内存
  • sql
  • sell
  • rs
  • 记录
  • tb
  • cint
  • price

得分解答快速导航

  • 帖主:wauo10
  • tigerwen01
  • ganq
  • xiaobaowu
  • wauo
  • 61
  • xiaobaowu
  • rangwoxiao
  • wauo
  • wauo

相关链接

  • Web开发类图书

广告也精彩

反馈

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