基於

2015-11-30 32 views
1
年自動生成字段內容

我想創建,遵循以下格式自動生成的場:基於

TREQ-YY-NNNN

其中YY是提交的一年,NNNN爲n 日當年提交的表格。例如:

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很新,我仍然在努力學習公式的正確語法。

回答

1

而不是使用自動編號字段(不能自行復位才能1在一個新的開始年),您可以使用Before Change data macro自動將鍵值分配到插入到表中的新記錄中。宏會是這個樣子:

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> 
+0

謝謝!直到現在還沒有機會對此進行測試,但看起來像這樣可行! – CodeJack

0

插入表單中的一個新的Text Box並在Data選項卡中Control Source字段屬性,插入下面的表達式:

="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; 

希望這將有助於

1

其實,你不應該使用一個自動編號字段這一點 - 他們的目的是有一個唯一的編號由系統生成,無需用戶干擾(只是爲了確保每行都有一個唯一的ID來引用;它就像一個GUID的前身),並且通常它們不會被髮布。通常情況下,他們只是簡單地「數起來」,沒有任何概念可以隨着年份的變化而重新設定。 (這就是爲什麼1900年從2開始)。

要生成您自己的(字符串!)鍵,您需要編寫用於生成密鑰的代碼。