各位:
  我在向Access2000中添加记录时,发现速度越来越慢!需要添加的记录为3281,前面执行时速度还可以接受,可是当添加了大约1200条记录后,速度陡减,简直无法忍受!
代码如下:while not eof do
  begin
    with ADOQueryExe do
    begin
      close;
      sql.Clear ;
      sql.Add('select zkzh from zkz where bmxh=:bmxh and groupID=:groupID and Passed="0"');
      bmxh:=ADOQuerySel.fieldbyname('bmxh').AsString ;
      parameters.ParamByName('bmxh').Value :=bmxh ;
      parameters.ParamByName('GroupID').Value :=ADOQuerySel.fieldbyname('groupID').Value ;
      open;
      if recordCount=0 then
      begin
        zkzh:=copy(bmxh,1,8)+GetSerial(ADOQueryexe);
        //zkzh,xm,Xbdm,Mzdm,Csny,Dw,Xxlbdm,Bz,PassEd,bmxh,GroupID        sql.Clear ;
        sql.Add(sqlIns);
        parameters.ParamByName('zkzh').Value :=zkzh;
      end
      else
      begin
        sql.Clear ;
        sql.Add(sqlUpd);
      end;
      parameters.ParamByName('xm').Value :=ADOQuerySel.fieldbyname('xm').AsString  ;
      parameters.ParamByName('Xbdm').Value :=ADOQuerySel.fieldbyname('Xbdm').AsString  ;
      parameters.ParamByName('Mzdm').Value :=ADOQuerySel.fieldbyname('Mzdm').AsString ;
      parameters.ParamByName('Csny').Value :=ADOQuerySel.fieldbyname('Csny').AsString ;
      parameters.ParamByName('Xxlbdm').Value :=ADOQuerySel.fieldbyname('Xxlbdm').AsString ;
      parameters.ParamByName('PassEd').Value :=ADOQuerySel.fieldbyname('PassEd').AsString ;
      parameters.ParamByName('bmxh').Value :=ADOQuerySel.fieldbyname('bmxh').AsString ;
      parameters.ParamByName('Dw').Value :=ADOQuerySel.fieldbyname('dw').AsString ;
      parameters.ParamByName('Bz').Value :=ADOQuerySel.fieldbyname('bz').AsString ;
      parameters.ParamByName('GroupID').Value :=ADOQuerySel.fieldbyname('GroupID').AsString ;
      try
        execsql;
        frmpro.ProgressBar1.Position :=ChangeCount;
        frmpro.leb_Name.Caption :=ADOQuerySel.fieldbyname('xm').AsString ;
        frmpro.lab_ID.Caption  :=ADOQuerySel.fieldbyname('bmxh').AsString+'  '+ADOQuerySel.fieldbyname('GroupID').AsString+'组';;
        frmpro.Repaint ;
      except
      begin
       frmPro.Destroy ;
       showmessage('数据库操作失败,无法生成考生准考证号!');
       exit ;
      end;
      end;
    end;
    ChangeCount:=ChangeCount+1;
    next;
  end;采取的措施如下:
1.创建索引:Create index iZkzh on zkz(zkzh)
2.CacheSize=1000
3.设置ADOQuery.PrePare:=true各位有何高见?
P4 2.4G Ram=256M Disk=80G

解决方案 »

  1.   

    Access的速度就是慢! 换个数据库吧
      

  2.   

    我以前也碰到过, 后来就再也没有用Access了 用SQL Server
      

  3.   

    把SQL语句改为静态的放到ADOQuery的SQL中, 不要在运行的时候动态的Clear和Add, 这样可能会提高点儿速度, 你试试看, 如果在程序中必须修改SQL的话, 最好就再添加一个ADOQuery控件, 应该会提高速度的
      

  4.   

    把SQL语句改为静态的放到ADOQuery的SQL中, 不要在运行的时候动态的Clear和Add, 这样可能会提高点儿速度, 你试试看, 如果在程序中必须修改SQL的话, 最好就再添加一个ADOQuery控件, 应该会提高速度的
      

  5.   

    整理一下数据库看看,也许快一点。不过,最好还是换个数据库,SQL Server会快一些,而且从ACCESS转换到SQL Server平台十分方便快捷。
      

  6.   

    在运行的时候动态的Clear和Add 肯定会减慢速度要是数据量同时操作的太大的话你就换数据库吧
      

  7.   

    to nhdj(柳柳荷叶清清水):  
    在插入新记录时好像不需要使用索引吧,具体有用法吗,愿闻其详!
      

  8.   

    flymoon(花儿月) 
    把SQL语句改为静态的放到ADOQuery的SQL中, 不要在运行的时候动态的Clear和Add, 这样可能会提高点儿速度, 你试试看, 如果在程序中必须修改SQL的话, 最好就再添加一个ADOQuery控件, 应该会提高速度的
    ==============================================================================
    你这是全抄啊,嘿嘿,亏你还改写上来,分也不是这么混的晒,跟小虫的一字不差~_~:》
      

  9.   

    用SQL Server吧,速度快多了