简单问题,60分给了,kuai lai (60分)

  • 主题发起人 主题发起人 xiaolaoda
  • 开始时间 开始时间
X

xiaolaoda

Unregistered / Unconfirmed
GUEST, unregistred user!
恩人呀!!听我说。。。。
表datt中,有100条纪录,表中有字段id,name,如下图:
id name
1 xiaolaoda
2 dongdong
. .
. .
100 xizi
现在我删掉id 为45的纪录,为什了最后一条纪录的id还是100,而不是99,该怎么做。(此问题不允许断号,例如45
删了,那46号将变为45号,直到100号变为99号)。
还有就是程序录入时,种种原因,造成了漏号,例如在上表输入100个纪录,可能就漏了id为54,77等,
我要找出漏掉的数据怎么找。请给代码!!(此问题允许断号)
 
这很正常的断号而已,
难道你的程序是不充许断号吗???
 
晕`~你删掉的只是其中的一条记录嘛`~其它记录当然没有改变了`~
不过你说的问题好象写触发器可以解决吧`~嘻,我不是高手`~你等别人来告诉你吧`~
 
允许,我现在要找出来,因为我在做帐务管理,
对于漏掉的号,也必须找出来,并且显示出来让客户知道。
 
你用的是不是access?而且是自动编号?
这样就没有办法了,呵呵
最好是自己手工加ID,先全表扫描查是不是有漏号,如果有的话就用这个漏的(把它保存
到一个变量中),如果没有就用最大的ID
至于第一个问题,只好写一段代码updateID号码了。
 
1.
如果用自动增长字短的话是不会自动排号的。只能手工写程序控制了。
2.
dataset.close;
dataset.commandtext := 'select id from datt order by id';
dataset.open;
dataset.first;
for i:=1 to 100 do
begin
if dateset.fieldbyname('id').asinteger <> i then
showmessage('lost the id'+inttostr(i));
end
 
自己另用一个字段,不要用自动增长的,那样的只会如此
 
ID最好用程序控制自动编号,可以写一个这样的函数,我就有一个,用了一年了
几乎遇到这样的问题想都不用想,直接调用。
这样做就不会出现漏号。
至于你要删除一条,后面的ID跟着改变的话,那是一个很耗资源的动作。
 
另加一个标记字段用于记录是否被“删掉”
 
1、取数据的时候你可以
select rownum,name from table order by id
这样看起来就没有断号了,不过不推荐,oracle上测试

2、要求有一张表b有全部的id号
select b.id from b
where b not in (select a.id from a)
 
“要自动变,就用记录号”
 
谢谢大家!!
给分了,我第一来这,怎么给分,是不是,点接受答案,并分配积分
,在点“发出”按纽!!
 

Similar threads

后退
顶部