Office中国论坛/Access中国论坛

标题: 不规则自动编号寻求好的解决办法 [打印本页]

作者: 楚狐    时间: 2003-2-25 20:24
标题: 不规则自动编号寻求好的解决办法
客户的输入是不规则的,但需自动编号,寻求解决办法:如我输入1时,下面的记录自动编号2,3,4,5;输入A1时,下面记录自动编号A2,A3,A4,A5;输入500时,下面的记录自动编号501,502,503,504,即有可能输入的内容不规则,再在输入内容的基础上+1自动编号。
作者: zhengjialon    时间: 2003-2-25 20:49
我的思路:
把各种有可能用到的编码方法写到表里去,然后用户才自行选择对应方法。(仅思路,未经试验,仅供参考,欢迎大家有好的提议)
作者: 李寻欢    时间: 2003-2-25 21:32
有几个疑问:
1、第一个号码定下以后,跟在后面的是不是也定型了?比如第一个定为1,那下面都是数字,不会出现今天输1,明天输A1,后天输B1。
2、是不是后面一定是数字?这很关键。要是有这种情况就很难:A1B
如果我提的这两个问题的答案都是肯定的,那就不难。只需用Dmax取出最大号码,然后用LEN测定号码的长度,再做一个循环,在循环体内从最后一个字符开始逐位取字符,存在一个变量A里,当取到不是数字型的字符时就停止,然后把取完数字后剩下的字符存在另一变量B里,新的号码就是B&val(A)+1。
需注意的问题:比如"I001",用上面的方法取出A="I",B="001",新号码=A&val(001)+1=I2
这就出问题了,所以要加上format函数把"0"补足。
作者: 楚狐    时间: 2003-2-25 21:42
多谢寻欢兄的指点,字母后面一定是数字,但字母不是固定和A,有可能是其他字母,这个可通过取输入框的输入内容得到。这个编号是子窗体中的编号,每张主单中子窗体编号都不同的。



[此贴子已经被作者于2003-2-25 13:42:08编辑过]


作者: yachtz    时间: 2003-2-28 01:19
其实楚狐的这个问题更完善的解决办法还关系的表的设计。我的思路是:
客户表包括:ID(自动编号)、客户编码(字符)等字段
记录如:
   ID          客户编码
    1            A1
    2            A2
    3            AAA001
    4            AAA002
    5            iej01
    6            iej02
   ...            ...
当窗体进入新记录时,查找最大的ID,再用李寻欢的方法编号,可以保证客户编码与最近编码前面的字母相同




[此贴子已经被作者于2003-2-27 17:19:24编辑过]


作者: 李寻欢    时间: 2003-2-28 02:11
我明白您的意思,只要后面一定是数字就行了,至于编号在哪都没关系,只要能用Dmax取出最大号strOldMax

dim strOne,strNum,strString,newNo,NumFormat as string
dim i,j,StrLen,NumLen as Integer

'开始取出后面的数字
StrLen=len(strOldMax)
strOne=right(strOldMax,1)
for i=1 to strLen
    strOne=(mid(strOldMax,StrLen-i,1)
    if IsNumeric(strOne) then
         strNum=strOne & strNum
    else
         exit for
    end if
next

NumLen=Len(strNum)

'把前面的字符保存在变量strString里
strString=left(strOldMax,StrLen-NumLen)

'为补“0”做准备
for j=1 to NumLen
    NumFormat=NumFormat & "0"
next

'生成新号码
newNo=strString & format(val(strNum)+1,NumFormat)

号码的生成程序大致是这样,如何取出最大号码应该不难。


[此贴子已经被作者于2003-2-27 18:11:00编辑过]






欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3