[还是不行!]让access数据库自动编号ID 字段 重新从1开始排序.而且ID是主键! ( 积分: 10 )

  • 主题发起人 主题发起人 lsjkiki
  • 开始时间 开始时间
L

lsjkiki

Unregistered / Unconfirmed
GUEST, unregistred user!
让access数据库自动编号ID 字段 重新从1开始排序.而且ID是主键!
大家讨论 找个最好的方法!谢谢各位!~
 
设计时设定不就好了
 
不是 ,是数据删除后序号就不整齐了
 
删除ID字段,保存,添加自动ID字段
 
我同意楼上的办法,我就是这么做的
 
创建相同结构的临时表,遍历原表,逐条顺序添加。再删除原表,将临时表改名。
 
1.access无法用sql语句改表名!
2.主键ID不可以被删除.
3.也不可以再建立主键.
---------------------------以上方法都不可行!!!!贴可行的代码出来啊!!!!!!!!!!
 
不能改名就删除原表,从临时表复制回来(重建原表)。
 
最多你自己加个字段 循环注入喽
其实又这种需要的话 你可以不必设置主健(显式的) 也就是说还是是ID 只要不设置主健
在操作表时加以控制:(通过你在程序的操作 达到ID就是主建的目的,你只要保持唯一不就行了啊 :——))
比如 插入数据 ID 取当前最大 加 1
 
个人觉得使用数据库自己的自动编号,该字段最好别设置成外键,也无需显示,作为程序对记录的区分即可,所以无所谓是否按顺序和是否从1开始了.
 
只要你保留该字段的Auto Increment属性,以后你进行数据的删除,它照样会乱序。所以做法是,删除该字段,然后重新建立一个int字段,循环输入进去。
 
呵呵 分拿来吧
var
TempStrings:TStringList;
begin
if adtblWater.Active then //连接要初始化ID的表的ADOTable
adtblWater.Close;

with ADOQuery1 do
begin
Close;
Sql.Clear;
Sql.Add('delete from water');
ExecSQl;

adtblWater.GetIndexNames(TempStrings);
if TempStrings.IndexOf('PrimaryKey')<>-1 then
begin
Close;
Sql.Clear;
Sql.Add('alter table water drop constraint primarykey');
ExecSql;
end;

frmDM.adtblWater.GetFieldNames(TempStrings);
if TempStrings.IndexOf('id')<>-1 then
begin
Close;
Sql.Clear;
Sql.Add('alter table water drop column id');
ExecSql;
end;

Close;
Sql.Clear;
Sql.Add('alter table water add column id counter(1,1)');
ExecSql;

Close;
Sql.Clear;
Sql.Add('alter table water alter column id counter(1,1)');
ExecSQL;

Close;
Sql.Clear;
Sql.Add('alter table water add constraint primarykey primary key (id)');
ExecSql;
end;
end
绝对可行 我的程序现在用。
 
一般情况下
只能删除ID字段,然后重新创建
 
请问dearwolf,
Access数据库支持 'alter table water drop constraint primarykey' 吗???
 
我试了 可以 不过 出现了个大问题。
我如果不执行
Sql.Clear;
Sql.Add('delete from water');
ExecSQl;
以后插入的数据又从1开始。可是1里面已经有这个id了。。
 
你这个问题还是哪个最难的,表格显示序列号
 
先删除字段ID,然后在重新建立一个。
 
SELECT Format(1+(select count(*) from League where a.sid>sid),0) AS num, A.*
FROM League AS A;[:D][:D]
 
参考大家意见,自己解决了,谢谢,接受答案!
 
多人接受答案了。
 
后退
顶部