2014-03-03 149 views
1

我有一個Access數據庫,我們用它來容納工人的補償事故信息。其中一個必填字段是OSHA可記錄號碼,該號碼以「01」和事故的兩位數年份(例如01-14)順序開始。序列號自動填充字段

我需要能夠編程查看我的表格,看看已經使用了哪些數字並找到序列中的下一個數字。它還需要在新的一年開始時重置爲1。

例子: 表中讀取

01-14 
02-14 
03-14 

用於填充文本應該是04-14

幫助新的號碼!

+0

什麼是Excel的數據庫? –

+0

Excel電子表格或MS-Access數據庫? – Ghost

+0

MS-Access數據庫 – designspeaks

回答

0

鑑於您有多用戶數據庫,請參閱insert query with sequential primary keyAccess VBA: Find max number in column and add 1以獲取下一個連續編號的代碼。

您可以使用Year和種子編號創建下一個OSHA編號。您可以在更改年份時重置種子編號。

DMax是一種可能性,但我強烈建議您不要在多用戶數據庫中使用它。

+0

(關於'DMax')爲什麼不呢? – Yawar

+0

@Yawar存在重複的可能性,可能隨着條目數量和用戶數量而增加。在您獲得DMax號碼並保存記錄時,其他一些用戶也可能獲得相同的DMax號碼。它不應該冒風險。 – Fionnuala

0

根據您所描述的,聽起來OSHA編號應該在需要時生成,而不是在創建表格行時分配和存儲。我的建議是隻讓主鍵(accident_id)成爲一個自動增長的長整數,這是Access中的標準做法。還需要accident_date列爲datetime或類似的。或者至少是accident_year列。然後,當您需要OSHA編號(例如在報告中)時,只需使用一些VBA即可使用主鍵 - accident_id - 和accident_dateaccident_year列生成該編號。您將利用Access自動增量主鍵不會被重新使用的事實 - 即使刪除了它們的行,這些數字也不會被循環使用以用於其他行。因此,考慮一個長整型主鍵,和一個日期,你總是可以重現完全相同 OSHA數,用一個簡單的算法類似以下內容:

function osha_number(accident_id as long) as string 
    accident_year = ... ' get (last two digits of) accident year from accidents table using ID 
    year_first_accident_id = ... ' get ID of first accident of this year 
    year_this_accident_num = accident_id - year_first_accident_id + 1 

    osha_number = year_this_accident_num & "-" & accident_year 
end function