300分,谁要?有关自动增量!!!!(300分)

  • 主题发起人 主题发起人 小雨天
  • 开始时间 开始时间

小雨天

Unregistered / Unconfirmed
GUEST, unregistred user!
有一张PARADOX表,有一字段NO,类型为(+),且为关键字段。
记录的添加删除变化很大,NO字段的值有增无减,请问NO字
段的值会不会到了一定的程度就溢出,该怎么处理?
 
那是一个32位的数值,应当可以很够用的,应当是上亿了吧?!
如果不能够满足使用需要,可以不使用自增类型,而使用Integer
并且自己管理编号.
 
实现字段的自增,也可以不用自类型字段,只要在Table或query的Beforepost
事件设置NO的值自己管理该字段的自增。
可以参考一下,
D:/Borland/Delphi4/Demos/Db/Mastapp
的MastData.Cust的BeforePose事件函数。
 
自动增量:SQL6.5,不知有用否?

declare @conno int
declare @str1 char(4)
declare @str2 char(6)

select @str1=(convert(char(4),coalesce(max(convert(integer,yourField)),0000)+1))
from yourTable

select @str2=@str1+' E'
select @conno=charindex('',@str2)
select stuff('0000',6-@conno,@conno-1,@str1)
//yourField should be char(4)
 
其实我用此NO字段的用意只是给表提供一个关键字段。
表中有这么几个字段:
NO------自动增量 关键字段
Name----A型 姓名
Sex-----A型 性别
等等。
建立两个二级索引:Index1和Index2
Index1的字段为Name, Index2的字段为Sex,
也就是说Name和Sex字段的值可以有相同的,
(除了No字段外其余的字段的值都有可能相同)
所以我建立了No自动增量字段。表中的数据变化
很大很大。故我怕到时数据溢出。
感谢Victortim,wumeng和xin_kang的及时帮助。
 
1)没有担心益处的必要
2)如果担心溢出,你换成integer,做关键字段也可,删除记录的同时删除了No的值。
 
没有担心溢出的必要
不过你可以用integer,在增加一条记录时可这样:
table1.last;
UNo:=table1['no'].asinteger+1;
新增记录的No的值就为UNo的值,一样可实现自动增量。
 
>wumeng

MS SQL可用TUpdateSQL在int字段上实现AUTOINC字段,如下:

INSERTSQL:

INSERT INTO T1(C1,C2,C3)
SELECT ISNULL(C1,0)+1, :C2, :C3)

C1为T1的AUTOINC字段。
 
笔误!不好意思!!

INSERT INTO T1(C1,C2,C3)
SELECT ISNULL(MAX(C1),0)+1, :C2, :C3 FROM T1

 

》“溢出”是不会的。

》“NO字段的值有增无减”
而且删除一些记录后,将不连续。

我以前的做法是用TBatchMove控件把数据转出。
得到的类型为(+)字段的值会变连续了!!!

再放回去!!!

 
呵呵,黄兄这个做法真有趣
 
只要把字段该删除,再重建一次应该就可以乐
 

TO 黄耀彰
我用TBatchMove控件将数据导出后,表结构发生了变化,
本来表结构中有以NO为主索引,两个二级索引,表是密
码保护的,结果导出后,主索引,二级索引,密码都没
有了,请问这是怎么回事?
 
主要是要注意删除中间某个纪录后,要有效的利用这个
空闲的编号.
在删除一条纪录后,把比它编号打的纪录的编号全部减一.
1.remember the number of the rocord being deleted
2.delete the record you want to delete
3.update table set number=number-1 where number>the deleted number
 
多人接受答案了。
 

Similar threads

回复
0
查看
1K
不得闲
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
824
DelphiTeacher的专栏
D
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部