数据库里有一个字段是自增长类型的字段。用delphi的adoquery1。ExecSQL
insert 一条记录。如何取出来那个自增长字段的 值?
delphi 自增长字段
insert 一条记录。如何取出来那个自增长字段的 值?
delphi 自增长字段
解决方案 »
- DELPHI的 CHECKBOX的多选查询—————求指教—————标题要长才行啊
- 这种功能代码应该怎么写?
- 关于TMS中ADVoutList控件详细用法
- 这段代码哪里错了?
- 关于XML文本的写法问题
- 又一个关于dbExpress的问题
- 我以只读的方式打开文本文件该怎么做?????
- 内存检查工具或控件,如:Memproof、BoundsChecker 那里能下载能告之吗?谢谢。
- 怎样在INTERBASE的数据库种用存储过程保存图片格式的数据???高分送上!
- listbox的text能够编辑的选项在哪里设置的啊!谢谢了!
- .net调不起delphi5写的dll。寻求高手解决,急
- DELPHI 怎么复制到当前管理员账户的启动文件夹?
自增字段有其有点也有其缺点
优点:自动维护,常作主键用
缺点:对于主从关系的表,不能提前预知下一个主表记录的ID值
在大数据量频繁进行删除,插入等操作时,有时会超出字段类型的范围
可以自行维护一个ID字段,不用自增,那样在一定程度上弥补上述两个显著的缺憾
Create table A(
ID int identity(1,1),
ProductName varchar(10)
)
--使用SQL查询的语句为
insert A (ProductName) values('asdf')
select @@IDENTITY AS ID
--其中@@IDENTITY是SQL Server的全局变量,表示新插入的自动增长列(即identity类型的列)的值在Delphi中假如使用的数据库控件为TADOQuery,其名称为ADOQuery,可以这样写procedure TMainFm.Button1Click(Sender:TObject)
var
Value:Integer;
begin
ADOQuery.Close;
ADOQuery.SQL.Clear;
ADOQuery.SQL.Add('Insert A (ProductName) values (''Test'')');
ADOQuery.SQL.Add('Select @@IDENTITY as ID');
ADOQuery.Open;//这里不使用Execute,因为需要把查询结果以表格的形式返回
Value:=ADOQuery.FieldByName('ID').AsInteger;
ShowMessage('新插入的ID值为'+Inttostr(Value));
end;
可以把Insert语句和Select @@Identity语句使用事务包含到一起就可以了
我怎么觉得你是要adoquery1。ExecSQL得到返回值? 如果真是 execsql 是没有返回值的,除排是..
一是在表中加入一个GUID字段,插入后根据GUID在反查id
二是插入后用max(id)来找出最大值
三是先用max(id)+1得到新的id ,在插入,但id就不能设置为自增字段了。