如何设置自定义 ID 字段?
How to set custom ID field?
我在 MS Access 中有自动编号字段。
这里是从 1, 2, 3,…
但是我想枚举数字开头,用
2017ICLAA001、2017ICLAA002、2017ICLAA003、…
怎么做?
只需在 ID 字段的格式中输入“2017ICLAA”000 属性
应该能够弄清楚你想要什么,因为“2017 ....”并不总是一样的,如果你改变它,它会增加你的数据库。
年号输出示例:17-0001
当年份更改时,数字会自动重置为 1,因为它会检查日期,然后数字值每年从 1 递增到 9,999。您可以删除记录,它不会影响编号,因为它始终根据您的计算机定义的当前年份检查最大整数 time/clock。
必须包含以下列:[AutonumberID] [DateCreated] [ColumnForYear-Number]
您应该将 Table 的 DesignView 中的“[DateCreated]”列的 "Default Value" 设置为“=Date()
”(不带引号),以便在创建时自动添加日期一个记录。
将以下内容添加到表单的 [Event Procedure] BEFOREINSERT 否则,如果您稍后更新记录中的内容(BeforeUpdate),每次进行更改时都会更改记录编号。你已被警告!
不要使用“[Last Modified]”类型的列的日期,否则如果在年份更改和编辑时 change/update 记录中的任何内容,您将来会后悔的(想想关于它)。确保您有一个专用的“[DateCreated]”列,无论您决定在哪一年进行任何更改,该列在 inserting/adding 记录后都不会更改。
代码如下:
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
要在一年内获得超过 9,999 条记录,请将 Val(Right(vLast, 4)) 中的数字 4 更改为更大的整数,然后更改 Format(iNext, "0000") 中的零以反映该数字的占位符。数字 4 有四个零。同样的事情也适用于年份,只需将 "yy" 的任何地方更改为 "yyyy" 即可表示四位数的年份。进行更改时,请确保 table 的 field/column 的数据类型可以接受要计算的总字符数,否则它将删除任何多余的字符。文本的默认值通常为 255 个字符,但是如果您说 [ColumnForYear-Number] 允许 8 个字符,而您试图添加 9 个或更多字符,那么您在解决简单问题时会感到沮丧。仅供参考。
"[txtDateCreated]" 是实际日期条目所在的位置,与列名称 "[DateCreated]" 不同,除非您在 "Other" 选项卡下命名标签46=] Sheet。换句话说,列是 [columnname],FORMS 中值为 added/changed/viewed 的文本框区域应标记为 [txtcolumnname](当然要减去括号)。
已配置为您请求的格式的其他选项列在下一个响应中(见下文)。
因为我有更多的时间,所以我决定用几个选项更直接地回答你的问题。我的假设是:(1) 您希望年份 2017
自动更改,以及 (2) 您定义的前缀 ICLAA
后跟 (3) 增量数字 001
,每个新年都会重置,并且 (4) 这是针对 form
与输入框(因此 [txt...]
)。
Table 所需列数:
[AutoNumber]
<=这里没有用,只是为了表明它仍然存在
[Column4UniqueValue]
将数据类型设置为 Short Text
并确保您的 columns field size is set to 12 or more
否则将无法运行并会报错。
[DateCreated]
设置为 Date/Time
格式为 General Date
默认值设置=Date()
,设置Show Date Picker
为Never
为好措施,并将 Locked
值设置为 Yes
这样用户就不能 change\override 表单中的值。注意:如果您决定使用下面列出的选项二 (2),则不需要此列 [DateCreated]
。
在 table 中创建以上列后,转到您的表单并将新字段添加到表单中,在新添加的文本字段框内单击并设置其 Other
命名为 txt....
,然后进入 VBA Code Builder [
Alt
+
F11
]
并添加选项一或选项二中的代码。
选项一(带 DateCreated 字段):
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
选项二(没有 DateCreated 字段):
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
您的最终结果将完全像这样 2017ICLAA001
并且每年从一年开始自动递增。通过创建一些记录来测试它,然后将计算机的 date/time 时钟更改为更晚或更早的年份并添加另一条记录。它应该随年份变化,当年份变化时,它将自动递增到该年份的下一个最高值。您可以通过来回切换计算机年份来测试这一点,以观察添加新记录时值是否保持一致。
我在 MS Access 中有自动编号字段。
这里是从 1, 2, 3,…
但是我想枚举数字开头,用
2017ICLAA001、2017ICLAA002、2017ICLAA003、…
怎么做?
只需在 ID 字段的格式中输入“2017ICLAA”000 属性
应该能够弄清楚你想要什么,因为“2017 ....”并不总是一样的,如果你改变它,它会增加你的数据库。
年号输出示例:17-0001
当年份更改时,数字会自动重置为 1,因为它会检查日期,然后数字值每年从 1 递增到 9,999。您可以删除记录,它不会影响编号,因为它始终根据您的计算机定义的当前年份检查最大整数 time/clock。
必须包含以下列:[AutonumberID] [DateCreated] [ColumnForYear-Number]
您应该将 Table 的 DesignView 中的“[DateCreated]”列的 "Default Value" 设置为“=Date()
”(不带引号),以便在创建时自动添加日期一个记录。
将以下内容添加到表单的 [Event Procedure] BEFOREINSERT 否则,如果您稍后更新记录中的内容(BeforeUpdate),每次进行更改时都会更改记录编号。你已被警告!
不要使用“[Last Modified]”类型的列的日期,否则如果在年份更改和编辑时 change/update 记录中的任何内容,您将来会后悔的(想想关于它)。确保您有一个专用的“[DateCreated]”列,无论您决定在哪一年进行任何更改,该列在 inserting/adding 记录后都不会更改。
代码如下:
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
要在一年内获得超过 9,999 条记录,请将 Val(Right(vLast, 4)) 中的数字 4 更改为更大的整数,然后更改 Format(iNext, "0000") 中的零以反映该数字的占位符。数字 4 有四个零。同样的事情也适用于年份,只需将 "yy" 的任何地方更改为 "yyyy" 即可表示四位数的年份。进行更改时,请确保 table 的 field/column 的数据类型可以接受要计算的总字符数,否则它将删除任何多余的字符。文本的默认值通常为 255 个字符,但是如果您说 [ColumnForYear-Number] 允许 8 个字符,而您试图添加 9 个或更多字符,那么您在解决简单问题时会感到沮丧。仅供参考。
"[txtDateCreated]" 是实际日期条目所在的位置,与列名称 "[DateCreated]" 不同,除非您在 "Other" 选项卡下命名标签46=] Sheet。换句话说,列是 [columnname],FORMS 中值为 added/changed/viewed 的文本框区域应标记为 [txtcolumnname](当然要减去括号)。
已配置为您请求的格式的其他选项列在下一个响应中(见下文)。
因为我有更多的时间,所以我决定用几个选项更直接地回答你的问题。我的假设是:(1) 您希望年份 2017
自动更改,以及 (2) 您定义的前缀 ICLAA
后跟 (3) 增量数字 001
,每个新年都会重置,并且 (4) 这是针对 form
与输入框(因此 [txt...]
)。
Table 所需列数:
[AutoNumber]
<=这里没有用,只是为了表明它仍然存在
[Column4UniqueValue]
将数据类型设置为 Short Text
并确保您的 columns field size is set to 12 or more
否则将无法运行并会报错。
[DateCreated]
设置为 Date/Time
格式为 General Date
默认值设置=Date()
,设置Show Date Picker
为Never
为好措施,并将 Locked
值设置为 Yes
这样用户就不能 change\override 表单中的值。注意:如果您决定使用下面列出的选项二 (2),则不需要此列 [DateCreated]
。
在 table 中创建以上列后,转到您的表单并将新字段添加到表单中,在新添加的文本字段框内单击并设置其 Other
命名为 txt....
,然后进入 VBA Code Builder [
Alt
+
F11
]
并添加选项一或选项二中的代码。
选项一(带 DateCreated 字段):
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
选项二(没有 DateCreated 字段):
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
您的最终结果将完全像这样 2017ICLAA001
并且每年从一年开始自动递增。通过创建一些记录来测试它,然后将计算机的 date/time 时钟更改为更晚或更早的年份并添加另一条记录。它应该随年份变化,当年份变化时,它将自动递增到该年份的下一个最高值。您可以通过来回切换计算机年份来测试这一点,以观察添加新记录时值是否保持一致。