比對上下筆資料

smallmi1 2014-01-06 03:06:28
請問各位版大..從DB搜尋出的資料如附件圖...請問有何方式
可以像附件圖所示..上下筆資料一樣的話...該筆與下筆資料反黃
請各位版大指導..謝謝!!
...全文
147 点赞 收藏 8
写回复
8 条回复
DelisPhi 2014年01月18日
另外楼主可能没弄明白Eof是怎么回事,Eof是指指针底下没东西了,不能用类似 WHILE NOT eof DO BEGIN (取数据) next (取数据) END; 的形式,而只可能是 WHILE NOT eof DO BEGIN (取数据) next END; 这样才不报错的。 再另,SQL语句(Oracle)或者存储过程应该都能实现直接取上下行数据的功能,不用在程序里搞。
回复 点赞
DelisPhi 2014年01月18日
这个事取完数据再回头把颜色处理一下不就完了么。非得要同时取数据又改颜色?多累呀。 把数据先导出到Excel,再对比 FOR i:=1 to N-1 do IF (第i格=第i+1格) THEN 上色;IF 格(N-1)=格(N) THEN 上色 完事,外面加个N>1 的判断,懂的。
回复 点赞
Frank6600 2014年01月10日

adoquery20.DisableControls;
try
  Adoquery20.First;
  if not ADOQuery20.Eof then
  begin
    s2:=adoquery20.fieldbyname('sField2').AsString;
    s3:=adoquery20.fieldbyname('remark').AsString;
  end;
  ADOQuery20.Next;
  while not Adoquery20.Eof do
  begin
    s4:=adoquery20.fieldbyname('sField2').AsString;
    s5:=adoquery20.fieldbyname('remark').AsString;
    if(s2=s4) then
    begin
       ListBox1.Items.Add(s3);
       ListBox1.Items.Add(s5);
    end;
    Adoquery20.Next;
  end;
finally
  adoquery20.EnableControls;
end;
回复 点赞
smallmi1 2014年01月09日
回覆大大....我寫了以下語法..但是遇到一個問題 就是最後一筆資料會讀取2次...變成最後一筆資料會誤判重覆 找不出哪裡有問題..請大大指導...謝謝!!

 adoquery20.DisableControls;
    try
     Adoquery20.First;
          while not Adoquery20.Eof do
          begin
         s2:=adoquery20.fieldbyname('sField2').AsString;
         s3:=adoquery20.fieldbyname('remark').AsString;
      Adoquery20.Next;
       s4:=adoquery20.fieldbyname('sField2').AsString;
       s5:=adoquery20.fieldbyname('remark').AsString;
     if(s2=s4) then
      begin
        ListBox1.Items.Add(s3);
        ListBox1.Items.Add(s5);
      end;
         end;
          finally
      adoquery20.EnableControls;
       end;
回复 点赞
Frank6600 2014年01月08日
差不多就是楼主写的那样。 只是做以下修改: 1.在AdoQuery.AfterPost事件里处理; 2.先DisableControls,记住目前位置,处理完后回到目前位置(用Dataset.bookmark),最后EnableControls; 3.记住目前的值(你的代码里已有),Prior到头,再Next到尾。 4.EnableControls会帮你Update Grids,从而上色。
回复 点赞
smallmi1 2014年01月07日
回覆大大..我的想法是..建立一個虛擬欄位..然後上下筆資料比對.. 如果一樣的話...就在上下筆資料的虛擬欄位填入值... 目前卡在不知如何進行上下筆資料比對...請大大指導...謝謝!! 我在ADOQuery20CalcFields中寫了以下語法..但發生錯誤

while not Adoquery20.Eof do
  begin
    s1:=adoquery20.fieldbyname('sField2').AsString;
    Adoquery20.Next;
    ss:=adoquery20.fieldbyname('sField2').AsString;
      if(ss=s1)  then
        begin
          DataSet.FieldByName('s4').AsString:='0';
        end;
  end;
回复 点赞
lhy 2014年01月06日
或者响应自绘消息时处理一下。
回复 点赞
sololie 2014年01月06日
找出同样的用一个for 循环不就完事了,循环时记录相同的item的索引下标,然后把对于下标的设置下背景色 修改背景色可以把canvas的brush指定一个颜色,然后fillrect填充这个颜色,最后用textout把文字画上去
回复 点赞
发动态
发帖子
语言基础/算法/系统设计
创建于2007-08-02

3419

社区成员

3.3w+

社区内容

Delphi 语言基础/算法/系统设计
社区公告
暂无公告