Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

[5分]生成明细编号,要能控制编号月份不能在已有月份之前

readandwalk  发表于:2014-11-10 11:18:36  
复制

恳请各位老师、学友解答:


代码日期编号控制的问题:

有这样一段代码

Private Sub AutoMxID()
'功能:生成明细编号,控制编号不能生成以前月份的
    Dim YM As String
    Dim YMold As String
    '使jkid文本框有效,写入数据
    Me.jkid.Enabled = True
    Me.jkid.SetFocus
    '生成编号前缀,格式为DF200701,即年四位,月两位
    YM = "DF" & Year(Date) & Format(Month(Date), "00")
    If CheckRecords("tbldck") = True Then    'checkRecords函数说明见平台帮助第十二章
        '如果表中存在记录,则去取得表最后一条记录的年月
        YMold = Left(DLast("[jkid]", "tbldck"), 8)    '取tbldck表中最后一条记录的jkid字段的值的前8位
        If YM = YMold Then    '如果系统月份与最后一条记录月份相同,则增加1
            Me.jkid = acchelp_autoid(YM, 4, "tbldck", "jkid ")    'acchelp_autoid函数说明见平台帮助第十二章"
        Else    '如果不相同,则按新月份从1开始编号
        
            If Mid(YM, 3, 6) < Mid(YMold, 3, 6) Then
               MsgBox "系统日期有误,请修改", vbInformation, "提示"
               Me.bz.SetFocus
            Else
                     Me.jkid = YM & "0001"
            End If
        
                  
        End If
    Else
        '如果表中不存在记录,则生成第一条编号
        Me.jkid = acchelp_autoid(YM, 4, "tbldck", "jkid")
    End If


    '让xm文本框获得焦点
    Me.xm.SetFocus
    '使用jkid文本框无效,以防止操作员误修改数据
    Me.jkid.Enabled = False
End Sub

-----------------------------------------------------------------------------------------------------------分割线


        代码中红色部分不能够起到作用。红色部分的作用是阻止以前月份的记录被增加上去:比如最后一条记录是DF2014081234,那么即使现在的系统日期是20120808.也不能够增加一条编码为2012080001的记录。

     实际运行中红色代码起不到应有的作用,2012年的代码也被增加上了?!

    恳请老师解答?

谢谢



 

Top
chinasa 发表于:2014-11-10 13:43:39

把红色部分改成下面的内容,看看消息框的内容是否与你预料的一样,如果跟你想的内容不一样则找为什么会不一样的原因,如果与你预料的一样,则解决比较的算法。

msgbox "YM=" & YM & "  ;  YMOD=" & YMOLD

 If Mid(YM, 3, 6) < Mid(YMold, 3, 6) Then
               MsgBox "系统日期有误,请修改", vbInformation, "提示"
               Me.bz.SetFocus

 



风行 发表于:2014-11-10 15:01:51
类似含有年月日的自动编号函数[Access软件网]
http://www.accessoft.com/article-show.asp?id=5501

readandwalk 发表于:2014-11-11 15:55:44

把红色部分改成下面的内容,看看消息框的内容是否与你预料的一样,如果跟你想的内容不一样则找为什么会不一样的原因,如果与你预料的一样,则解决比较的算法。

msgbox "YM=" & YM & "  ;  YMOD=" & YMOLD

 If Mid(YM, 3, 6) < Mid(YMold, 3, 6) Then
               MsgBox "系统日期有误,请修改", vbInformation, "提示"
               Me.bz.SetFocus

提示:所需类型库或向导不是一个vba工程

并且只显示    

          msgbox "YM=" & YM&

 



chinasa 发表于:2014-11-12 11:00:42

msgbox ym

msgbox YMold

看看这样有问题吗?

另外,把你的IF语句简化下看看。先不要判断那么多,这样语句简化了,容易把问题出在哪里找到。



总记录:4篇  页次:1/1 9 1 :