stringlist相关的
procedure DelSameRecord(Var MemTable : TMemTableEh;CheckField,ValueField:String);//MemTable和table类似 Var tempDifferValue,currentValue,firstValue: String; i,j,k : Integer; CheckFieldSL,currentValueSL,firstValueSL: TStringList; iBook: TBookMark; begin try MemTable.DisableControls; CheckFieldSL := TStringList.Create; currentValueSL := TStringList.Create; firstValueSL := TStringList.Create; i := 0; MemTable.First; CheckFieldSL.CommaText := ''; //CheckFieldSL用于保存所有CheckField字段的值 while i <= MemTable.RecordCount do begin //当前的记录行 tempDifferValue := MemTable.FieldByName(CheckField).AsString; //取得CheckField字段的值 j := CheckFieldSL.IndexOf(tempDifferValue); if j >= 0 then //有重复 begin iBook := MemTable.GetBookmark; currentValue := MemTable.FieldByName(ValueField).AsString; currentValueSL.CommaText := currentValue; if MemTable.Locate(CheckField,tempDifferValue,[]) then //找到原记录,并更新ValueField的值 begin firstValue := MemTable.FieldByName(ValueField).AsString; //功能字段的内容格式为'a,b,c,d,e' firstValueSL.CommaText := currentValue; for k := 0 to currentValueSL.Count - 1 do begin firstValueSL.Duplicates := dupIgnore; //重复则放弃 ,否则保存到原纪录功能字段中 firstValueSL.Add(currentValueSL[k]); end; MemTable.Edit; MemTable.FieldByName(ValueField).AsString := firstValueSL.Text; MemTable.Post; end; MemTable.GotoBookmark(iBook); //回到之前的记录 MemTable.Delete; //删除当前的记录 end else begin //没有重复的情况,将当前的checkField的值保存到 CheckFieldSL中,并继续循环 CheckFieldSL.Add(tempDifferValue); MemTable.Next; end; Inc(i); end; finally FreeAndNil(CheckFieldSL); FreeAndNil(currentValueSL); FreeAndNil(firstValueSL); MemTable.EnableControls; end; end;