!!!!!!!赶在五一的之前升级了,祝朋友们五一快乐 8!!!!!!!!

解决方案 »

  1.   

    一、表结构1、表TK结构:
    N1:string; ->名称
    N2:string;->内容
    t11:string:->类型
    tk表存有记录30000条。2、表f-leixin结构:
    F1:string;->标识名
    leixin:string:->类型(有200个不同类型)
    YTI:integer;->记录数
    LX表存有不同“类型”的记录200条。3、我用ADO连接ACCESS数据库。
    二:要实现的目的。
    我想把TK表里符合f_leixin表类型的记录全部查询出来, 并将查询结果进行计数, 然后将值存入
    f_leixin表的YT字段。
    三: 我自己的编程
    我主要是用加循环遍历的方式,用一条SQL语句,先进行查询统计、替换,然后循环f_leixin表,
    这样查询的字段值就会根据随着LX表的指针移动进行变动,就实现了上述要求。 
    代码如下:
    while not adotable2.eof do begin
           lx1:=adotable2.fieldbyname('leixin').AsString;
           lx1:=trim(lx1);
           adoquery2.Close;
           adoquery2.SQL.Clear;
           adoquery2.sql.add('select count(*) as lnfen2 from tk where t11 like  ''%'+lx1+'%''  group by t11');
           adoquery2.Open;
           lnfen2:=adoquery2.fieldbyname('lnfen2').asinteger;
           adotable2.Edit;
           adotable2.fieldbyname('yti').asinteger:=lnfen2;
           adotable2.Next;
           end;
           end;
    四:问题???]
    用我自己的代码很慢,很慢。在网上别人告诉我这样可以:begin
    adotable2.Open;
    adotable2.edit;
    adoquery2.Close;
    adoquery2.SQL.Clear;
    adoquery2.sql.Add('update  f_leixin set yti=(select count(*) from tk where  f_leixin.leixin=tk.t11 )');
    ADOQUery2.ExecSQL;
      adoquery2.sql.clear;
      adoquery2.sql.add('select * from f_leixin');
      adoquery2.open;
    END;
    但是执行不了好像ACCESS数据库不支持此SQL语句。请高手帮我想个办法,我搞了一夜啊。!!!!! 
     
    来自:xzh2000, 时间:2003-4-30 8:36:00, ID:1816056 
    终于搞清楚你要做什么啦,
    其实问题时将表结构的创建语法及少许测试数据贴出来大家会更乐意帮你测试按常规猜,你的TK.tt1与f_leixin.leixin内容是一样的。update f_leixin 
     set yti = (select count(*) from tk group by tt1
    where f_leixin.leixin=tk.tt1)update  f_leixin 
      set yti=(select count(*) from tk where  tk.t11 = f_leixin.leixin )因为是ACCESS,测试性能的方法很麻烦。 
     
    来自:20082008, 时间:2003-4-30 8:47:00, ID:1816097 | 编辑 
    用哪一句都不行呀??我在ACCESS里调试:
    提示不能在查询数据里进行更新。原因或者是主建冲突,
    或者是锁定冲突;
    或者是有效性冲突;
    但是我的TK表里有ID,F-LIXIN表里我把ID删除了也不行啊。???你帮我吧。
     
     
    来自:xzh2000, 时间:2003-4-30 8:51:00, ID:1816113 
    那可能ACCESS就不支持这种操作,
    用SQL吧。
     
     
    来自:20082008, 时间:2003-4-30 8:54:00, ID:1816129 | 编辑 
    可是我的后台数据库用的是ACCESS数据库啊。我不想转呀你帮帮UP以下对了怎么给你分呀。好像ACCESS数据结果统计出来了就是不知替换的问题???
    你帮帮我吧我很急的???
     
     
    来自:卜泰男, 时间:2003-4-30 9:02:00, ID:1816172 
    UP!
     
     
    来自:20082008, 时间:2003-4-30 9:07:00, ID:1816213 | 编辑 
    有一个网友告诉我这样好像可以:
    select a.*,(select count(*) from tk where a.leixin=tk.t11) as c from f_leixin a但是在在某些方面F—LIXIN表新增了一个字段C,它把所有的统计结果放在C里面不能放在指定字段YTI里面呀????
     
     
    来自:trf, 时间:2003-4-30 11:00:00, ID:1816834 
    Update 语句应该这样写:
    'update  f_leixin,tk set yti=(select count(tk.*) from tk where  f_leixin.leixin=tk.t11) 
     
     
    来自:20082008, 时间:2003-4-30 11:06:00, ID:1816857 | 编辑 
    我用的是ACCESS数据库update  f_leixin,tk set yti='select count(tk.*) from tk where  f_leixin.leixin=tk.t11'运行不了呀。
     
     
    来自:trf, 时间:2003-4-30 11:48:00, ID:1817133 
    对不起,写错了,应该:
    'update  f_leixin,tk set f_leixin.yti=(select count(tk.*) from tk where  f_leixin.leixin=tk.t11)
     
     
    来自:20082008, 时间:2003-4-30 11:58:00, ID:1817168 | 编辑 
    你再帮我试一下在ACCSSE里不能运行提示:
    select count(tk.*) from tk  where  f_leixin.leixin=tk.t11有错误啊
     
     
    来自:trf, 时间:2003-4-30 12:03:00, ID:1817195 
    试一下
    'update  f_leixin,tk set f_leixin.yti=(select count(tk.t11) from tk where  f_leixin.leixin=tk.t11)
     
     
    来自:20082008, 时间:2003-4-30 12:08:00, ID:1817220 | 编辑 
    还是不行啊是不是ACCEES不支持啊。运行后提示不能更新查询结果呀???
    大哥你帮我UP以下吧求你了。
     
     
    来自:trf, 时间:2003-4-30 12:36:00, ID:1817331 
    对不起,应该这样,先创建一个表T1,存放满足下面条件记录:
        select tk.t11,count(*) as A from tk,f_leixin on tk.t11=f_leixin.leixin
            group by tk.t11
    然后Update语句:
      'update  f_leixin,T1 set f_leixin.yti=T1.A where f_leixin.leixin=T1.t11 
     
    来自:20082008, 时间:2003-4-30 13:05:00, ID:1817424 | 编辑 
    第一句有问题执行不了
     
     
      

  2.   

    to  ghyghost (著名关心CSDN结贴率爱国主义人士代表)  我还得谢谢你!
      

  3.   

    哎,看来我也要泡一段时间渡成Double Star了。