如何找出一个数据窗口中的重复的纪录 急 在线等

soldiera 2002-12-19 12:35:56
如何找出一个数据窗口中的重复的纪录 每条记录是由两个关键字决定的
请给一个详细的解答,谢谢!
...全文
58 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
cdqy 2002-12-24
  • 打赏
  • 举报
回复
如果你的数据库是oracle可用如下办法:

select rowid,bm,mc from a where a.rowid!=(select max(rowid) from a b where a.bm=b.bm and a.mc=b.mc);
JIANXIN_LU 2002-12-21
  • 打赏
  • 举报
回复
方法一:根据主键或索引唯一的办法,让数据库来检查。
方法二:先根据连个关键烈进行排序,让上一行与下一行进行比较,既可找出是否重复,本方法的代码如下(仅供参考):
Long llRow
String lsValue1, lsValue2, lsNextValue1, lsNextValue2

IF Dw_1.AcceptText( ) = -1 THEN RETURN -1
FOR llRow = 1 TO Dw_1.RowCount( ) - 1
lsValue1 = Dw_1.GetItemString( llRow, "Column1" )
lsValue2 = Dw_1.GetItemString( llRow, "Column2" )
lsNextValue1 = Dw_1.GetItemString( llRow + 1, "Column1" )
lsNextValue2 = Dw_1.GetItemString( llRow + 1, "Column2" )
IF lsValue1 = lsNextValue1 AND lsValue2 = lsNextValue2 THEN
MessageBox( "提示", "记录重复!" )
RETURN 0
END IF
NEXT
th820901 2002-12-21
  • 打赏
  • 举报
回复
贴出你的你的代码,要不要休息了!
soldiera 2002-12-21
  • 打赏
  • 举报
回复
我需要录入的纪录有一个是来自下拉框中的 是用户选择的 用 JIANXIN_LU(大侠)的程序 发现若第一行和第二行重复纪录则无法找到 求救 我的代码是写在itemchanged 中的 出了什么毛病呀 在线等
soldiera 2002-12-20
  • 打赏
  • 举报
回复
我的意思是在录入数据窗口中可能有重复数据 如何在确认时找出重复纪录给予提示
愉快的登山者 2002-12-19
  • 打赏
  • 举报
回复
select k_item1, k_item2 from
(select count(*) rows, k_item1, k_item2
from tablename group by k_item1, k_item2) as A
where A.rows > 1
jeking 2002-12-19
  • 打赏
  • 举报
回复
string ls_pk1,ls_pk2
long ll_nbr, ll_foundrow
ll_nbr = dw_1.RowCount()
// Remove leading and trailing blanks.
ll_foundrow = dw_1.Find("pk1 = '" + ls_pk1 + "' and pk2 =" + '" + ls_pk2 + "'" , 1, ll_nbr)
szpqq 2002-12-19
  • 打赏
  • 举报
回复
上面的想法不错
pbdesigner 2002-12-19
  • 打赏
  • 举报
回复
步骤:
1.保存原有的排序表达式
2.对数据窗口进行重新排序(用两个关键字,实际上可以是任何能决定重复的字段,设为col1和col2)
3.创建计算列repeat_tag,表达式为col1[0] = col1[-1] and col2[0] = col2[-1]
4.循环抓取repeat_tag='true'的行,即重复行
5.删除计算列repeat_tag
6.重设原来的排序规则

注意使用setredraw(false)和setredraw(true)。本算法只用一层循环
dingzhaofeng 2002-12-19
  • 打赏
  • 举报
回复
既然有主键限定,难道还有重复值?
qinqindodo 2002-12-19
  • 打赏
  • 举报
回复
我的天!如果要查我只能用两层循环找了!
dw_1.accepttext()
for ll_item = 1 to dw_1.rowcount() -1
ls_id1 = dw_1.object.id1[ll_item]
ls_id2 = dw_1.object.id2[ll_item]
for ll_find = ll_item + 1 to dw_1.rowcount()
if ls_id1 = dw_1.object.id1[ll_find ] and ls_id2 = dw_1.object.id2[ll_find ] then
dw_1.selectrow(0,false)
dw_1.selectrow(ll_item,true)
dw_1.selectrow(ll_find ,true)
dw_1.scrolltorow(ll_item)
return
end
next
next
不过这样效率奇低,如果你只是要保证修改后的数据窗口不含重复主健的话
在itemchanged时在accepttext()之前find一下你输入的值比较好吧!

chengjian 2002-12-19
  • 打赏
  • 举报
回复
这样的值在表中怎么会有?
表没有主键么?

611

社区成员

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

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