【问题标题】:Create sequential ID value based on the year that a record is added根据添加记录的年份创建顺序 ID 值
【发布时间】:2016-03-11 18:32:35
【问题描述】:

我正在开发一个 Access 2013 数据库,该数据库将在数据库中输入不同的电线杆并与其他属性链接。每个杆都有一个唯一的全局 ID,为了简化工作,我想添加另一个更简单的唯一 ID。我希望在将新杆导入数据库时​​自动填充此字段。 ID 如下所示:

SAC(year)-(递增数字,不能重复)

例如。 SAC16-20(这将是 2016 年进入数据库的第 20 个杆)

例如。 SAC15-2536(将是 2015 年进入的第 2536 个杆)

如果有人可以帮助我生成一些代码来使这个自动填充 ID 字段工作,我将不胜感激。

【问题讨论】:

    标签: ms-access vba ms-access-2013 ms-access-data-macro


    【解决方案1】:

    对于 Access 2010 及更高版本,您可以使用事件驱动的data macro 来生成顺序 ID。例如,假设您有一个名为 [poledata] 的表。在设计视图中打开它并添加两个字段:

    alternate_id_seq  –  数字(长整数)
    alter_id  –  文本 (20)

    保存对表格的更改,然后切换到数据表视图。

    在 Access 功能区中,切换到“表格工具 > 表格”选项卡并单击“更改前”

    然后输入以下宏...

    ...或将以下 XML 粘贴到宏编辑器窗口中

    <?xml version="1.0" encoding="utf-16" standalone="no"?>
    <DataMacros xmlns="http://schemas.microsoft.com/office/accessservices/2009/11/application">
        <DataMacro Event="BeforeChange">
            <Statements>
                <ConditionalBlock>
                    <If>
                        <Condition>[IsInsert]</Condition>
                        <Statements>
                            <Action Name="SetLocalVar">
                                <Argument Name="Name">next_seq</Argument>
                                <Argument Name="Value">1</Argument>
                            </Action>
                            <Action Name="SetLocalVar">
                                <Argument Name="Name">prefix</Argument>
                                <Argument Name="Value">&quot;SAC&quot; &amp; Year(Date()) Mod 100 &amp; &quot;-&quot;</Argument>
                            </Action>
                            <LookUpRecord>
                                <Data Alias="pd">
                                    <Query>
                                        <References>
                                            <Reference Source="poledata" Alias="pd" />
                                        </References>
                                        <Results>
                                            <Property Source="pd" Name="alternate_id_seq" />
                                        </Results>
                                        <Ordering>
                                            <Order Direction="Descending" Source="pd" Name="alternate_id_seq" />
                                        </Ordering>
                                    </Query>
                                    <WhereCondition>[pd].[alternate_id] Like [prefix] &amp; &quot;*&quot;</WhereCondition>
                                </Data>
                                <Statements>
                                    <Action Name="SetLocalVar">
                                        <Argument Name="Name">next_seq</Argument>
                                        <Argument Name="Value">[pd].[alternate_id_seq]+1</Argument>
                                    </Action>
                                </Statements>
                            </LookUpRecord>
                            <Action Name="SetField">
                                <Argument Name="Field">alternate_id_seq</Argument>
                                <Argument Name="Value">[next_seq]</Argument>
                            </Action>
                            <Action Name="SetField">
                                <Argument Name="Field">alternate_id</Argument>
                                <Argument Name="Value">[prefix] &amp; [next_seq]</Argument>
                            </Action>
                        </Statements>
                    </If>
                </ConditionalBlock>
            </Statements>
        </DataMacro>
    </DataMacros>
    

    现在,当向表中添加新行时,[alternate_id_seq] 和 [alternate_id] 列将自动填充。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-10
      • 2014-04-18
      • 2020-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-18
      相关资源
      最近更新 更多