如何快捷的删除datawindow中重复的记录,只留相同记录的一条?

tiantianpb 2002-07-24 09:36:18
如题谢谢!
...全文
255 44 打赏 收藏 转发到动态 举报
写回复
用AI写文章
44 条回复
切换为时间正序
请发表友善的回复…
发表回复
whchh 2002-07-25
  • 打赏
  • 举报
回复
楼上说的不错~
llitcwl 2002-07-24
  • 打赏
  • 举报
回复
tiantianpb(阿九) :
过滤肯定是有效的,我是经常用的,是不是你之前没排序?
还有dw_1.rowscopy(1,dw_1.filteredcount(),filter!,dw_1,1,delete!)如果不执行的话,数据也会保存进数据库的(因为数据的状态是newmodifed!),所以你只能做一个小窗口执行以上代码.
tiantianpb 2002-07-24
  • 打赏
  • 举报
回复
哈哈哈,我的星是骗来的,并不能代表我的水平!,望见谅!sorry to all boys and girls!
但我的数据已经导入到数据库的表中了,并不想写什么代码或存储过程来完成这样的功能的。
我用llitcwl(中国龙)的方法,就是无法过滤多余的数据,过滤前和过滤后的记录数相同的,但在ms sql server中设置主键是提示数据重复,无法创建主键的
liulee 2002-07-24
  • 打赏
  • 举报
回复
先全部导入到无主键表,然后select ... group by 或 distinct到另外的表单即可,不用编码的。
freshman113 2002-07-24
  • 打赏
  • 举报
回复
用排序的方法速度最快:
//如比较是否重复的字段为: id_col
Long i, ll_Cnt
String ls_Id_Old, ls_Id_New

dw_1.SetSort ("id_col A")
dw_1.Sort ()

ll_Cnt = dw_1.RowCount ()

For i = 1 To ll_Cnt
ls_Id_New = dw_1.GetItemString(i, "id_col")
If ls_Id_New = ls_Id_Old Then
dw_1.DeleteRow (i)
ll_Cnt --
Else
ls_Id_Old = ls_Id_New
End If

Next

用Find函数查找删除的方法比较直观但速度较慢
iamxia 2002-07-24
  • 打赏
  • 举报
回复
看来错了,没看见上文
hzhxxx 2002-07-24
  • 打赏
  • 举报
回复
使用 Sql Server 等的数据库后台有一类 index 可以把数据库的重复记录删除!
hzhxxx 2002-07-24
  • 打赏
  • 举报
回复
使用 Sql Server 等的数据库后台有一类 index 可以把数据库的重复记录删除!
iamxia 2002-07-24
  • 打赏
  • 举报
回复
???

菜单:

rows --> suppress repeating values...

然后选全部
hzhxxx 2002-07-24
  • 打赏
  • 举报
回复
你可以在导入时使用数组一类的,把相同的删除,再导入

这程序不难,带星的
llitcwl 2002-07-24
  • 打赏
  • 举报
回复
做一个窗口就行了
filter语句在设计时是有效的,但是问题是dw_1.rowscopy(1,dw_1.filteredcount(),filter!,dw_1,1,delete!)不能执行,所以他还是保存进数据库了。
tiantianpb 2002-07-24
  • 打赏
  • 举报
回复
to : llitcwl(中国龙) :我只是想将设计时,datawindow中导入的txt文件中重复的记录删掉,再保存到database中,但用你的filter()表达式并没有效果的
tiantianpb 2002-07-24
  • 打赏
  • 举报
回复
to : llitcwl(中国龙) :我只是想将设计时,datawindow中导入的txt文件中重复的记录删掉,再保存到database中,但用你的filter()表达式并没有效果的
RechardXc 2002-07-24
  • 打赏
  • 举报
回复
如果有单字段主键,按照楼上兄弟门的方法,如果没有单字段主键或想比较其它几个列是否重复,可以创建一个临时单字段‘主键',加一个计算列,表达式为string(比较列1)+string(比较列2)+string(比较列3)+...,删除的时候只比较该计算列就行了
RechardXc 2002-07-24
  • 打赏
  • 举报
回复
如果有单字段主键,按照楼上兄弟门的方法,如果没有单字段主键或想比较其它几个列是否重复,可以创建一个临时单字段‘主键',加一个计算列,表达式为string(比较列1)+string(比较列2)+string(比较列3)+...,删除的时候只比较该计算列就行了
wangpeilei_403 2002-07-24
  • 打赏
  • 举报
回复
阿九同志,论等级我得叫你什么了,我觉得我的算法不难理解,具体语句自己写应该没问题,我再说一便,保存数据时触发
1,先排序。
2,用一个变量(i)指向当前行,另一变量(j)指向比较行,当i和j行的数据不相等时,比较结束,相等时,删掉此行,继续和下一行比较。以上为一次循环。
ok???
llitcwl 2002-07-24
  • 打赏
  • 举报
回复
几行代码就行:
dw_1.setsort(主键列名)
dw_1.sort()
dw_1.setfilter(" if( 主键列名 [-1] = 主键列名 [0],0,1) =1")
dw_1.filter()
dw_1.rowscopy(1,dw_1.filteredcount(),filter!,dw_1,1,delete!)
dw_1.update()
tiantianpb 2002-07-24
  • 打赏
  • 举报
回复
以上的答复,我都不会,请详细一点,200分呢!
orient_yang 2002-07-24
  • 打赏
  • 举报
回复
三楼的方法就可以啊!
wangpeilei_403 2002-07-24
  • 打赏
  • 举报
回复
可否这样:
先排序,外修环((i=j=1)i,j都指向第一条纪录,j++,比较(只比较主键列即可),内循环(if 相等,删掉j列 j++ )直到不相等 i++ J=i))到i=rowcount!
加载更多回复(24)

611

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder DataWindow
社区管理员
  • DataWindow社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧