根据Year自动生成字段内容

时间:2015-11-30 20:40:03

标签: ms-access ms-access-2013

我正在尝试创建一个遵循以下格式的自动生成的字段:

TREQ-YY-NNNN

YY是提交年份,NNNN是当年提交的n th 表格。例如:

TREQ-15-0001
TREQ-15-0002
TREQ-15-0003
TREQ-15-0004
TREQ-15-0005
TREQ-16-0001
TREQ-16-0002

我一直在尝试使用AutoNumber字段的Format属性,但在使用TREQ-"yy"-"0000掩码时我会遇到奇怪的行为。我最终获得了TREQ-1899-01,TREQ-1900-02,TREQ-1900-03等值。

我有没有办法获得我想要的编号格式,或类似的东西?我是Access的新手,我还在尝试学习公式的正确语法。

3 个答案:

答案 0 :(得分:1)

您可以使用Before Change data macro自动将键值分配给新记录,而不是使用自动编号字段(在新的一年开始时不会将自身重置为1)它们被插入表中。宏看起来像这样:

BeforeChange.png

<?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">yy</Argument>
              <Argument Name="Value">Right(Year(Date()),2)</Argument>
            </Action>
            <Comment>Set default value in case no records found:</Comment>
            <Action Name="SetLocalVar">
              <Argument Name="Name">newSeq</Argument>
              <Argument Name="Value">1</Argument>
            </Action>
            <LookUpRecord>
              <Data Alias="z">
                <Query>
                  <References>
                    <Reference Source="tblTREQ" />
                  </References>
                  <Results>
                    <Property Source="tblTREQ" Name="KeyField" />
                  </Results>
                  <Ordering>
                    <Order Direction="Descending" Source="tblTREQ" Name="KeyField" />
                  </Ordering>
                </Query>
                <WhereCondition>[KeyField] Like &quot;TREQ-&quot; &amp; [yy] &amp; &quot;-*&quot;</WhereCondition>
              </Data>
              <Statements>
                <Action Name="SetLocalVar">
                  <Argument Name="Name">newSeq</Argument>
                  <Argument Name="Value">Val(Right([z].[KeyField],4))+1</Argument>
                </Action>
              </Statements>
            </LookUpRecord>
            <Action Name="SetField">
              <Argument Name="Field">KeyField</Argument>
              <Argument Name="Value">&quot;TREQ-&quot; &amp; [yy] &amp; &quot;-&quot; &amp; Right(&quot;0000&quot; &amp;
              [newSeq],4)</Argument>
            </Action>
          </Statements>
        </If>
      </ConditionalBlock>
    </Statements>
  </DataMacro>
</DataMacros>

答案 1 :(得分:1)

实际上,您不应该为此使用自动编号字段 - 它们旨在由系统生成的唯一编号,而不会受到用户干扰(只是为了确保每行都有要引用的唯一ID;它类似于GUID的前身),通常它们不会被发布。通常情况下,他们会简单地编号和#34;没有改变年份的概念。 (这就是1900年2月开始的原因。)

要生成您自己的(字符串!)键,您需要编写在post上生成键的代码。

答案 2 :(得分:0)

在表单中插入新的Text Box,并在Control Source标签的Data字段属性中插入以下表达式:

="TREQ-" & Right(Year([DateSubmitted]),2) & "-" & Format([ID],"0000")

其中[DateSubmitted]是您的日期字段,[ID]是您的自动编号字段。

或者,您可以创建这样的本地查询:

SELECT Table1.ID, Table1.DateSubmitted, "TREQ-" & Right(Year([DateSubmitted]),2) & "-" & Format([ID],"0000") AS TreqNum
FROM Table1;

希望这会有所帮助