access 排序后怎么重新自动编号

现有一个表,表中ID为自动编号,可因为误操作,把原ID为自动编号的字段删除后,后又加上了一个ID为自动编号的字段,可顺序和原来的不一样了,不是按日期的升请问怎样做可以重新... 现有一个表,表中ID为自动编号,可因为误操作,把原ID为自动编号的字段删除后,后又加上了一个ID为自动编号的字段,可顺序和原来的不一样了,不是按日期的升请问怎样做可以重新按日期自动重新编号。 展开
 我来答
badkano
推荐于2016-05-09 · 知道合伙人体育行家
badkano
知道合伙人体育行家
采纳数:144776 获赞数:885365
团长

向TA提问 私信TA
展开全部

需要用sql语句来处理。

比如原表数据如下:

现在要按出生日期从早到晚排列,并给出序号:

sql语句如下:

select t.* from
(select t1.*,(select count(*)+1 from 表2 as t2 where t2.出生日期<t1.出生日期) as 序号 from 表2 as t1) as t
order by 序号;

结果

palmers01
推荐于2016-11-04 · TA获得超过372个赞
知道小有建树答主
回答量:880
采纳率:0%
帮助的人:646万
展开全部
先新增一个编号字段, 用vba打开记录集, 按事件排序, 做循环, 对编号字段赋值, 然后在表设计里把这个字段改成自动编号字段
更多追问追答
追问
求详细方法,比如我现在表中只有两个字段,一个[ID]为自动编号,一个[日期]为日期型。?
追答
步骤我不是都写清楚了吗, 再详细就直接写代码了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
officecn交流
2015-05-29 · 知道合伙人软件行家
officecn交流
知道合伙人软件行家
采纳数:494 获赞数:980
中山大学毕业,从事IT行业16年.主要从事ERP CRM HRM等软件的开发,熟悉access sql server office vb vba c#

向TA提问 私信TA
展开全部
'============================================================================================================================
'-函数名称: AutoNum
'-功能描述: 具有断号重续功能的自动编号函数,支持文本型和长整型数值的自动编号
'-输入参数: 参数1:TableName 必需的,表名
' 参数2:FieldName 必需的,自动编号字段名
' 参数3:Prefixal 可选的,编号前缀,编号字段数据类型为文本时才起作用
' 参数4:Digit 可选的(文本型编号时为必需),文本型编号位数(不包含前缀的)
' 参数5:SerialNumber 可选的,设为true时使用断号重续,设为false时不理会断号,只在已有最大编号上加1
'-其它说明: 使用文本型自动编号时,如果记录数目可能会比较大时,建议使用含有日期的前缀或将编号位数设大一些,否则如果达到编号
' 上限将不能添加记录
'
'-使用注意: 调用的自动编号字段必须设置唯一索引,并且不能允许为空,最好是作为主键使用
'-返回参数: 正常情况下返回从1开始的最小断号,如无断号返回最大号加1;出错时返回Null
'-兼 容 性: 字段的数据类型必须为文本型或者长整型数值,如设成其它均会只返回Null
'-使用示例: Me.OrderID.DefaultValue="""" & AutoNum("Orders","OrderID","OD" & Format(Date(),"yyyymm"),5) & """"
' 返回值:OD19910100001,OD19910100002,OD19910400001,……
'-相关调用:
'-作 者: 红尘如烟
'-创建日期: 20010-4-25
'=============================================================================================================================
Function AutoNum(TableName As String, FieldName As String, _
Optional Prefixal As String, Optional Digit As Integer, _
Optional SerialNumber As Boolean = False) As Variant
On Error GoTo Err_AutoNum

Dim strSQL As String
Dim intDataType As Integer
Dim rst As DAO.Recordset
Dim strErrMsg As String
Dim intI As Integer
Dim strExpr As String

If TableName = "" Or FieldName = "" Then Err.Raise 3265
If TableName Like "[[]*]" Then TableName = Mid$(TableName, 2, Len(TableName) - 2)
If FieldName Like "[[]*]" Then FieldName = Mid$(FieldName, 2, Len(FieldName) - 2)
strExpr = Prefixal
strExpr = Replace(strExpr, "'", "''")
intDataType = CurrentDb.TableDefs(TableName).Fields(FieldName).Type
If intDataType = 10 Then
If Digit < 1 Then Err.Raise 1, , "文本型自动编号的编号位数不能小于1位。"
If SerialNumber Then
strSQL = "SELECT (Right([" & FieldName & "]," & Digit & ")+0) AS Expr1000 FROM [" & TableName & "] " & _
"WHERE Left([" & FieldName & "]," & Len(Prefixal) & ")= '" & strExpr & "' " & _
"ORDER BY (Right([" & FieldName & "]," & Digit & ")+0);"
Else
strSQL = "SELECT Max(Right([" & FieldName & "]," & Digit & ")+0) AS Expr1000 FROM [" & TableName & "] " & _
"WHERE Left([" & FieldName & "]," & Len(Prefixal) & ")= '" & strExpr & "';"
End If
ElseIf intDataType = 4 Then
If SerialNumber Then
strSQL = " SELECT [" & FieldName & "] AS Expr1000 FROM [" & TableName & "] ORDER BY [" & FieldName & "];"
Else
strSQL = " SELECT Max([" & FieldName & "]) AS Expr1000 FROM [" & TableName & "];"
End If
Else
Err.Raise 2, , "不支持此数据类型的自动编号。"
End If
' Debug.Print strSQL
Set rst = CurrentDb.OpenRecordset(strSQL)
If rst.RecordCount = 0 Then
AutoNum = 1
Else
If SerialNumber Then
rst.MoveLast
If rst!Expr1000 = rst.RecordCount Then
AutoNum = rst.RecordCount + 1
Else
rst.MoveFirst
For intI = 1 To rst.RecordCount
If rst!Expr1000 <> intI Then
AutoNum = intI
Exit For
Else
rst.MoveNext
End If
Next
End If
Else
AutoNum = Nz(rst!Expr1000, 0) + 1
End If
End If
If intDataType = 10 Then
If Len(AutoNum) > Digit Then
Err.Raise 3, , "自动编号已达最大上限,不能再添加记录。"
Else
AutoNum = Prefixal & Format$(AutoNum, String$(Digit, "0"))
End If
End If

Exit_AutoNum:
Set rst = Nothing
Exit Function

Err_AutoNum:
AutoNum = Null
Select Case Err
Case 3265
strErrMsg = "指定的表名或字段名不存在。"
Case Else
strErrMsg = Err.Description
End Select
MsgBox "#" & Err & vbCrLf & strErrMsg, vbCritical, "自动编号函数出错"
Resume Exit_AutoNum
End Function

转至《Office中国论坛》
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式