我在Access中建立了一张表,其主键是自增字段,用delete from删除数据后,再新增一条时,发现其自增字段还是继续增加下去,没有从1开始,请问如何删除数据才能使自增字段从1开始自增
解决方案 »
- 编译时没问题,程序运行时出错?
- 请教关于DevExpress_grid控件中的状态栏问题,来者给分.
- Dephi将要完蛋?
- stringgrid控件的属性怎么设置,能用鼠标拖动来控制行距和间距呢?
- 怎样删除多个监视器?
- 在win2000中,如何把一个用Delphi开发的软件安装给一个非管理员的用户使用?
- Kao,delphi的环境真是不习惯,怎样才能同时看到多个页面的代码
- 有谁有MP3或MP3PRO的相关资料吗?给我一份。谢了!
- 我想实现在dbgrid的计算列上点击一下打个勾, 再点击一下为空
- 如何关闭一个IE窗口?sendmessage(hwd,wm_close,0,0);不起作用
- fastreport能支持套打吗?就是有背景图片,但不打印背景图片,还有就是fastreport如何控制小数位?
- 请问如何把dbf库中的内容追加到sql server库中?
主键是自增字段,我想比较难实现.在SQL SERVER里的做法是:CAEATE TABLE (ID INT,.. )添加数据时,用一个函数来获得最大ID,把(最大ID+1)设为ID的默认值.建一个删除的解发器.具体如下:--函数
create function emp_getid()
returns int
as
begin
declare @id int
select @id=max(id) from emp
set @id=isnull(@id,0)+1
return(@id)
end--表
CREATE TABLE [dbo].[emp] (
[id] [int] NOT NULL ,
a varchar(10)
) ON [PRIMARY]
GOALTER TABLE [dbo].[emp] WITH NOCHECK ADD
CONSTRAINT [PK_emp] PRIMARY KEY CLUSTERED
(
[id]
) ON [PRIMARY]
GOALTER TABLE [dbo].[emp] WITH NOCHECK ADD
CONSTRAINT [DF__emp__id__208CD6FA] DEFAULT ([dbo].[emp_getid]()) FOR [id]
GO
--触发器
create trigger emp_delete on dbo.emp
AFTER delete
as
declare @id int,@mid int
select @mid=min(id),@id=@mid-1 from deleted
update emp set id=@id,@id=@id+1 where id>@mid--测试数据
insert emp (a)
select '10'
union all select '20'
union all select '30'delete emp where id =2select * from empdrop table emp
drop function emp_getid/*
id a
-----------
1 10
2 30*/
select * into tblb from tbla where 0 > 1
drop table tbla
select * into tbla from tblb
drop table tblb
来实现吧,在SQLServer中有一个truncate table tbla能实现,可惜不能用在Access中
还有一个办法,就是你delete from table后把数据压缩一下也可以
procedure TfrmPer.miCDataClick(Sender: TObject);
procedure CompactAccess(sDBName: string; JetId: string = '4.0'); //压缩
var
AVariant: Variant;
begin
if FileExists(sDBName + '.tmp') then DeleteFile(sDBName + '.tmp');
AVariant := CreateOleObject('JRO.JetEngine');
AVariant.CompactDataBase('Provider=Microsoft.Jet.OLEDB.' + JetId + ';Jet OLEDB:DataBase Password=780927+790621;Data Source=' + sDBName ,
'Provider=Microsoft.Jet.OLEDB.' + JetId + ';Jet OLEDB:DataBase Password=780927+790621;Data Source=' + sDBName + '.tmp');
DeleteFile(sDBName);
ReNameFile(sDBName + '.tmp', sDBName);
end;
var
sDBName: string;
begin
if dmPer.acPer.Connected then dmPer.acPer.Close;
Sleep(500);
sDBName := ExtractFilePath(Application.ExeName) + 'permis.mdb'; {这里可以改成你数据库程序的路径}
CompactAccess(sDBName);
MessageBox(self.Handle, '数据库压缩成功!', '提示', mb_IconInformation + mb_Ok);
dmPer.acPer.Open;
end;