在MS Access VBA中生成连续发票号,#每年重新启动

时间:2010-09-11 21:27:22

标签: ms-access vba

我需要为Access(2010)数据库生成唯一的发票号。数字应采用年份+序号的格式,例如对于2010年的第1447号发票,20101447。我环顾了一会儿,但很多谷歌的结果建议使用自动编号,我很确定这不是一个非常可靠的方法。 (因为只保证自动编号是唯一的,没有别的)

目前,多个用户不会同时使用该数据库,但我不想使用完全被黑客攻击的解决方案。

修改 我还发现this website讨论了使用DMax函数的顺序编号。场景#2正是我想到的,我认为这对我的用例来说已经足够了。在完全输入并保存新发票之前,我将确保在罕见(对我而言)事件中通知用户数据库已更改。

EDIT2 仅供参考:编号方案不是财政要求,而只是我们的自定义编号。没有充分的理由,我不想改变。

2 个答案:

答案 0 :(得分:3)

如果您能够更改数据库架构:

  • 添加序号字段和a 年场。
  • 要获取发票号,请合并 适当的这些价值。
  • 插入时,您必须得到 当前年份然后查询 数据库的最大顺序 年份=当年的数字。
  • 在插页上使用这些值。

如果无法更改数据库架构:

  • 获取最大发票号码 发票编号以当前开头 年
  • 增加发票号。
  • 在插页上使用这些值。

修改

如果您可以添加另一个表,请使用一个表来存储每年的“最大”序号。每个插入都将锁定表,获取值然后递增它。可以将其视为发票号生成器表。

答案 1 :(得分:2)

解决方案包含示例代码

How To Implement Multi-user Custom Counters in DAO 3.5忽略本文中的3.5版本号。使用适合您的Access版本的任何DAO版本。

How To Implement Multiuser Custom Counters in Jet 4.0 and ADO 2.1 Windows XP SP3中当前版本的ADO为2.8,因此请忽略ADO 2.1部分并使用ADO 2.8。虽然2.1仍然有用。

当有人输入原本应于12月31日的发票时,1月2日会发生什么?这将会发生。