怎样自动重排列序号(50分)

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

xiaohui

Unregistered / Unconfirmed
GUEST, unregistred user!
有一个表结构如下:
编号 姓名 性别
01 ss
02 ee
03 ww
04 qq
编号为索引
怎样在修改编号04为02后,原来的02,03依次加1后重新排列
寻找好办法
 
索引是字符串?那没办法的...
 
你可以设置编号为计算字段,然后编号字段值等于table1.recno的值!
应该可以,你试一试!
 
>>在修改编号04为02后。
若原来有02,能改吗?若能。
Select * from Table
order by 编号
不就行了?(I use Sql,don't know what kind you use.)
 
to:bobby_ym
设置为计算字段后,这样人为修改它的值,我的目的要进行人为修改进行排序,
但是编号又不能出现重复

to:wumeng
修改04为02以后当然要让原来的02变为03 ,03变为04
 
这个方法可能有点笨,不过实用

在每次添加记录时做一下排序,如:现有序号1、2、3、4、5,现添加3,变量名为var xh:integer;
flag:boolean;
假设控件为table1,索引字段为“序号”
flag:=false;
table1.first;
while not table1.eof do
begin
if table1.fieldbyname('序号').asinteger<xh
then table1.next
else if table1.fieldbyname('序号').asinteger>xh
then insert记录
else if table1.fieldbyname('序号').asinteger=xh
then begin
flag:=true;
break;
end;
if flag then
begin
table1.last;
while table1.fieldbyname('序号').asinteger<>xh do
begin
inc(table1.fieldbyname('序号').value);
table1.Prior;
end;
inc(table1.fieldbyname('序号').value);
insert记录
end;
代码没有测试

 
1. 如果编号字段是字符串的话,只能这么做:
在表的 BeforeInsert中进行处理,把所有大于等于该编号的编号全加一,然后
再插入本记录,
2. 如果编号字段是数值的话,可以用一个 query/StoreProc/trigger 进行加一
操作。
 
似乎都没有很好地解决问题
 
附加功能 将问题提前
 
xiaohui:如果还想接着讨论请定期提前自己的帖子,如果不想继续讨论请结束帖子。
 
提前问题!!
 
试一试
把编号的字段类型设为autoincrement,在修改时自动增减
 
多人接受答案了。
 
后退
顶部