设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12345下一页
返回列表 发新帖
查看: 16395|回复: 44
打印 上一主题 下一主题

[模块/函数] 全自定义自动编号,带断号检测补号功能

[复制链接]
跳转到指定楼层
1#
发表于 2008-4-2 22:51:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
适用格式 : XXX-YYYYMMDD-0000

  Public Function ZDYBH(StrTable As String, StrField As String, StrBH As String, Optional FDay As String = "YYMMDD", Optional ILen As Integer = 3, Optional B As Boolean = False) As String
'==================================================================
'功能: 自定义用户编号,带断号重号检测功能
'格式: "XXX"-"日期格式 "-"0000"
'      StrTable 为任意表名称
'      StrField 为任意字段名称
'      StrBH    编码类型 , 可自义任意格式
'      FDay     日期格式 默认日期格式为:YYMMDD",其他符合FORMAT格式的如 YYYYMM,YYYY,YYYYMMDD
'      ILen     为数字格式化长度 , 默认长度为3 代表 000 格式
'      B        为是否要检测断号 ,默认为FALSE 不检测
'用法:  ZDYBH("产量表", "产量ID", "LDH")
'       ZDYBH("产量表", "产量ID", Me.Combo1)
'       ZDYBH("产量表", "产量ID", Me.Combo1, "YYYY")
'       ZDYBH("产量表", "产量ID", Me.Combo1, , 4, True)
'作者: andymark
' QQ : 42503577 , ewang11@163.com
'日期: 2008-4-2
'===============================================================
Dim Rs As New ADODB.Recordset
Dim Conn As New ADODB.Connection
Dim Str As String
Dim Num As Integer
Dim TNum As Integer
Dim StrWhere As String
Dim StrOrderWhere As String
Dim StrOrderWhereDesc As String
Set Conn = CurrentProject.Connection
Str = StrBH & "-" & Format(Now(), "" & FDay & "") & "-"
StrWhere = "select " & StrField & " from " & StrTable & " where " & StrField & " like  '" & Str & "%'"
StrOrderWhere = StrWhere & " Order by  " & StrField & ""
StrOrderWhereDesc = StrWhere & " Order by  " & StrField & " DESC"
Rs.Open StrOrderWhereDesc, Conn, adOpenKeyset, adLockOptimistic
  If Rs.EOF Then
   
      Num = 0
  
    Else
   
      Num = Right(Rs.Fields("" & StrField & ""), ILen)
   
      If B = True Then
      
         If CInt(Num) <> Rs.Fields.Count Then
         
            Rs.Close
            Rs.Open StrOrderWhere, Conn, adOpenKeyset, adLockOptimistic
         
            Num = 0
         
            Do While Not Rs.EOF
           
               TNum = CInt(Right(Rs.Fields("" & StrField & ""), ILen))
               
               If TNum = Num Then
                  
                   MsgBox StrBH & "-" & Format(Now(), "" & FDay & "") & "-" & Format(Num, String(ILen, "0")) & "存在重号,请检查数据的"
                   Exit Function
                 Else
                 
                   If TNum - Num = 1 Then
                 
                      Num = TNum
                     Else
               
                      Exit Do
               
                   End If
               
                End If
              
              Rs.MoveNext
           
            Loop
        
        
         End If
     
      End If
   
  End If
ZDYBH = StrBH & "-" & Format(Now(), "" & FDay & "") & "-" & Format(Num + 1, String(ILen, "0"))
Set Rs = Nothing
Set Conn = Nothing
End Function

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享分享 分享淘帖 订阅订阅
2#
发表于 2008-4-2 23:15:49 | 只看该作者
谢谢版主!慢慢研究
3#
发表于 2008-4-2 23:38:21 | 只看该作者
大哥,能给个库吗?。。
4#
 楼主| 发表于 2008-4-3 00:03:58 | 只看该作者
已上传简单的例子

点击这里给我发消息

5#
发表于 2008-4-3 00:38:54 | 只看该作者
这是个很实用的例子!!
6#
发表于 2008-4-3 06:25:03 | 只看该作者
[:50]
7#
发表于 2008-4-3 06:30:57 | 只看该作者
thanks,收藏了
8#
发表于 2008-4-3 08:13:16 | 只看该作者
[:50]
9#
 楼主| 发表于 2008-4-3 11:31:48 | 只看该作者
重新修正, 支持重号检测
例子已更新
10#
发表于 2008-4-3 14:07:49 | 只看该作者
非常好的实例,收藏了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-25 08:40 , Processed in 0.109433 second(s), 35 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表