用了一个TDBGrid:DBGrid1,
和一个TADOQuery:ADOQuery1。举例查询的结果如下:Name      Class
------------------
aaaa      2
bbbb      1
cccc      3
dddd      1
eeee      2
ffff      1
......问题是:
若现在选定的是bbbb,如何才能得到下一条记录,该记录的Class与bbbb的Class相同??如:先得到dddd,再得到ffff,再......本人新手,对上面2个控件不熟悉,望各位老大给予帮助。谢谢!!!

解决方案 »

  1.   

    ADOQuery1.Filter:='Class=1';
       ADOQuery1.Filtered:=True;
       ADOQuery1.FindNext;
      

  2.   

    谢谢!
    关键是我不是要连续得到全部是class=1的,期间可能穿插class=2或者3的。
    例如:对每一个对象的处理时间是不一样的,比如有些是1分钟,有些是5分钟,等等。现在teacher1选定的是bbbb,对bbbb进行处理,
    在teacher1处理bbbb期间,teacher2又选定了aaaa,对aaaa进行处理;
    在teacher1处理完bbbb之后要得到dddd,并对dddd处理;
    在teacher1处理完dddd之后要得到ffff,并对ffff处理;
    在teacher2处理完aaaa之后要得到eeee,并对eeee处理;
    ......即每一个teacher都只能处理与其第一个处理的对象同一个class的,直到该class全部处理完毕。不知道这样说的是不是很清楚??谢谢!
      

  3.   

    数据表再增加一个布尔型字段用于标识该记录是否处理过,默认值为false,处理过则修改为True;Name      Class    Done
    ------------------------
    aaaa      2        false
    bbbb      1        false
    cccc      3        false
    dddd      1        false
    eeee      2        false
    ffff      1        false
    ......use Variants;//窗体首部use部分包含Variants var 
      CurClass:integer;如果是teacher1,则CurClass:=1;
    如果是teacher2,则CurClass:=2; if ADOQuery1.Locate('class;done',VarArrayOf([CurClass,false]),[])  
     then
     begin
       开始处理语句;
       处理完后把该条记录Done字段修改为True;
     end;
      
      

  4.   

    抱歉,我漏说了很重要的一点,就是对象的处理不是互斥的,而是共享的,即在teacher1处理一个对象的同时,其它的teacher也能同时处理该对象。所以上述2个方法都不可行。感觉DBGrid不是很灵活,现在尝试用TListView来显示数据,在选定一项的时候,要遍历ListView来获得该项以下同class的对象,把所有对象保存起来,在处理完了一个之后再到下一个,不知这样效率是不是很低?对象的总数不多,100个以内的。
      

  5.   

    做个变量控制,处理完一个,查找下一个同class的,不用换listview
      

  6.   

    class 的值有多少种?可以声明一个布尔型数组mm,默认为false,用来保存class值为i的那条记录是否有人在处理,当teacher1第一次处理class 为1的纪录时,将mm[1]设为true,当teach2处理纪录时,首先判断他选择的是不是class 为1地记录,如果是,则提示该记录有人在处理,如果没有,则将该teach2选择的纪录对应的mm[i]设为true;再加上
       ADOQuery1.Filter:='Class=i';
       ADOQuery1.Filtered:=True;
       ADOQuery1.FindNext;
    不知道能不能实现你的要求?
      

  7.   

    麻烦的是 ADOQuery1.FindNext或者其它的查询ADOQuery1.Next即依赖于DBGrid中的选定项,又会自动改变DBGrid中的选定项,这就使得程序很难控制找到下一个同class的,必须要将选定项还原到某个teacher的当前处理项后才能找到下一项。
    例如以下处理顺序:
    teacher1选定并处理bbbb....
    teacher2选定并处理aaaa....(这时选定的是aaaa)
    teacher2处理完aaaa,并设置Filter和用FineNext找到并处理eeee....(这时DBGrid会自动选定eeee)
    teacher1处理完bbbb,这时当前选定是eeee,必须要还原选定项为bbbb后才能用Filter和FindNext来找到dddd,若不还原的话就找到的是ffff,而漏掉了dddd。所以上面的控制不是不可以实现,而是比较复杂。