一个关于数据编号的问题!请高手指点

chailang 2004-04-01 09:01:54
给表中的数据添加诸如这样的编号!C1,C2,C3-------CN
我是通过这样实现的
var b:integer;
a,temp1:string;
---------------
begin
b:=1;
for i:=0 to adoquery1.RecordCount-1 do
begin
b:=b+1;
end;
a:=inttostr(i);
temp1:='C'+a;
label15.Caption:=temp1;
end;
这样可以按照C1,C2,C3-------CN这样给每一条记录增加一个编号的。但是当我删除一条记录之后,如将编号为C3的这条记录删除后,下次再添加记录的时候,如何判断出C3这条记录是不存在的,然后将这条记录的编号设置为C3。 如何才能判断出C1,C2,C3-------CN中不存在某个编号呢!请各位高手指点。如何通过SQL语句来实现
...全文
23 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
r_james 2004-04-01
  • 打赏
  • 举报
回复
我觉得有两种办法:
1.遍历查看,从头找,遇到断号就插入一个;就象crsit(常乐笑)说的那样;
2.增加一个编号回收表,将删除的编号统一记录,并在增加使用时优先使用回收表中的编号;

第一种可以节省空间,但插入时的操作响应速度慢;
第二种可以提高插入时操作的速度,但是浪费的一点空间;

可以根据具体情况具体分析使用!我现在只有这两种办法!
losgou 2004-04-01
  • 打赏
  • 举报
回复
给个思路你吧~`
我觉得你保证后面的数字位数一样是有必要的(1.好操作,2.也美观) 我就以这样的方式说说吧
我们用 getnumber函数来获取编号

在函数里面写
Function GetNumber: string;
select 编号(字段) from 表 order by 编号

这样打开一个表
开始 工作
i := 10000000;
while not 表.eof do
begin
NewNumber :="C"+inttostr(i):
if 字段值>NewNumber then 退出循环;
表.next(下一条记录)
inc(i);
end;

return NewNumber(将newnumber的值付给函数);
end;


不知道这种方法可以不??

只是思路,具体点要自己写~~`:P







chailang 2004-04-01
  • 打赏
  • 举报
回复
表中记录的删除不是一定的,也不确定删除的是C3,或许是其它的编号的记录。当插入一条记录的时候,才去判断表中编号C1,C2,C3-------CN中缺少的是哪一个编号的,如果缺少就补上,如果不缺少的话,就在新增加一个编号为CN+1。
DragonBill 2004-04-01
  • 打赏
  • 举报
回复
没必要用count吧?
select 1 from tablename where id='c3',再判断该SQL是否为EOF。
qybao 2004-04-01
  • 打赏
  • 举报
回复
select <你新增的编号(字段名字)>,count(<你新增的编号(字段名字)>) from your_table group by <你新增的编号(字段名字)>
如果count值为0就是缺少了该编号

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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