数据库里有一个字段是自增长类型的字段。用delphi的adoquery1。ExecSQL
insert 一条记录。如何取出来那个自增长字段的 值?
delphi 自增长字段

解决方案 »

  1.   

    select max(字段) from 表名
      

  2.   

    就是阿三说的,直接 select max即可
    自增字段有其有点也有其缺点
    优点:自动维护,常作主键用
    缺点:对于主从关系的表,不能提前预知下一个主表记录的ID值
         在大数据量频繁进行删除,插入等操作时,有时会超出字段类型的范围
    可以自行维护一个ID字段,不用自增,那样在一定程度上弥补上述两个显著的缺憾
      

  3.   

    select SELECT IDENT_CURRENT('表名')
      

  4.   

    insert 不能直接返回最大值 必须查一次
      

  5.   

    insert之后在查询出来最大值。
      

  6.   


    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;
      

  7.   

    上述我的例子没有考虑到多个客户端同时更新数据库的情况,如果需要的话,
    可以把Insert语句和Select @@Identity语句使用事务包含到一起就可以了
      

  8.   


    我怎么觉得你是要adoquery1。ExecSQL得到返回值? 如果真是 execsql 是没有返回值的,除排是..
      

  9.   

    access中select @@indentity 也有效的
      

  10.   

    如果是access数据库,就只有一个程序能访问,
    一是在表中加入一个GUID字段,插入后根据GUID在反查id
    二是插入后用max(id)来找出最大值
    三是先用max(id)+1得到新的id ,在插入,但id就不能设置为自增字段了。