高分!!求ASP自动编号问题,100分在线等,解决马上结贴~!~!~!~!~!~!

lovezy1028 2005-12-31 11:40:03
自动编号,生成的编号格式为 系统时间+登录名称+编号 在本月内就递增上去,到了下月就重新编号递增
如:登录名称为NAME 2005年11月第一条为200511NAME001 以后就是 200511NAME002 200511NAME003 200511NAME004 …… 200511NAME091 …… 200511NAME……递增上去

2005年12月就重新开始200512NAME001 以后就是 200512NAME002 200512NAME003 200512NAME004 …… 200512NAME091 …… 200512NAME……递增上去
...全文
337 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
mind_1220 2006-01-05
  • 打赏
  • 举报
回复
给你一个参考一下
DECLARE @con1 int

set @con1 = 1

select top 1 @con1 = [no] + 1 from test1 where
Year(logtime) = year(getdate()) and
Month(logtime) = Month(getdate()) order by no desc

insert into test1(logname,[no]) values(
'mind_1220',@con1
)

我不知道你是不是这个意思,主要是你的 Name如果不一样会怎么样?
重新计数?
如果不需要 那么就用上面语句就可以了。
mind_1220 2006-01-05
  • 打赏
  • 举报
回复
我看了
楼上的方法。
觉得大家都说得差不多东西,而且应该都可以解决你的问题。
我说另外一种方法吧。
你建立三个字段
系统时间(logtime)、登录名称(logname)、编号(no)
你每次要添加的时候
可以根据你当前的年和月
确定最大的一个编号。
然后再加1。
就相当于
在insert
多写一个
select 语句
BlueDestiny 2006-01-05
  • 打赏
  • 举报
回复
否则表里的字段就自动递增就可以了

也可以用application存updatedTime,但是我感觉app的伸缩性不太好
BlueDestiny 2006-01-05
  • 打赏
  • 举报
回复
不知道我理解了你的意思没有

我做过类似的东东,我用的方法就是用表

重新建一个表,表里的字段就两个就可以

一个updatedTime,一个count,

updatedTime初始化时间后,用datediff("d",rs("updatedTime"),now)>=30就重新更新表里的updatedTime字段,把表里count字段初始化为1
rawjim 2006-01-05
  • 打赏
  • 举报
回复
更正一下我刚才说的,仔细想了一下,用触发器不好弄。

同意yifanwu(逸凡)的说法,我想你的设计可能不太合理。

如果多用户使用同一个Name,还要考虑临时锁定表的问题,要不然产生的ID可能就会冲突,还有,用三位数作自动编号,不一定保险,万一数据比较多,就会超范围。

rawjim 2006-01-05
  • 打赏
  • 举报
回复
简单的方法,用纯ASP代码加SQL实现。
如果你要求效率,而且使用的是SQL Server可以使用触发器辅助自动编号。
emhuangzi 2006-01-05
  • 打赏
  • 举报
回复
登陆一次就递增1个就行了啊。。。
登陆一个就记录一条信息。。
做三个字段。。
yifanwu 2006-01-05
  • 打赏
  • 举报
回复
这也太复杂了,这样子来解决一个编号问题?楼主应该想想是不是有什么问题!
xutao888 2006-01-04
  • 打赏
  • 举报
回复
1、取得当前表中最大的编号:set rs = execute(select top 1 articleID from article order by articleID desc)
2、自动编号(+1):

Dim ArticleID
Dim ArticleIDStr
ArticleIDStr = "0000" & Cstr(Cint(right(rs("ArticleID"),3))+1)
ArticleID = year(date()) & month(date()) & session("UserName")
ArticleID = ArticleID & Right(ArticleIDStr ,3)
arrowy 2006-01-04
  • 打赏
  • 举报
回复
在表里直接加一个字段,submitTime把信息的提交时间放进去,对比上一条记录的时间的月份如果一样就直接+1不是就重新编号
huagou 2006-01-04
  • 打赏
  • 举报
回复
1、再建立一个编号表。字段为LoginDate年月(日期型)、UserName用户名、BasicID编号(数字型);
2、当用户登录时,就朝编号表里写入一条记录比如:2006-01-01、Admin;而编号就可以通过SQL查询来得到。

Select MAX(BasicID) As MaxID FROM 编号表 WHERE Year(LoginDate) = '2006' AND Month(LoginDate) = '1'

这个语句中的2006和1都可以通过日期函数Now()或者Date()来得到。

这样就得到了当前的BasicID,将其值加1后即为当前记录的ID,如果你想不足3为或者4位补0的话,可以通过字符串操作来实现。

得到当前记录的ID后,你上面的问题也就迎刃而解了。
lovezy1028 2006-01-04
  • 打赏
  • 举报
回复
ybfqlyq 2006-01-04
  • 打赏
  • 举报
回复
不要想得那麼複雜,可以說只是字符串的連接而已。。
取最大記錄數,set rs = execute(select top 1 articleID from article order by articleID desc)取出它ID,得到它的的月份,判斷是否當前月份,是就把ID加1,否則就把ID設成新月份的第一條。。
qjf_mzdb 2006-01-01
  • 打赏
  • 举报
回复
order by time asc
pink12345 2005-12-31
  • 打赏
  • 举报
回复
当前的年月是可以得到的

select count(编号) from 表 where 编号 like '年+月%'

count得到后再编号 年+月+登陆名+(count+1)






zhanghongwen 2005-12-31
  • 打赏
  • 举报
回复
用个mid()就可以了
hacker18 2005-12-31
  • 打赏
  • 举报
回复
其实,这样的问题,用当前时间加上几位数的随机数就行了。
lovezy1028 2005-12-31
  • 打赏
  • 举报
回复
有好办法吗???
竹林听雨2005 2005-12-31
  • 打赏
  • 举报
回复
差点忘记了,表中的记录有点不一样,这样做估计不是很好,

用right来求一下右边三位数的值吧。
竹林听雨2005 2005-12-31
  • 打赏
  • 举报
回复
如:登录名称为NAME 2005年11月第一条为200511NAME001 以后就是 200511NAME002 200511NAME003 200511NAME004 …… 200511NAME091 …… 200511NAME……递增上去

2005年12月就重新开始200512NAME001 以后就是 200512NAME002 200512NAME003 200512NAME004 …… 200512NAME091 …… 200512NAME……递增上去


笨方法:
先从表中求得最大值:

select max(id) from ...
maxid=rs("id")
year(now) & month(now) & trim(request("name")) & maxid+1
加载更多回复(2)

28,390

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧