如何使表中序号连贯?(50分)

  • 主题发起人 主题发起人 mengh
  • 开始时间 开始时间
M

mengh

Unregistered / Unconfirmed
GUEST, unregistred user!
用delphi做了个小程序,有一个记录职工信息的表,paradox 7类型,有个
“序号”字段,类型是autoincrement,若删除表中的记录,则“序号”就不
连贯了,该怎么办呢?

有哪位高手肯帮帮我呢?先感谢您了!!!
 
不用autoincrement字段,换short,or long integer,自己用程序写字段值,
autoincrement没法改
 
autoincrement字段是只读的。
删除一条记录后,其它记录的值是不会改变的。
想使序号连续只有照hubdog的做自己维护吧。
 
如诸位所说,在程序中用循环修改所有记录.
 
重新人为排一下不就行了!
 
如果是单机数据库,完全可以自己生成唯一ID号.
网络多用户的就不行了.
 
呵呵, 有一个好方法:-)
建临时库, 结构和源库一样, 然后一条一条添加进去, 最后再删除源库, 把临时库
改名:-)
 
这是好方法? faint
 
按照 cytown的想法引申: 先删除该字段,再添加该字段. :-)
 
呵呵, eyes, 佩服我吧:-)
 
对于大型数据库和一些特殊数据库如支票,数据是不真正删除的,只是设一个标志
表明数据是否删除,所以使用autoincrement,要求序号连续,并且删除后无法再
次添加,对于你所说的数据库,只能不采用autoincrement,再采用cytown的办法
吧!(废话$%^&*)
 
autoincrement是用来标识记录唯一性的吧!好像和删除没什么关系.
 
TTable和TQuery都有一个属性RecNo,
(继承自TBDEDataSet)
你无须为你的表加一个“序号”字段,
直接从RecNo取就是了。
如:CurrentNum:=Table1.RecNo;//取当前序号,
如果你用PARADOX,你甚至可以:
Table1.RecNo:=10; //置当前记录,相当于Fox中的Goto 10
是不是很乖?
但是要注意,此值是动态的,下次打开表(或激活另一索引),可能不一样,
而且某些c/s数据表返回的RecNo和RecordCount可能不准(oracal,sql server)。

另外:
你为什么一定要它连续呢?
如果你是为了唯一地标识每个人,
也就是作为“主关键字”,那么连不连续有什么关系呢?
数字本生是没有意义的,
但如果象前面某位先生所说,每次改表都要修改其它记录,
如果其它表的多条记录通过此“序号”对应这些需要更新的记录,
那么你还要更新其它表。。。。。
(多表主关键字同步是一场噩梦,我曾为此伤透了心,大家如有兴趣,可以详细讨论)
就算你不嫌麻烦,这也是不规范、不科学的,有时甚至是不可能的。
最好还是保持你的主关键字终生不变、静态的。
 
按kchsun的理论,如果用PACK压缩一下会不会重新连贯呢?
 
RecNo这个东西好像很多数据库都不支持吧?
 
建议你最好不用RecNO和RecordCount,因为除了DBASE,PARADOX几乎都不支持(Interbase也不支持),如果非要连续最好在删除记录时重写所有记录的ID,增加时把
ID加1即可,不管怎样,应该作一个只有一条记录的表来维护所有表的ID.
 
多人接受答案了。
 
后退
顶部