2016-03-11 48 views
0

我正在使用Access 2013数据库,该数据库将不同的电线杆输入数据库并与其他属性链接。每个杆将有一个唯一的全球ID,为了简化工作,我想添加另一个更简单的唯一ID。我希望这个字段在导入到数据库中的新极点时自动填充。该ID会去如下:根据添加记录的年份创建顺序ID值

SAC(年) - (不断升级的数字,不能是复印件)

前。 SAC16-20(这将是2016年进入数据库的第20极)

ex。 SAC15-2536(将在2015年进入第2536杆)

如果任何人都可以帮助我生成一些代码,使此自动填充ID字段的工作,我将不胜感激。

回答

1

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

alternate_id_seq   –  数字(长整型)
alternate_id   –  文本(20)

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

在访问功能区中,切换到 “表格工具>表” 选项卡,然后单击 “更改之前”

Ribbon.png

然后输入下面的宏...

BeforeChange.png

...或将以下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]列将自动填充。

Datasheet.png