盟威 Access 快速开发平台 \ 在线帮助中心 \ 函数目录 \ GetAutoNumber 函数

GetAutoNumber 函数

简介

根据“自定义自动编号管理”界面中定义的编号规则,生成一个自定义的自动编号。

语法

GetAutoNumber (RuleName[, Domain][, Expr][, Prefixal][, DateFormat][, NumberDate][, Digit][, ReplenishOffNo][, ActiveConnection])

输入参数

参数名称 必需/可选 数据类型 说明
RuleName 必需 String 编号规则名称。缺省时不从编号规则维护表中读取定义信息。
Domain 可选 String 数据域名称,可以是表或查询名称。使用补充断号功能时,该参数为必需。
Expr 可选 String 编号字段名称。可以是表中存在的字段名,也可以是在查询中的计算字段,使用补充断号功能时,该参数为必需。
Prefixal 可选 String 编号前缀字符。在调用时将其它字段传给该参数,即可实现编号包含其它字段的内容。
DateFormat 可选 String 编号中要包含日期时,对应的日期格式。可以看做特殊的前缀部分,生成编号时会自动将当前系统日期,或指定的日期据此格式加入编号。
NumberDate 可选 Date 编号中包含日期时,默认是直接取当前系统日期进行格式化得到,如果给出该参数,将使用指定的日期进行格式化。
Digit 可选 String 不包含前缀字符和日期部分的纯数字连续号位数。如XS201001-001,其 Digit 位数是 3。
ReplenishOffNo 可选 VbTriState 是否补充断号。vbTrue 表示要补充断号,vbFalse 表示不补充断号,缺省的 vbUseDefault 则表示根据自动编号管理界面中的配置决定。
ActiveConnection 可选 Variant 编号规则定义表以及相应的业务数据表所在数据库的 ADO 连接。

返回值

正常情况下返回生成的最新编号,如果编号数量已达上限或参数有误将返回 Null。

说明

在不补充断号的情况下,生成编号和实际的大数据量的业务表无关,因此具有最佳的性能。

一般情况下,只需要给出 RuleName 参数即可,其它参数会自动读取“自定义自动编号管理”界面中的定义。只在有特殊需要,即通过管理界面配置的参数不能满足需求时,才会用到其它参数。优先使用给出的参数,只有当参数被省略时,才会取管理界面配置的参数值。

建议在保存的时候,而不是打开编辑窗体的时候才调用 GetAutoNumber 函数生成新的编号。尤其是在补充断号的情况下,如果多人同时操作,A 打开录入窗体,生成编号005,B 又打开同一个录入窗体,也生成编号 005,这时将始终有一个人因为编号重复而无法保存数据。只有在保存时生成编号,才能尽可能的减少这样的并发冲突问题。对于不补充断号的,虽然不会出现重复编号问题,但是打开录入界面,没有保存就关闭了,生成的编号将不能再用。

提示 建议只在必需的时候,才使用这样的自定义自动编号,一般情况下使用数据库的自动编号数据类型字段即可,这样可以从最底层杜绝一些数据异常问题,但这个不是绝对的,还需要根据实际情况灵活决定采用哪种方式。比如对于多层表结构,如“订单表”、“订单明细表”这样的,“订单明细表”中不宜使用数据库自动编号数据类型字段作为主键,尤其是它还可能是其它表的外键时,更不能用,因为在快速开发平台中,出于性能以及并发问题的考虑,默认情况下使用非绑定窗体编辑数据,对于明细表中的多条数据的修改处理,实际上是先删除,然后重新添加的方式实现的,如果使用数据库自动编号数据类型字段作为主键,就会导致修改保存数据后,自动编号发生变化,从而导致其它表的外键引用异常。

提示 断号是指生成后记录被删除掉的编号,因为补充断号需要全表查询,循环所有编号直到找到断号为止,对于数据量越大的业务表,性能影响也越大。因此除非数据量不大且编号数量有限的情况,一般不建议进行补充断号处理。

示例

    '根据管理界面的配置参数直接生成销售单号
    Me.txtOrderNo = GetAutoNumber("销售单号")    '假设生成的编号是 XS20130101-001

    '例如需要将部门编号加到前缀中,调用时给出编号前缀参数,假设这里的部门编号文本框 txtDepartID 的值是003
    Me.txtOrderNo = GetAutoNumber("销售单号", Prefixal:="XS" & Me.txtDepartID & "-")    '生成的编号是 XS003-20130101-001

修订记录