Office中国论坛/Access中国论坛

标题: 如何得到这样的编号? [打印本页]

作者: westlake76    时间: 2014-5-10 15:44
标题: 如何得到这样的编号?
我看到在一个用Access2003做的表格中,包含这些栏目:客户代码Customer,出运日期 ShippingDate, 订单编号代码CODE

当输入客户代码和出运日期后会自动生成这样的编号代码: 客户代码+出运日期,如果同一客户在同一天有多个订单要出运,后面会自动加上A, B, C… 的后缀。

在原文件中无法看见是怎么做的。现在我想把这个方法在Access2007以上的版本中复制出来。
我把CODE的类型设为Calculated, 然后在Expression中输入:  [Customer] & [ShippingDate],

在以下表格中输入信息后前三行的代码很容易就得到了。问题是客户OZ在同一天有三个订单要出运(每个订单的金额是不同的),而每个CODE必须是不同的,这样在连接发票算钱时才能搞清楚,所以在多于一票时,后面应自动加上A, B, C… 的后缀,可我不知道如何才能实现这个自动加后缀的功能。敬请大家指教!

Customer                 ShippingDate                      CODE
  OZ                            6/3/2014                  OZ6/3/2014
  CD                          6/9/2014                  CD7/9/2014
  EF                            6/5/2014                  EF7/5/2014
  OZ                            6/3/2014                  OZ6/3/2014A
  OZ                            6/3/2014                  OZ6/3/2014B

还有如果我希望日期在CODE里变为OZ060314,CD070914这样的格式,又该如何实现呢?
请指教!谢谢!
作者: smileyoufu    时间: 2014-5-10 15:56
写一个自定义函数,把3个条件联合起来即可。在论坛内搜一下“自动编号”,很多此类的例子。
作者: westlake76    时间: 2014-5-10 16:06
谢谢回复,问题是我只会在后面加上数字自动编码,而不知如何在不同的客户后面分别加上A、B字母编码,搜索了也没查到,也不会写函数。
哪位高手能帮我写一下这个函数?
万分感谢!
作者: smilingkiss    时间: 2014-5-10 21:37
本帖最后由 smilingkiss 于 2014-5-10 21:59 编辑

思路:通过n=dcount()查找并确定当前客户当天有多少个已经存在的订单,然后加上相应字符在后面即可(例如n=1的时候加上A,n=2的时候加上B……)关于n=1的时候对应A,n=2的时候对应B……语句可以参考如下:
Dim cc As String

    For n = 1 To 6  
       cc = Chr(n+64)      'A的ascii码是65,B是66,C是67……,chr是把ascii码转换成字符串的函数
    Next n


作者: westlake76    时间: 2014-5-11 02:41
谢谢你的回复,问题是不知道客户当天已存在多少个订单。客户可以在不同日期给你下订单,但都是这一天出运的,这个功能是不需查询任何记录,当有新订单来时只要输入客户代码和出运日期就自动生成这个code了,当看到code后面没加字母时,就知道这个客户这天要出运一单,看到加上字母时就知道有多单要出运了。

敬请帮助!
作者: todaynew    时间: 2014-5-11 19:57
westlake76 发表于 2014-5-10 16:06
谢谢回复,问题是我只会在后面加上数字自动编码,而不知如何在不同的客户后面分别加上A、B字母编码,搜索了 ...

function GetNewCODE(byval CurrentCustomer as string,byval CurrentShippingDate as date) as string
   dim str as string
   dim cnt as integer
   
   cnt=dcount("*","阁下的数据表名称","Customer='" & CurrentCustomer & "' and ShippingDate=#" & CurrentShippingDate & "#")

   if cnt=0 then
       str=CurrentCustomer & CurrentShippingDate
   else
       str=chr(asc("A")+cnt-1)
       str=CurrentCustomer & CurrentShippingDate & str
   end if
   
   GetNewCODE=str
end function


作者: 玉树TMD临风    时间: 2014-5-11 21:58
todaynew 发表于 2014-5-11 19:57
function GetNewCODE(byval CurrentCustomer as string,byval CurrentShippingDate as date) as string
...

版主好有耐心啊
作者: westlake76    时间: 2014-5-17 13:20
尊敬的Todaynew老师,

非常感谢您写了这么详细的编码,可因为我是一个新手,以前没有用过这一功能,我不知道该如果运行Function。 当我把这个Function 拷贝到Module下,点击运行后,总是出来一个窗口让输入名字保存,但保存下来的却是一个与此毫不相干的空白micro. 我作了搜索,但却没有发现有效的方法,只好向老师再次请教。

能否烦请老师再详细指点一下如何才能让这个Function 加到表格上去?

再次感谢!
作者: todaynew    时间: 2014-5-17 17:13
本帖最后由 todaynew 于 2014-5-17 17:18 编辑
westlake76 发表于 2014-5-17 13:20
尊敬的Todaynew老师,

非常感谢您写了这么详细的编码,可因为我是一个新手,以前没有用过这一功能,我不 ...

假设你有一个针对这个表的管理窗体,那么这个窗体的类代码文件中粘贴上这个函数。

然后在新增按钮的事件中调用这个函数,返回要新增记录的新编码,最后用这个新编码与其他控件的值编写sql语句字符串进行新增操作就可以了。







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