procedure DelSameRecord(var MemTable: TMemTableEh; CheckFields: string); //TMemTableEh和table一样
var FFieldList,FFieldValueList : TStringList;
tempCheckFields,tempField,tempDifferValue: string;
i : integer;
begin
FFieldList := TStringList.Create;
FFieldValueList := TStringList.Create;
FFieldList.CommaText := CheckFields;
MemTable.First;
while not MemTable.Eof do
begin
tempDifferValue := ''; //存储一个或多个字段的值组成的检查项
for I := 0 to FFieldList.Count - 1 do
begin
tempDifferValue := tempDifferValue + MemTable.FieldByName(FFieldList.Strings[i]).AsString +',';
end; if FFieldValueList.IndexOf(tempDifferValue) >= 0 then //有重复值,则删除当前记录
begin
MemTable.Delete; //这里会有点问题,当重复值为最后一条时,指针会指向第一条记录
end
else
begin
FFieldValueList.Add(tempDifferValue);
MemTable.Next;
end;
end;
FFieldList.Free;
FFieldValueList.Free;
end;我就是想在MemTable中删除重复的记录,如果MemTable中只有两条记录,并且他们是相同的,MemTable.Delete删除后,MemTable.Eof为false,继续把第一条也删掉了,晕。这个怎么判断为最后一条?在MemTable.Delete;加入 if MemTable.bof也是false。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货