1

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

在这里,它从 1、2、3、…开始。</p>

但我想枚举数字开头,

2017ICLAA001、2017ICLAA002、2017ICLAA003、……</p>

怎么做?

4

3 回答 3

2

只需在 ID 字段的格式属性中输入“2017ICLAA”000

于 2016-11-15T00:08:59.530 回答
1

应该能够弄清楚你想要什么,因为“2017 ....”并不总是相同的,如果你改变它,那么它会提升你的数据库。

Year-Number 输出示例:17-0001

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

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

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

将以下内容添加到表单的 [Event Procedure] BEFOREINSERT 中,否则如果您稍后更新记录中的内容(BeforeUpdate),每次更改时都会更改记录号。你被警告了!

不要使用“[Last Modified]”类型的列的日期,否则如果您在年份更改和编辑时更改/更新记录中的任何内容(考虑一下),您将来会后悔的。确保您有一个专用的“[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 更改为更大的整数,然后更改 Format(iNext, "0000") 中的零以反映占位符的数量。数字 4 和有四个零。同样的事情适用于年份,只需将“yy”的任何地方更改为“yyyy”即可获得四位数年份。进行更改时,请确保表格字段/列的数据类型可以接受要计算的总字符,否则它将删除任何多余的字符。文本的默认值通常为 255 个字符,但是如果您说 [ColumnForYear-Number] 允许使用 8 个字符并且您尝试添加 9 个或更多字符,那么您在解决一个简单问题时会感到沮丧。仅供参考。

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

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

于 2017-03-12T11:48:59.893 回答
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 PickerNever良好的措施,并将Locked值设置为,Yes以便用户无法更改\覆盖表单中的值。注意:[DateCreated]如果您决定使用下面列出的选项二 (2),则不需要此列。

在表格中创建上面的列后,转到表单并将新字段添加到表单中,单击新添加的文本字段框并将其Other名称设置为txt....,然后进入 VBA 代码生成器并从任一选项添加代码或选项二。[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,并且每年从一个开始自动递增。通过创建一些记录来测试它,然后将计算机的日期/时间时钟更改为较晚或较早的年份并添加另一条记录。它应该随年份而变化,当年份变化时,它将自动增加到该年份的下一个最高值。您可以通过来回切换计算机来测试这一点,只是为了在添加新记录时观察值保持一致。

于 2017-03-20T00:37:23.867 回答