最简单的《高效无重复自动编码解决方案 》-litao
Access软件网QQ交流学习群(群号码198465573),欢迎您的加入!
首页 >技术文章> Access数据库-模块/函数/VBA


最简单的《高效无重复自动编码解决方案 》

发表时间:2014/10/18 11:23:28 评论(4) 浏览(7367)  评论 | 加入收藏 | 复制
   
摘 要:通过取表中编号字段的最大数,再累加1 得到新的编号。
正 文:

通过取表中编号字段的最大数,再累加1 得到新的编号。

注:避免编号重复的问题,简单方法:是将 编号字段 设置为【主键】或【唯一性索引】。

如果编号重复会导致错误,来避免。这需要,新增记录后检查是否成功。

当然,如果是单用户,不存在这个问题。


比如: 编号=ABC201409140001  ...... ABC201409149999

编号头=ABC20140914


’下面示例的编号是字符串格式

Function 新编号(表名, 字段名, 编号头) As String
    Dim L As Long, 编号 As String, 流水号 As Long
    L = Len(编号头)
    编号 = Nz(DMax(字段名, 表名, "Left(" & 字段名 & ", L) = '" & 编号头 & "'"))
    If 编号 = "" Then
        流水号 = 1 '初始编号1
    Else
        流水号 = Mid(编号, L + 1) + 1 '现有流水号 加1
    End If   
    新编号 = 编号头 & Format(流水号, "0000")'按格式新建编号(4位流水号)
End Function


'---有网友需要避免【断号】问题。我写了个函数,试试吧! 我未测试

Function 删除并收拢编号(表名, 字段名, 编号头, 删除编号) As Boolean
    Dim SQLstr As String
    Dim L As Long
    L = Len(编号头)
    '--删除编号
    SQLstr = "Delete " & 表名 & " Where [" & 字段名 & "]='" & 删除编号 & "'"
    DoCmd.RunSQL SQLstr 

    '--收拢编号
    SQLstr = "Update " & 表名 & " SET [" & 字段名 & "]='" & 编号头 & "'+ CStr(CLng( MID([" & 字段名 & "]," & L + 1 & "))-1) "
    '【 MID([" & 字段名 & "]," & L + 1 & ")】=取字段流水号;
    '【CLng( MID([" & 字段名 & "]," & L + 1 & "))-1】=流水号 转换为数字,再减1。
    SQLstr = SQLstr & " Where Left(" & 字段名 & ", L) = '" & 编号头 & "'AND [" & 字段名 & "]>'" & 删除编号 & "'"    '条件语句
    Debug.Print SQLstr
    DoCmd.RunSQL SQLstr
    删除并收拢编号 = True
    Exit Function
err1:
End Function


Access软件网交流QQ群(群号:198465573)
 
 相关文章
【access源码示例】高效无重复自动编码解决方案  【红尘如烟  2011/1/30】
【access源码示例】导入导出系列——Excel数据高效导入示例  【红尘如烟  2011/5/24】
[access查询]【access技巧】最小断号查找的最高效方法(...  【红尘如烟  2012/5/22】
高效的自动编号函数  【网行者  2013/1/18】
利用红尘如烟老师《高效无重复自动编码解决方案》如何实现按日期重新开...  【cspa  2013/7/11】
常见问答
技术分类
相关资源
文章搜索
关于作者

litao

文章分类

文章存档

友情链接