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