如何设置自定义ID字段?

时间:2016-10-28 04:18:17

标签: access-vba ms-access-2016

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

这里,它以1,2,3,......开始。

但我想用

枚举数字开头

2017ICLAA001,2017ICLAA002,2017ICLAA003,...

怎么做?

3 个答案:

答案 0 :(得分:1)

只需在ID字段的格式属性

中键入“2017ICLAA”000即可

答案 1 :(得分:1)

应该能够找出你想要的东西,因为“2017 ....”并不总是一样的,如果你改变它,那么它将会增加你的数据库。

年份数字输出示例:17-0001

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

必须包含以下列:[AutonumberID] [DateCreated] [ColumnForYear-Number]

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

将以下内容添加到表单的[事件过程] BEFOREINSERT,否则如果您稍后更新记录中的内容(BeforeUpdate),它将在每次更改时更改记录编号。你被警告了!

不要使用“[上次修改]”类型的日期,否则如果您在年份更改和编辑时更改/更新记录中的任何内容,您将会后悔(考虑一下)。确保您有一个专用的“[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

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

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

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

答案 2 :(得分:0)

由于我有更多的时间在我的手上,我决定更直接地用几个选项回答你的问题。我的假设是:(1)您希望年份 2017 自动更改;(2)您定义的前缀 ICLAA 后跟(3) )一个增量数字 001 ,每个新年重置一次;(4)这是一个带有输入框的 form (因此 [txt...] )。

表格列必填:
[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 的值,因此用户无法更改\覆盖表单中的值。注意:如果您决定使用下面列出的选项二(2),则不需要此列 [DateCreated]

在表格中创建上面的列后,转到表单并将新字段添加到表单中,在新添加的文本字段框内单击,并将其 Other 名称设置为 txt.... ,然后进入VBA代码生成器[ Alt + F11 < / strong> ]并添加第一个选项或第二个选项中的代码。

选项一(使用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 完全相同,并且从一年开始每年自动增加。通过创建一些记录进行测试,然后将计算机的日期/时间时间更改为更晚或更早的年份,并添加另一条记录。它应随年份而变化,当年份发生变化时,它将自动增加到该年度的下一个最高值。您可以通过来回切换计算机年来测试这一点,以便在添加新记录时观察值保持一致。