Access交流中心

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

有关自动编码的问题

伴影独酌  发表于:2020-09-08 12:07:35  
复制

在窗体文本框中的默认值中输入:="RP" & Format(Date(),"yymmdd") & Format(Nz(DMax("Right(单号,3)","流水号","mid(单号,3,6)='" & Format(Date(),"yymmdd") & "'"))+1,"000")

可以自动编号。

但如果输入="RP00" & Format(Date(),"yymmdd") & Format(Nz(DMax("Right(单号,3)","流水号","mid(单号,3,8)='" & Format(Date(),"yymmdd") & "'"))+1,"000")

就不能自动编号,为什么?请教各位前辈,加两个“00”后就无法自动编码了,怎样写才能正确编码?望前辈们帮我解释。谢谢!

 

Top
张志 发表于:2020-09-08 14:08:43
估计和 mid(单号,3,6)有关系,因为你前面加了2个00,所以把3改成5试试。

chinasa 发表于:2020-09-08 14:10:17
看下是不是 mid(单号,3,8) 的问题。把8改为6试试。

伴影独酌 发表于:2020-09-08 14:16:34
谢谢大家的回复,将mid(单号,3,8)的"8"改成什么都不行。

chinasa 发表于:2020-09-08 14:26:23

你用="RP"....是可以的,改为="RP00" .....就不行了,也就是后面的....内容都一致的,对吧?

如果是这样,请先用="RP"....并实际验证可用,然后就在这个基础行加上00,再试下看。



西出阳关无故人 发表于:2020-09-08 16:03:30

试一下:

="RP00" & Format(Date(),"yymmdd") & Format(Nz(DMax("Right(单号,3)","流水号","mid(单号,5,6)='" & Format(Date(),"yymmdd") & "'"))+1,"000")

因为前缀为"RP00",所以应该从第5位开始,年月日为6位.

比如现有编号为"RP00200908001",紫色的才是符合Format(Date(),"yymmdd")的条件的日期部分,即第5位开始,共6位.如果用mid(单号,3,8),查找的是"00200908",就永远找不到符合Format(Date(),"yymmdd")条件的记录



伴影独酌 发表于:2020-09-08 16:04:59
我试了,用“RP”验证编码尾数加“1”,但加我两个“00”后就不行了,我将“3,6”改成任何“3,X”都不行。

西出阳关无故人 发表于:2020-09-08 16:16:29
加"00"后,将“3,6”改成任何“3,X”,是从第三位开始,查找x个字符,结果是"00...".但是条件Format(Date(),"yymmdd") & "'")永远不会出现"00"的年份,除非date为2000年或2100年...,所以出现   验证编码尾数加“1”  不正确.

西出阳关无故人 发表于:2020-09-08 16:19:41

顺便提醒一下,在窗体记录更新后,还要刷新一下控件,否则连续录入时,还会不正确.

例如:

Private Sub Form_AfterUpdate()
Me.单号.DefaultValue = """" & "RP00" & Format(Date, "yymmdd") & Format(Nz(DMax("Right(单号,3)", "流水号", "mid(单号,5,6)='" & Format(Date, "yymmdd") & "'")) + 1, "000") & """"
End Sub




伴影独酌 发表于:2020-09-08 16:43:57
谢谢大家!特别谢谢西出阳关无故人版主你将这个规律都说出来了。非常感谢!刚才试了一下,用Me.单号.DefaultValue = """" & "RP00" & Format(Date, "yymmdd") & Format(Nz(DMax("Right(单号,3)", "流水号", "mid(单号,5,6)='" & Format(Date, "yymmdd") & "'")) + 1, "000") & """"语句后结果是“RP00200908801”后将DMax("Right(单号,3)"改成了DMax("Right(单号,1)"结果是“RP00200908002”。为什么改成Right(单号,1)就成了,这个还是不懂。总之谢谢大家回复。

西出阳关无故人 发表于:2020-09-08 17:07:28

Right(单号,1)   是从右边截取"单号"字符串(例如:RP00200908001),长度为1,即红色的部分"1";

Right(单号,3)   是从右边截取"单号"字符串(例如:RP00200908001),长度为1,即紫色的部分"001";

RP00200908001  ----绿色的是自动编号的前缀,蓝色的是年月日,紫色的是流水号.

至于你更改前后的变化,应该是窗体重新打开或从设计视图变为窗体视图,默认值已经刷新的缘故.

在表达式="RP00" & Format(Date(),"yymmdd") & Format(Nz(DMax("Right(单号,3)","流水号","mid(单号,3,8)='" & Format(Date(),"yymmdd") & "'"))+1,"000") 中,蓝色部分表示流水号要格式为3位,不足3位需要在前面补0,所以,只能使用 Right(单号,3),而不能使用   Right(单号,1)



伴影独酌 发表于:2020-09-08 17:31:12
哦!知道了,谢谢!文本框的默认值和代码表达式也是有区别的。明白了,谢谢!

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