Ms access 如何设置自定义ID字段?

Ms access 如何设置自定义ID字段?,ms-access,vba,ms-access-2016,Ms Access,Vba,Ms Access 2016,我在MS Access中有自动编号字段 这里,它从1,2,3开始 但我想列举数字,从 2017ICLAA001,2017ICLAA002,2017ICLAA003 如何做到这一点?只需在ID字段的Format属性中键入“2017ICLAA”000 应该能够弄清楚您想要什么,因为“2017…”并不总是一样的,如果您更改它,它将弹出您的数据库 年数输出示例:17-0001 当年份更改时,数字自动重置为1,因为它检查日期,然后检查数字值,该值每年从1递增到9999。您可以删除记录,但不会影响编号,因为

我在MS Access中有自动编号字段

这里,它从1,2,3开始

但我想列举数字,从

2017ICLAA001,2017ICLAA002,2017ICLAA003

如何做到这一点?

只需在ID字段的Format属性中键入“2017ICLAA”000


应该能够弄清楚您想要什么,因为“2017…”并不总是一样的,如果您更改它,它将弹出您的数据库

年数输出示例:17-0001

当年份更改时,数字自动重置为1,因为它检查日期,然后检查数字值,该值每年从1递增到9999。您可以删除记录,但不会影响编号,因为它总是基于当前年份检查最大整数,该年份由您的计算机时间/时钟定义

必须具有以下列:[AutonumberID][DateCreated][ColumnForYear Number]

您应该将表的DesignView中“[DateCreated]”列的“默认值”设置为“
=Date()
”(不带引号),以便在创建记录时自动添加日期

在插入之前将以下内容添加到表单的[Event Procedure]中,否则,如果您稍后(在更新之前)更新记录中的内容,则每次进行更改时都会更改记录编号。你被警告了

请勿使用“[上次修改]”列的日期,否则,如果您在年份更改和编辑时更改/更新记录中的任何内容,您将在将来后悔(请仔细考虑)。确保您有一个专用的“[DateCreated]”列,无论您决定在哪一年进行任何更改,该列在插入/添加记录后都不会更改

代码如下:

Option Compare Database

Private Sub Form_BeforeInsert(Cancel As Integer)

Dim vLast As Variant

Dim iNext As Integer

vLast = DMax("[ColumnForYear-Number]", "[Table]", "[ColumnForYear-Number] LIKE '" & _
Format([txtDateCreated], "yy\*\'"))

If IsNull(vLast) Then

iNext = 1

Else

iNext = Val(Right(vLast, 4)) + 1

End If

Me![ColumnForYear-Number] = Format([txtDateCreated], "yy") & "-" & Format(iNext, "0000")

End Sub
要在一年内获得9999条以上的记录,请将Val中的数字4(右(vLast,4))更改为更大的整数,然后更改格式(iNext,“0000”)中的零以反映占位符的数量。数字是4,有四个零。同样的事情也适用于年份,只要将任何有“yy”的地方改为“yyyy”,即四位数年份。进行更改时,请确保表的字段/列的数据类型可以接受要计算的总字符数,否则将删除多余的字符。文本默认值通常为255个字符,但是如果您的说明[ColumnForYear Number]允许使用8个字符,并且您尝试添加9个或更多字符,那么您将遇到一个简单的问题。仅供参考

“[txtDateCreated]”是实际日期条目存在的位置,与“[DateCreated]”不同,后者是列名,除非您在属性表的“其他”选项卡下命名了标签。换言之,列是[columnname],在表单中添加/更改/查看值的文本框区域应标记为[txtcolumnname](当然减去括号)


已配置为您请求的格式的其他选项将在下一个响应中列出(见下文)。

由于我有更多的时间,我决定用几个选项更直接地回答您的问题。我的假设是:(1)您希望2017年自动更改;(2)您定义的前缀ICLAA,然后是(3)一个增量数字
<001
,该数字会随着每年的新年而重置;(4)这是用于带有输入框的
表单的(因此
[txt…]

所需的表格列:

[AutoNumber]
这只是格式化,可以在表单或报表上完成。您只允许在表中输入999个条目。我希望您理解您所能做的(大部分)依靠自动编号是唯一的。根据具体情况,你可以得到间隔、跳跃、非常大甚至负数。如果你的自动编号意味着什么,你就有一个大问题等待着发生。你能告诉我如何在表格中这样做吗???@FionNualai如果你想让“2017”对应今年,那就需要更多的参与EDD删除access中的任何行都将影响自动编号,或者该编号将被忽略???如果删除的记录不是最新创建的记录,则其自动编号将被删除且不会再次使用。如果删除了最新记录,是否再次使用其自动编号取决于数据库是否被压缩和修复在将新记录写入表之前。
Private Sub Form_BeforeInsert(Cancel As Integer)
    Dim Prefix As String
    Dim vLast As Variant
    Dim iNext As Integer

    Prefix = "ICLAA"

    vLast = DMax("[Column4UniqueValue]", "[tblSource]", "[Column4UniqueValue] LIKE '" & Format([txtAreaOfDateCreated], "yyyy\*\") & Prefix & "*'")

    If IsNull(vLast) Then
         iNext = 1
    Else
         iNext = Val(Right(vLast, 3)) + 1
    End If

    Me![txtAreaOfColumn4UniqueValue] = Format([txtAreaOfDateCreated], "yyyy") & Prefix & Format(iNext, "000")
End Sub
Private Sub Form_BeforeInsert(Cancel As Integer)
    Dim Prefix As String
    Dim vLast As Variant
    Dim iNext As Integer

    Prefix = "ICLAA"

    vLast = DMax("[Column4UniqueValue]", "[tblSource]", "[Column4UniqueValue] LIKE '" & Format(Date, "yyyy\*\") & Prefix & "*'")

    If IsNull(vLast) Then
         iNext = 1
    Else
         iNext = Val(Right(vLast, 3)) + 1
    End If

    Me![txtAreaOfColumn4UniqueValue] = Format(Date, "yyyy") & Prefix & Format(iNext, "000")
End Sub