当前位置:主页>仓库管理软件> 列表

ClientDataSet 过滤重复记录,请看里面...

记账软件版1楼: 在一个表中有如下记录:(随机的)
SGUID NAME KEMU TCODE
0000 张三 语文 ''''
0001 小王 数学 ''''
0002 小明 自然 ''''
0000 张三 自然 ''''
0000 张三 语文 ''''
0003 小李 地理 ''''
0003 小李 生物 ''''
0003 小李 化学 ''''
0003 小李 语文 ''''
。。。。

如何用 ClientDataSet 过滤出 ID 为重复的记录,得到如下结果(不用管‘KEMU’字段里面的内容)
SGUID NAME KEMU TCODE
0000 张三 语文 ''''
0001 小王 数学 ''''
0002 小明 自然 ''''
0003 小李 地理 ''''
....

2楼: 不用,distinct ,最好是用過濾的方法來實現! 如会计电算化软件下载

3楼: with ClientDataSet do begin
First;


tmpID=FieldValues[''id''];
Next;
while not Eof do begin
if tmpID=FieldValues[''id''] then
begin
Delete
if eof then //此处需要判断是因为如果是最后两条记录相同,则删除最后一条后,应结束,否则会导到两记录均被删除。
break
end
else
begin
tmpID=FieldValues[''id''];
Next;
end;
end;
经过以上循环后,相同的记录即被删除

4楼: 我是想让结果过滤出来在表格中显示出来,并且可以在表各中修改准考证号。而并不想删除其中的数据。目的是为了看这个学生在该次考试中的准考证号。还有别的方法吗?

5楼: 还有就是设置一个辅助的字段,采用类似于软删除的概念,把不想显示的记录标志成 False,需要的标示成 True, 再设置一下过滤即可。循环与上面类似

6楼: 谢谢你,你看能不能用过滤字段的方法来解决呢?
我用这句: ClientDataSet.CommandText:=''SELECT * FROM EXAMINTO WHERE TGUID=''''''+TestGuid.Text+'''''''' + '' ORDER BY SGUID'';
ClientDataSet.Open;可以查出全部记录。可以在dbGrid里面修改数据:(准考证号);


用这句
ClientDataSet.CommandText:=''SELECT distinct SGUID,TGUID,TCODE FROM EXAMINTO WHERE TGUID=''''''+TestGuid.Text+'''''''' + '' ORDER BY SGUID'';可以显示出我想要的结果,但是有一个问题就是不能在dbGrid里面修改数据:(准考证号);

我想要的结果是,可以显示出学生的姓名不重复,又能在dbGrid中修改准考证号.

我想再用Filter过滤一下,但不知道能不能行/

记账软件版7楼: 接受答案了.