2011-07-14 170 views
0

我正在使用Access數據庫。此數據庫的數據源是Excel電子表格。我需要添加允許用戶通過運行VBA函數來清理原始Excel數據的功能,然後將這些數據導入到Access中,而不導入重複記錄。MS Access:需要高級設計建議

我對如何處理這幾個問題:

1)我應該寫一個VBA程序和一個簡單的GUI在Excel中清理數據,或者我應該包括這在Access表,允許用戶將Excel數據導入到表中?換句話說,應該在Access還是在Access之外清理數據?

2)防止重複記錄導入表格的最佳方法是什麼?我應該編寫VBA代碼來做到這一點,還是應該設置表格的屬性(如果可能的話)?

3)我應該允許用戶清除Excel中的數據,然後讓用戶使用Access中的導入嚮導來添加數據,而不是在表單中編寫代碼以允許將數據導入數據表?

謝謝!

回答

0

防止數據庫中重複記錄的最佳方法是在構成唯一鍵的列上定義唯一索引。

例如,如果你想確保沒有超過在醫院系統每人醫院專科一個專家,你可以在一個hypothethetical HospitalSpecialists表做到這一點:

   id    autoincrementing integer primary key 
      hospitalid  integer foreign key references hospitals(id) 
      physicianid  integer foreign key references physicians(id) 
      specialityid  integer foreign key references specialties(id) 


      unique composite index on (hospitalid, physicianid, specialtyid) 

然後安:我不要插入副本。

因此,您首先必須確定什麼構成您的表的副本:哪些列的子集合在一起時確定記錄的唯一性?

0

如果用戶完全可以訪問Excel文件,那麼您需要將其視爲不可信/不清潔的數據源,因爲在那時您無法控制它 - 用戶犯錯誤,忘記指令,等等。

因此,無論您是否在Excel中進行清潔,您都必須檢查Access中的數據。

現在你想導入數據,並防止重複記錄?做到這一點的一種方法是創建一個指向excel文件的鏈接(即Access將它視爲一張表),根據需求清理數據,最後創建一個查詢Excel表的CREATE TABLE查詢SELECT DISTINCT ...),並將結果插入到新的Access表中。

0

我是Access程序員,而不是Excel程序員,所以我投票支持在Access中做所有事情。正如@ kuru kuru na ...暗示的,如果用戶可以編輯Excel文件,那麼他們不能被信任在你對它們進行清理之後保持「乾淨」,所以我會說要做所有的清理工作訪問本身。

至於進口和避免重複,你需要記住蒂姆的最後一段,即「你首先必須確定什麼是重複的」。這可能比聽起來更復雜(例如,你會匹配「鮑勃史密斯」與「羅伯特史密斯」還是隻有完全匹配?)。