菜鸟的问题:怎样将数据表最后一条纪录的自动编号取出来?? 数据库中,表1的字段ID是自增型,请问怎么样将记录最后一行的字段 ID (值最大的ID)值取出来赋给一个变量??我想用pno = "(select max(no) from 表1)",语法有错误,可能我的想法有错误。请教各位大虾,应该用什么办法来做? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 简单点 select * from 表1 order by ID然后movelast取值! select top 1 * from 表1 order by ID descstr=rs("ID") pno = rs.open "select max(no) from 表1",conn,3,3 SELECT IDENT_CURRENT('TABLENAME') 楼上的可以select max(no) from 表1也没错啊。你那里报什么错?贴代码看看 select top 1 * from 表1 order by ID descstr=rs("ID")orSELECT IDENT_CURRENT('TABLENAME') 我遇到过大概相同的错误。那是因为楼主没有定义取max后的字段名,你写成select max(NO) as maxid from xxxx然后取maxid字段的值就行。而且,当no字段没有值的时候,maxid字段不是eof,而是返回一个null值。 楼主没有说明数据库类型,如果是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 表 我对这一个问题也很关注,查了一些资料看,好象对于MSSQL来来说,取得即将产生的下一个记录的ID(自增型),可以实现,但是对于ACCESS就有一定的困难,在本社区中有很多关于此问题的帖子,都建议用select max(ID) from 表最大的ID或最后产生的ID <- rs("ID").valenextID=ID + 1对此我有很大的疑问???一般说来:要取得下一记录的ID,无非是用此ID产生一个不重复的格式化编号,在正常填写记录时,采用上面的方法是不会出错的,但有没有考虑过下面这种情况,填了5条记录又删出了全部记录,此时如果再填写记录,本来下一个产生的自增ID应该为6,此时再用select max(ID) from 表,会有什么问题???再者,即使先对RS.EOF\BOF进行判断,也还是无法确定要取得下一记录的ID(此时应该得到确切的6) 当然,不加as maxid 也是可以的。用的时候用objRS("")也能取到。但这显然不是一个good way... 一般说来:要取得下一记录的ID,无非是用此ID产生一个不重复的格式化编号,在正常填写记录时,采用上面的方法是不会出错的,但有没有考虑过下面这种情况,填了5条记录又删出了全部记录,此时如果再填写记录,本来下一个产生的自增ID应该为6,此时再用select max(ID) from 表,会有什么问题???再者,即使先对RS.EOF\BOF进行判断,也还是无法确定要取得下一记录的ID(此时应该得到确切的6)==================是让ID无限制的增大好还是动态的插入ID好?比如,添加了12345删除了34再添加一个,是编号6好还是编号3好? 现在不是讨论“3”好还是“6”好的问题!*******菜鸟的问题:怎样将数据表最后一条纪录的自动编号取出来??****所以应考虑记录集为空时,特别是记录被清空后,应该怎么样处理,这是最起码的,在对记录集进行操作时必须对(RS.EOF AND RS.BOF)进行检查后,才能进行后续的步骤。 1、SELECT @@IDENTITY2、SELECT IDENT_CURRENT('TABLE NAME')3、SELECT SCOPE_IDENTITY()注意:SQL SERVER 7.0 只有第1个函数。而第1、3函数又会受到作用域的影响。 set rs = cn.execute "select max(no) from 表1",pno = rs.Fields(0) 跪求《Visual Basic Active X 编程实例详解》电子版 VB-PowerWrap,这个软件谁用过呀,如何呀?刚知道的. 关于MSCOMM控件的使用 COM+为什么还有问题呢? 求一句简单的SQL 高分请教大表比较算法 如和用代码控制窗体的大小(单位为象素).请写出代码来谢谢. 用vb启动outlook 关于在sql中比较日期的问题 如何在局域网上用VB6的OpenDataBase方式以只读形式访问Access数据库 〔求助〕用VB输出图形 表名以数字开头,为何查询出错?谢谢回答!
然后movelast取值!
str=rs("ID")
select max(no) from 表1
也没错啊。你那里报什么错?
贴代码看看
str=rs("ID")
or
SELECT IDENT_CURRENT('TABLENAME')
那是因为楼主没有定义取max后的字段名,你写成
select max(NO) as maxid from xxxx
然后取maxid字段的值就行。
而且,当no字段没有值的时候,maxid字段不是eof,而是返回一个null值。
返回最后插入的标识值。语法
@@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 表
查了一些资料看,好象对于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)
==================
是让ID无限制的增大好还是动态的插入ID好?
比如,添加了12345
删除了34
再添加一个,是编号6好还是编号3好?
2、SELECT IDENT_CURRENT('TABLE NAME')
3、SELECT SCOPE_IDENTITY()
注意:SQL SERVER 7.0 只有第1个函数。而第1、3函数又会受到作用域的影响。
pno = rs.Fields(0)