设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 3002|回复: 8
打印 上一主题 下一主题

[表] 如何得到这样的编号?

[复制链接]
跳转到指定楼层
1#
发表于 2014-5-10 15:44:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我看到在一个用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这样的格式,又该如何实现呢?
请指教!谢谢!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2014-5-10 15:56:59 | 只看该作者
写一个自定义函数,把3个条件联合起来即可。在论坛内搜一下“自动编号”,很多此类的例子。
3#
 楼主| 发表于 2014-5-10 16:06:52 | 只看该作者
谢谢回复,问题是我只会在后面加上数字自动编码,而不知如何在不同的客户后面分别加上A、B字母编码,搜索了也没查到,也不会写函数。
哪位高手能帮我写一下这个函数?
万分感谢!
4#
发表于 2014-5-10 21:37:58 | 只看该作者
本帖最后由 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

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

敬请帮助!
6#
发表于 2014-5-11 19:57:40 | 只看该作者
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

7#
发表于 2014-5-11 21:58:28 | 只看该作者
todaynew 发表于 2014-5-11 19:57
function GetNewCODE(byval CurrentCustomer as string,byval CurrentShippingDate as date) as string
...

版主好有耐心啊
8#
 楼主| 发表于 2014-5-17 13:20:03 | 只看该作者
尊敬的Todaynew老师,

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

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

再次感谢!
9#
发表于 2014-5-17 17:13:16 | 只看该作者
本帖最后由 todaynew 于 2014-5-17 17:18 编辑
westlake76 发表于 2014-5-17 13:20
尊敬的Todaynew老师,

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

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

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


您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-1 04:33 , Processed in 0.082209 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表