我的TK表里面有20000 条记录,我的类型f_leixin表里是查询的种类共有40  记录
我想从TK表里查询统计符合类型表里种类的记录数, 比将统计的数存入类型表里,下面的代码能够实现,,可是速度非常慢。
请高手帮我成化以下???
请教有没有更好的解决办法???
在线begin
       adotable2.First;
       while not adotable2.eof do begin
       lx1:=adotable2.fieldbyname('leixin').AsString;
       adotable2.edit;
       adotable2.Post;
       adoquery2.Close;
       adoquery2.SQL.Clear;
       adoquery2.sql.add('select count(t11) as lnfen2 from tk where t11 like ''%'+lx1+'%''');
       adoquery2.Open;
       lnfen2:=adoquery2.fieldbyname('lnfen2').asinteger;
       adotable2.Edit;
       adotable2.fieldbyname('yti').asinteger:=lnfen2;
       adotable2.Next;
       end;
       end;

解决方案 »

  1.   

    用一条语句可以实现
    你的表结构是什么?
    update f_leixin  Set yti= (select count(t11) as YTI from tk where t11 like '%'+leixin+'%') 
    在SQl server上调试通过
      

  2.   

    我用的是ADO ACEESS用一条语句不用加循环能不能讲的具体一点。谢谢!!!!
      

  3.   

    我上面的语句就是可以更新的,sql server中可以,pardox也可以。在ACCESS中就不行。
      

  4.   

    我搞不懂的是,你的f_leixin  好像是一个参数表,为什么有一个统计字段?
    如果你的f_leixin  表不做统计,而由另外的表来统计,用insert就可以绕过不能同时更新多条记录这个限制了
      

  5.   

    我的F—LEIXIN有五个统计字段
    其中有一个“LEIXIN”字段是存放所有类型的,共有18个记录的类型不重复;
    我的TK表里有10个字段。
    T11是类型字段,不过是重复类型的20000条记录;
    我要在达到的目的就是通过查询统计出符合18个类型的记录有多少条然后求和后分别存入L——EIXIN表中的记录。
      

  6.   

    where t11 like ''%'+lx1+'%'''难道tll和类型不是等于关系吗?
      

  7.   

    既然是统计表,就可以用insert
    速度也比较快。可以用一条语句把所有的统计信息统计出来吧?那就可以insert 了。
    举个列子吧:f_leixin表中有leixin字段。然后我建立了一个统计表。tongji,有字段类型和YTI
    Tk表是个流水表吧,有一个字段tll。
    我要统计的时候就依次执行下面的SQl语句
    1、delete from tongji
    2、insert into tongji(leixin,YTI)values(select tll as leixin,count(tll)as Yti  from Tk group by Tll)
    最后,统计表里面就有了你想要得东西,ACCESS支持的SQl 比较少。也只能这样了,如果发现速度慢,最好是优化数据库接口,很有帮助的
      

  8.   

    update tongji r,(select tll as leixin,count(tll)as Yti  from Tk group by Tll) as t
    set r.yti=t.Yti
     where r.tll=t.tll//---记着加分
      

  9.   

    我说的这样的也许我没有讲清楚我用一个表:tk  有20000 条记录,
    里面有字段:t11(名称),t12(内容),t13(题目类型,是重复的记录),
    有一个表:f_lexxin 有18 条记录,每条记录一个类型。
    里面有字段:leixin ,NU(存入统计的结果),要实现的是这样的
    如果按照F—LEIXIN表里的类型,,把TK表里的类型统计出来。 然后存入F—LEIXIN表里。
    F—LEIXIN表里的记录不能重写,,只能更新字段NU
    帮帮我吧。
      

  10.   

    update f_lexxin  r,(select tl3 as leixin,count(tl3)as Yti  from Tk group by Tl3) as t
    set r.nu=t.Yti
     where r.leixin=t.leixin//---记着加分
      

  11.   

    我是个初学者上边的代码怎么没有ADOQUERY呀。
    能不能写的具体一点,请高手帮我一下。
    如果统计的条件有两个怎么写呀。
    谢了
      

  12.   

    我给你发一个源程度过不,,你帮我看以下好不好。
    QQ:文件名:TKSJ01.PAS
      

  13.   

    with adoquery do
     begin
      close ;
      sql.text:='update f_lexxin  r,(select tl3 as leixin,count(tl3)as Yti  from Tk group by Tl3) as t  set r.nu=t.Yti  where r.leixin=t.leixin'
      execsql ; end;
      

  14.   

    哥们,20000条记录你用ACCESS是不是太慢了点啊,注意别崩掉,这样查询你的代码一定要写的很好,不然特慢