Access交流中心

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

回复 加入收藏帖  复制
我要提问 帖子上移

[5分]禁止生成以前年度和月份的编号的问题

readandwalk 等级: 普通会员▲ 积分:138 金币:40 来自:泰安Access交流中心 发表于:2013-08-29 10:28:07   已结帖
楼主

有这样一段代码:

 

Private Sub AutoMxID()
'功能:生成明细编号
    Dim YM As String
    Dim YMold As String
    '使jkid文本框有效,写入数据
    Me.jkid.Enabled = True
    Me.jkid.SetFocus
    '生成编号前缀,格式为DF200701,即年四位,月两位

    YM = "QN" & 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开始编号
            Me.jkid = YM & "0001"
        End If
    Else
        '如果表中不存在记录,则生成第一条编号
        Me.jkid = acchelp_autoid(YM, 4, "tbldck", "jkid")
    End If

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

 

 

 

 我的问题是---

如何在上面的代码中禁止写入以前年度和月份的数据?
即:
  如果现在是201308,但是电脑系统日期是201212,如何禁止写入以前年度和月份的记录?让记录按日期只能向后编写增加。

 

 

access培训  诚聘access开发人员

    readandwalk
      获得社区协助:请教问题(即发帖)40篇,其中获得解决的37篇;
      协助社区成员:协助他人(即回帖)17篇,其中被设为【最佳答案】的1篇;
      协助我们社区:发布技术文章1篇,邀请了16名新会员注册本社区(如何邀请会员注册,详见:http://www.accessoft.com/sitehelp.asp)。
Top

扫描下方工作人员的微信二维码加微信,邀您加入Access课堂微信群,进入一个技术交际圈:

网站工作人员微信

漏蛧尐魚℡ 等级:贵宾★★★★★ 积分:1388 金币:3200 来自:昆山Access交流中心 发表于2013/8/29 10:32:31 
1楼 得分: 0

此编号是按照电脑系统日期来生成的,而且此自动编号函数是被封装了无法修改。



    很高兴与您就本帖子进行交流,如果我的回答已经解决了您的问题,请点击上方的“最佳答案”,这样本帖子就不会在“待解决问题区”显示了,我也将获得2个积分奖励,并不会减少您的积分!
    漏蛧尐魚℡
      获得社区协助:请教问题(即发帖)0篇,其中获得解决的0篇;
      协助社区成员:协助他人(即回帖)444篇,其中被设为【最佳答案】的85篇;
      协助我们社区:发布技术文章80篇,邀请了1名新会员注册本社区(如何邀请会员注册,详见:http://www.accessoft.com/sitehelp.asp)。
爱好 等级:一星会员 积分:48 金币:160 来自:北京Access交流中心 发表于2013/8/29 11:06:19 
2楼 得分: 0

楼主的问题是:当电脑的系统日期被改动后,如何能杜绝生成错误的编号。

建议:1、登入时给某个变量一个正确的日期,也就是不取电脑系统日期。代码中的DATE()函数,改成取变量的年和月。

      或者2、判断取到的年和月,是否小于以前数据的年和月。



    很高兴与您就本帖子进行交流,如果我的回答已经解决了您的问题,请点击上方的“最佳答案”,这样本帖子就不会在“待解决问题区”显示了,我也将获得2个积分奖励,并不会减少您的积分!
    华齐
      获得社区协助:请教问题(即发帖)9篇,其中获得解决的3篇;
      协助社区成员:协助他人(即回帖)70篇,其中被设为【最佳答案】的16篇;
      协助我们社区:发布技术文章4篇,邀请了1名新会员注册本社区(如何邀请会员注册,详见:http://www.accessoft.com/sitehelp.asp)。
煮江品茶 等级:荣誉管理员★★★★★ 积分:5136 金币:17920 来自:武汉Access交流中心 发表于2013/8/29 11:50:18 
3楼 得分: 0
取服务器时间

    很高兴与您就本帖子进行交流,如果我的回答已经解决了您的问题,请点击上方的“最佳答案”,这样本帖子就不会在“待解决问题区”显示了,我也将获得2个积分奖励,并不会减少您的积分!
    煮江品茶
      获得社区协助:请教问题(即发帖)11篇,其中获得解决的7篇;
      协助社区成员:协助他人(即回帖)4989篇,其中被设为【最佳答案】的1581篇;
      协助我们社区:发布技术文章448篇,邀请了47名新会员注册本社区(如何邀请会员注册,详见:http://www.accessoft.com/sitehelp.asp)。
readandwalk 等级:普通会员▲ 积分:138 金币:40 来自:泰安Access交流中心 发表于2013/8/29 17:49:18 
4楼 得分: 0

谢谢楼上三位!

  二楼师兄最接近我的要求,楼主的问题是:当电脑的系统日期被改动后,如何能杜绝生成错误的编号。

   我想用您第二个思路解决问题:2、判断取到的年和月,是否小于以前数据的年和月。

   我想增加如下语句:

             if ym>ymold then                      '如果 取到的系统日期 大于 表的最后一条记录的日期

               Me.jkid = YM & "0001"              ‘则生成新记录啊

            else                                   ’否则

              msbox=“请修改本机系统日期”          ‘弹出消息框提示

             end if 

  问题是:

       YM 和 YMold这两个String型变量能否直接比较?他们的格式为 QN201308,其中前面的QN固定。

           如果不能,该如何比较?

 

 

三楼答案也是好办法:只是服务器的时间有时候也会变动。



    readandwalk
      获得社区协助:请教问题(即发帖)40篇,其中获得解决的37篇;
      协助社区成员:协助他人(即回帖)17篇,其中被设为【最佳答案】的1篇;
      协助我们社区:发布技术文章1篇,邀请了16名新会员注册本社区(如何邀请会员注册,详见:http://www.accessoft.com/sitehelp.asp)。
cspa 等级:贵宾★★★★★ 积分:719 金币:360 来自:北京Access交流中心 发表于2013/8/29 20:20:45 
5楼 得分: 0
可用mid函数和字符串转日期函数先将2个字符串转为日期格式再比较。

    很高兴与您就本帖子进行交流,如果我的回答已经解决了您的问题,请点击上方的“最佳答案”,这样本帖子就不会在“待解决问题区”显示了,我也将获得2个积分奖励,并不会减少您的积分!
    cspa
      获得社区协助:请教问题(即发帖)21篇,其中获得解决的13篇;
      协助社区成员:协助他人(即回帖)808篇,其中被设为【最佳答案】的255篇;
      协助我们社区:发布技术文章9篇,邀请了0名新会员注册本社区(如何邀请会员注册,详见:http://www.accessoft.com/sitehelp.asp)。
煮江品茶 等级:荣誉管理员★★★★★ 积分:5136 金币:17920 来自:武汉Access交流中心 发表于2013/8/30 16:09:23 
6楼 得分: 0
如果服务器和本地机都在时间上胡乱变化的话,就不必采用按日期进行编码的处理方式了,直接用流水号编码即可。编码通常的意义是唯一性的标识一条记录,不必赋予它太多含义。

    很高兴与您就本帖子进行交流,如果我的回答已经解决了您的问题,请点击上方的“最佳答案”,这样本帖子就不会在“待解决问题区”显示了,我也将获得2个积分奖励,并不会减少您的积分!
    煮江品茶
      获得社区协助:请教问题(即发帖)11篇,其中获得解决的7篇;
      协助社区成员:协助他人(即回帖)4989篇,其中被设为【最佳答案】的1581篇;
      协助我们社区:发布技术文章448篇,邀请了47名新会员注册本社区(如何邀请会员注册,详见:http://www.accessoft.com/sitehelp.asp)。
readandwalk 等级:普通会员▲ 积分:138 金币:40 来自:泰安Access交流中心 发表于2013/8/31 14:31:31 
7楼 得分: 0

能在具体详细一些吗?

 

请5楼的老师帮忙写出表达式



    readandwalk
      获得社区协助:请教问题(即发帖)40篇,其中获得解决的37篇;
      协助社区成员:协助他人(即回帖)17篇,其中被设为【最佳答案】的1篇;
      协助我们社区:发布技术文章1篇,邀请了16名新会员注册本社区(如何邀请会员注册,详见:http://www.accessoft.com/sitehelp.asp)。
爱好 等级:一星会员 积分:48 金币:160 来自:北京Access交流中心 发表于2013/9/2 12:04:01 
8楼 得分: 0

比较的2个变量是:YM2 = Year(Date) & Format(Month(Date), "00") ; YMold2=right(YMold,6)。试一试。

 



    很高兴与您就本帖子进行交流,如果我的回答已经解决了您的问题,请点击上方的“最佳答案”,这样本帖子就不会在“待解决问题区”显示了,我也将获得2个积分奖励,并不会减少您的积分!
    华齐
      获得社区协助:请教问题(即发帖)9篇,其中获得解决的3篇;
      协助社区成员:协助他人(即回帖)70篇,其中被设为【最佳答案】的16篇;
      协助我们社区:发布技术文章4篇,邀请了1名新会员注册本社区(如何邀请会员注册,详见:http://www.accessoft.com/sitehelp.asp)。
王三平 等级:一星会员▲ 积分:476 金币:2560 来自:秦皇岛Access交流中心 发表于2013/9/4 7:53:23 
9楼 得分: 0

同意6楼观点。



    很高兴与您就本帖子进行交流,如果我的回答已经解决了您的问题,请点击上方的“最佳答案”,这样本帖子就不会在“待解决问题区”显示了,我也将获得2个积分奖励,并不会减少您的积分!
    王三平
      获得社区协助:请教问题(即发帖)51篇,其中获得解决的48篇;
      协助社区成员:协助他人(即回帖)42篇,其中被设为【最佳答案】的11篇;
      协助我们社区:发布技术文章64篇,邀请了50名新会员注册本社区(如何邀请会员注册,详见:http://www.accessoft.com/sitehelp.asp)。
readandwalk 等级:普通会员▲ 积分:138 金币:40 来自:泰安Access交流中心 发表于2013/9/6 17:52:12 
10楼 得分: 0

Private Sub AutoMxID()
'功能:把文本型转成数值型,然后比较大小。

    Dim YM As String
    Dim YMold As String
   
    Dim YM1 As String
    Dim YM2 As String
   
    Dim VYM1 As Integer
    Dim VYM2 As Integer
     
     
    YM = "QN" & Year(Date) & Format(Month(Date), "00")

    YMold = Left(DLast("[qnid]", "tblqnb"), 8)    '取tblqnb表中最后一条记录的qnid字段的值的前8位

       
    YM1 = Year(Date) & Format(Month(Date), "00")
    YM2 = Mid(YMold(3, 8))
            
    VYM1 = Value(YM1)
    VYM2 = Value(YM2)
            
            If VYM2 > VYM1 Then
               MsgBox "系统日期有误,请修改", vbInformation, "提示"
               Me.xm.SetFocus
            Else
               Me.qnid = YM & "0001"
            End If
    

 

 

其中的

YM2 = Mid(YMold(3, 8))

提示有误 !

 

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



    readandwalk
      获得社区协助:请教问题(即发帖)40篇,其中获得解决的37篇;
      协助社区成员:协助他人(即回帖)17篇,其中被设为【最佳答案】的1篇;
      协助我们社区:发布技术文章1篇,邀请了16名新会员注册本社区(如何邀请会员注册,详见:http://www.accessoft.com/sitehelp.asp)。
zch 等级:一星会员▲ 积分:187 金币:120 来自:临安Access交流中心 发表于2013/9/7 15:46:07 
11楼 得分: 0
ym2=mid(ymold,3,8)

    很高兴与您就本帖子进行交流,如果我的回答已经解决了您的问题,请点击上方的“最佳答案”,这样本帖子就不会在“待解决问题区”显示了,我也将获得2个积分奖励,并不会减少您的积分!
    zch
      获得社区协助:请教问题(即发帖)17篇,其中获得解决的11篇;
      协助社区成员:协助他人(即回帖)73篇,其中被设为【最佳答案】的28篇;
      协助我们社区:发布技术文章3篇,邀请了2名新会员注册本社区(如何邀请会员注册,详见:http://www.accessoft.com/sitehelp.asp)。
cspa 等级:贵宾★★★★★ 积分:719 金币:360 来自:北京Access交流中心 发表于2013/9/7 20:51:40 最佳答案
12楼 得分: 5

没那么复杂吧,把4楼的  If YM > YMold Then  改为:

  If format(mid(YM,3,6) ,"yyyymm")>format(mid(YMold,3,6) ,"yyyymm") Then  

即可。或:

  If mid(YM,3,6) >mid(YMold,3,6)  Then  也行。因为你只取年月值按字符比较也不会出错。



    很高兴与您就本帖子进行交流,如果我的回答已经解决了您的问题,请点击上方的“最佳答案”,这样本帖子就不会在“待解决问题区”显示了,我也将获得2个积分奖励,并不会减少您的积分!
    cspa
      获得社区协助:请教问题(即发帖)21篇,其中获得解决的13篇;
      协助社区成员:协助他人(即回帖)808篇,其中被设为【最佳答案】的255篇;
      协助我们社区:发布技术文章9篇,邀请了0名新会员注册本社区(如何邀请会员注册,详见:http://www.accessoft.com/sitehelp.asp)。
readandwalk 等级:普通会员▲ 积分:138 金币:40 来自:泰安Access交流中心 发表于2013/9/12 16:42:36 
13楼 得分: 0

thank!!!!!!!!!!!!!!



    readandwalk
      获得社区协助:请教问题(即发帖)40篇,其中获得解决的37篇;
      协助社区成员:协助他人(即回帖)17篇,其中被设为【最佳答案】的1篇;
      协助我们社区:发布技术文章1篇,邀请了16名新会员注册本社区(如何邀请会员注册,详见:http://www.accessoft.com/sitehelp.asp)。
总记录:13篇  页次:1/1 9 1 :
您还没有在Access软件网登录不能回复帖子
  • 你没有登录,请点击后面链接登录:登录
  • 如果你没有注册,请点击后面链接注册:注册,注册完成后,请再次访问本页功能。