|
[转载]自动编号解决方法大全
不知是否能满足你的需要[:50]
自动编号
一:
=IIf(Left(Nz(DMax("[jhd_id]","jinhuodan",""),0),6)<>Format(Date(),"yyyymm"),Format(Date(),"yyyymm") & "001",Format(Date(),"yyyymm") & Format(Val(Right(Nz(DMax("[jhd_id]","jinhuodan",""),0),3))+1,"000"))
二:
=nz(DLookUp("编号","登记表","[id]=DMax('id','登记表')"))+1
自动编号
方法一按时间自动编号:
dim a,b
a=dmax("[自动编号]","编号表")+1
b=format(date(),"yyyymm") & 00
if a>b then
me.自动编号=a
else:
me.自动编号=b+1
end if
方法二,按时间自动编号:
Dim a As String
a = Nz(DMax("销售单号", "销售帐单", ""), 0)
If Left(a, 6) <> Format(Date, "yyyymm") Then
销售单号 = Format(Date, "yyyymm") & "01"
Else
销售单号 = Format(Date, "yyyymm") & Format(Val(Right(a, 2)) + 1, "00")
End If
方法三,按月分类自动编号:
Dim id, date2 As String
date2 = "GF" & [部门代码] & Format([入库日期], "YYYYMM")
id = DMax("[rk编号]", "[入库单]", "[rk编号] Like '" & date2 & "???'")
If IsNull(id) Then
Me.RK编号 = date2 & "001"
Else
Me.RK编号 = date2 & Format(CStr(CInt(Right(id, 3)) + 1), "000")
End If
按任意输入的日期值的年月自动编号
Dim a, b, c
c = Format(Me.凭证日期, "yyyymm")
b = Nz(c, 0) * 1000
a = Nz(DMax("[凭证号码]", "凭证", "format(凭证.凭证日期,'yyyymm')=format([forms]![凭证录入].[凭证日期],'yyyymm')"), 0) + 1
If a > b Then
Me.凭证号码 = a
Else:
Me.凭证号码 = b + 1
End If
新增一条记录时使用Right及DMax函数让字段的数字部分自动加1
答:使用Right及DMax函数返回字段“FOO”的数字部分的最大值,然后加1
表达式为:
="REC-" & right(DMax("FOO", "FOOTable"), _
Len(DMax("FOO", "FOOTable")) - _
InStr(1, DMax("FOO", "FOOTable"), "-")) + 1
注意:但如果很多用户或多个程序都使用DMax去实现这个结果的话,特别在一个很大的表中这个过程会很慢,所以建议使用DefaultValue,它仅仅使用DMax一次
程序如下,写在更新事件中
Private Sub SomeField_AfterUpdate()
Dim strMax as string
strMax =DMax("FOO", "FOOTable")
me!HiddenFooCtl = "REC-" & right(strMax, len(strMax) - Instr(1,strMax, "-")) +1
End Sub
如何用代码在“默认值”里实现自动编号?
如:第1号、第2号、...........、第198号..................
或:CN0001-A、CN0002-B、CN0003-B、.........、CN0004-A、CN1998-B……
这些要求都不需要在“表”的字段属性中完成,一般都是在界面编程中解决的。
用 dcount() 或者 dmax() 函数取值后用字符串组合的方法得到编号
Private Sub Field1_Enter()
If IsNull(Field1.value) Then
Field1.value = "CN" & Format(CLng(DMax("mid(field1,3,4)", "table1") + 1), "0000") & "-A"
End If
End Sub |
|