如果id为自动增长字段,其他数据添加后,怎么返回该行数据的id值。如果其他字段数据没有重复,可以查询,如果有重复的,查询出来的编号值是不正确的?
请专家赐教!

解决方案 »

  1.   

    自动增长字段怎么可能有重复呢?你可以为主键嘛。
    var
      i :integer;
    begin
      i := Table1.FieldByName('id').asInteger;end;
      

  2.   

    自动增号的字段是不会有重复的。返回嘛,保存了数据之后,要刷新一个数据集才能用AsInteger去读书ID号的。
      

  3.   

    我说的是其他字段 比如 表 
     name (id,name)
    其中id是自动增长的int,我添加name,同时我也要添加的数据的id。怎么同时得到。
    不考虑select top ,因为多用户操作可能错位。
      

  4.   

    方法不错 insert into name(name) values('name') 
    我要的是这条记录的id,添加后能否及时得到?
      

  5.   

    保存之后该值才有,再查一遍用select @@identity from ..
      

  6.   

    如果有两个 name字段的值都是 ‘name’
    select id from name where name='name' 返回两个记录,你怎么确认哪个是你刚才加的呢?
      

  7.   

    不用带条件的,就如同select max(id)from table 一样,
      

  8.   

    那么是否 多人同时操作这个表时 不会引起数据的混乱 吗?
    比如你添加一条记录,同时我也添加
    如果是这样的顺序  你添加 >你查询 >我添加 >我查询
    就ok了
    如果是这样的顺序   你添加>我添加>你查询>我查询
    那怎么办?
      

  9.   

    这就要等sql高手了,不过sql在并发这方面的处理好像不是太强。
      

  10.   

    我记得有人提到过在三层结构中用delta可以得到id不过我是不太明了。
    可是我的没有三层结构,或者不是用的数据集接口,怎么可以得到delta呢。
    总之,期待高手!
      

  11.   

    //先启动事务
    ADOConnection1.BeginTrans;
    Try
      //执行insert操作记得用Execsql方法
      //然后在此出Select 最大的编号
      ADOConnection1.CommitTrans;
    except
      ADOConnection1.rollbacktrans;
    end;解释:
    1.为什么要操作放在事务中主要考虑到可能有多个用户同时在操作该表,直接插入后取最大值存在错误的可能。你可以在查询分析器中启动两个事务同时插入记录进行测试。
    2.在插入数据后是否可以把这时的值取出来?可以的。
      

  12.   

    SQLServer:adoquery1.add('insert xx (ss) values (1) select @@IDENTITY 主键');
    adoquery1.open;
    xx:=adoquery.fieldbyname('主键');
    ....有错找我。