数据库中,表1的字段ID是自增型,请问怎么样将记录最后一行的字段 ID (值最大的ID)值取出来赋给一个变量??
我想用
pno = "(select max(no) from 表1)",语法有错误,可能我的想法有错误。
请教各位大虾,应该用什么办法来做?

解决方案 »

  1.   

    简单点 select * from 表1 order by ID
    然后movelast取值!
      

  2.   

    select top 1 * from 表1 order by ID desc
    str=rs("ID")
      

  3.   

    pno = rs.open "select max(no) from 表1",conn,3,3
      

  4.   

    SELECT  IDENT_CURRENT('TABLENAME')
      

  5.   

    楼上的可以
    select max(no) from 表1
    也没错啊。你那里报什么错?
    贴代码看看
      

  6.   

    select top 1 * from 表1 order by ID desc
    str=rs("ID")
    or
    SELECT  IDENT_CURRENT('TABLENAME')
      

  7.   

    我遇到过大概相同的错误。
    那是因为楼主没有定义取max后的字段名,你写成
    select max(NO) as maxid from xxxx
    然后取maxid字段的值就行。
    而且,当no字段没有值的时候,maxid字段不是eof,而是返回一个null值。
      

  8.   

    楼主没有说明数据库类型,如果是sql server,可以:@@IDENTITY
    返回最后插入的标识值。语法
    @@IDENTITY返回类型
    numeric注释
    在一条 INSERT、SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含此语句产生的最后的标识值。若此语句没有影响任何有标识列的表,则 @@IDENTITY 返回 NULL。若插入了多个行,则会产生多个标识值,@@IDENTITY 返回最后产生的标识值。如果此语句激发一个或多个执行产生标识值的插入操作的触发器,则语句执行后立即调用 @@IDENTITY 将返回由触发器产生的最后的标识值。若 INSERT 或 SELECT INTO 语句失败或大容量复制失败,或事务被回滚,则 @@IDENTITY 值不会还原为以前的设置。在返回插入到表的 @@IDENTITY 列的最后一个值方面,@@IDENTITY、SCOPE_IDENTITY 和 IDENT_CURRENT 函数类似。 @@IDENTITY 和 SCOPE_IDENTITY 将返回在当前会话的所有表中生成的最后一个标识值。但是,SCOPE_IDENTITY 只在当前作用域内返回值,而 @@IDENTITY 不限于特定的作用域。IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。IDENT_CURRENT 返回任何会话和任何作用域中为特定表生成的标识值。有关更多信息,请参见 IDENT_CURRENT。示例
    下面的示例向带有标识列的表中插入一行,并用 @@IDENTITY 显示在新行中使用的标识值。INSERT INTO jobs (job_desc,min_lvl,max_lvl)
    VALUES ('Accountant',12,125)
    SELECT @@IDENTITY AS 'Identity'其他数据库类型可以使用:
    select max(标识字段) from 表
      

  9.   

    我对这一个问题也很关注,
    查了一些资料看,好象对于MSSQL来来说,取得即将产生的下一个记录的ID(自增型),
    可以实现,但是对于ACCESS就有一定的困难,
    在本社区中有很多关于此问题的帖子,都建议用
    select max(ID) from 表
    最大的ID或最后产生的ID <- rs("ID").vale
    nextID=ID + 1对此我有很大的疑问???一般说来:要取得下一记录的ID,无非是用此ID产生一个不重复的格式化编号,在正常填写记录时,采用上面的方法是不会出错的,但有没有考虑过下面这种情况,填了5条记录又删出了全部记录,此时如果再填写记录,本来下一个产生的自增ID应该为6,此时再用select max(ID) from 表,会有什么问题???再者,即使先对RS.EOF\BOF进行判断,也还是无法确定要取得下一记录的ID(此时应该得到确切的6)
      

  10.   

    当然,不加as maxid 也是可以的。用的时候用objRS("")也能取到。但这显然不是一个good way...
      

  11.   

    一般说来:要取得下一记录的ID,无非是用此ID产生一个不重复的格式化编号,在正常填写记录时,采用上面的方法是不会出错的,但有没有考虑过下面这种情况,填了5条记录又删出了全部记录,此时如果再填写记录,本来下一个产生的自增ID应该为6,此时再用select max(ID) from 表,会有什么问题???再者,即使先对RS.EOF\BOF进行判断,也还是无法确定要取得下一记录的ID(此时应该得到确切的6)
    ==================
    是让ID无限制的增大好还是动态的插入ID好?
    比如,添加了12345
    删除了34
    再添加一个,是编号6好还是编号3好?
      

  12.   

    现在不是讨论“3”好还是“6”好的问题!*******菜鸟的问题:怎样将数据表最后一条纪录的自动编号取出来??****所以应考虑记录集为空时,特别是记录被清空后,应该怎么样处理,这是最起码的,在对记录集进行操作时必须对(RS.EOF AND RS.BOF)进行检查后,才能进行后续的步骤。 
      

  13.   

    1、SELECT @@IDENTITY
    2、SELECT IDENT_CURRENT('TABLE NAME')
    3、SELECT SCOPE_IDENTITY()
    注意:SQL SERVER 7.0 只有第1个函数。而第1、3函数又会受到作用域的影响。
      

  14.   

    set rs = cn.execute "select max(no) from 表1",
    pno = rs.Fields(0)