怎样修改、删除键值重复的记录?没有主键、没有唯一索引。(100分)

  • 主题发起人 主题发起人 yvping
  • 开始时间 开始时间
Y

yvping

Unregistered / Unconfirmed
GUEST, unregistred user!
表: year varchar(4)
month varchar(2)
ohers....
没有定义任何KEY!(Oracle)
现在发现Query组件、Updatequery组件没法修改、删除year month值重复
的记录,最好是不要删除数据,而是修改month year的值,就可以省去重新录入的麻烦了,(对比PB:PB中是出现重复是可以修改、可以删除的,但是,delphi完全是执行 SQL语句:
update MYTable
set
YEAR = :YEAR,
MONTH = :MONTH,
...
where
YEAR = :OLD_YEAR and
MONTH = :OLD_MONTH

delete from MYTable
where
YEAR = :OLD_YEAR and
MONTH = :OLD_MONTH

就不支持重复键值记录的修改、删除,是不是PB中使用了记录的另外的ID标志?)

多谢!
 
这么会这样呢?若是完全重复的记录就没办法啦,若不是完全重复,可以在database desktop中修改
 
设置修改记录为一条,在SQL SERVER中可用set rowcount 1。
这样虽然每次只能修改一条重复记录,但可循环进行,直到你满意为止。
 
如果ORACLE7有记录号的,也可以用:
delete from mytable where recderno = CurRecoderno
之类的命令搞定呀。
不知DELPHI5该怎么弄?Foxpro一般就是采取对准记录号的方式,PB不知是不是
也用记录号?
 
有没有办法可以直接用Table/Query组件进行修改/删除?
因为现在已经录入了很多数据,只能看到后再修改,另外,我也不想加判断重复记录的
程序,麻烦。错了就删,这样更简单!
 
看到纪录后,直接删除行吗?
 
哈哈我刚刚也碰到和你类似的问题但我是用一个笨办法来解决的可能说出来各位大虾见
笑了...不过我也是没办法当时想不出更好的办法...加上我又是新手...
你可以先把Server上table中的所有记录"拿"到Query1或Table1中,对其进行操作得出你想要
的结果这应该不困难吧,然后清空Server上table里的所有记录,再用ApplyUpdate
其实这样做也是一次性的以后你在记录录入之前对Server加个搜索就行了这样就省许多事了

希望我的建议对你有帮助
 
修改表结构,增加一列,该列为自动增长的,然后根据该列进行删除操作,
完毕后再将该列删除。

在 Delphi 5.0 和 MSSQL SERVER 7.0上调试通过。
 
如果Oracle有RowID这样的系统变量,问题就好办了。否则就只有在Oracle 的
SQL plus里删除所有重复记录,因为在delphi中删除不了。我是这样写的:
Qry_1.delete;

if Qry_1.UpdatesPending then
Database.ApplyUpdates([Qry_1]);
一旦有键值重复的记录,Delphi就出错。
另:Oracle没有自动增长列。

 
ORACLE 7.X 应该不存在这个问题,
ORACLE 8.X中似乎有BUG,在TABLE.INDEXFIELDNAMES中加入一列(如第一列)试试
 
问题有解.
Oracle有一个系统默认的标志字段RowID,
在Query组件的语句中加上就可以啦:select rowid,.... from...
然后再修改UpdateQuery组件
OK!已通过.
 
cheetahcj大虾:
"可以先把Server上table中的所有记录"拿"到Query1或Table1中,对其进行操作得出你想要
的结果"
可否说得明白一点,多谢!

 
我的意思是是对Query1.sql写入select * from (Server上的table),将记录全部般到Query1
中,然后对Query1中的记录进行处理,出唯一的记录,接着清空Server上table中的记录,把
Query1中处理过的记录般回进去,用ApplyUpdate

 
1.如果记录数不多的话,可以用[cheetahcj]的办法。
2.如果记录数很多,则应该采取其他的办法:
根据在表中删除符合条件的记录,条件为: where 所有字段
然后在插入一条合适的记录:insert into
 
多人接受答案了。
 
后退
顶部