1. 程式人生 > >ACCESS中使用GUID全域性唯一識別符號的自動唯一編號 同步複製ID 之解決方法

ACCESS中使用GUID全域性唯一識別符號的自動唯一編號 同步複製ID 之解決方法

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

背景:

這段時間臨時為一個旅遊類網站製作一些網站程式。資料表的情況大致如下: 資料庫表彙總 圖1 資料庫表的大致情況 由於是Access資料庫,之前有兩個資料表:TC_TourCompany和TC_SubDetail,前者是旅行社名錄相關資料(為了方便描述,暫且叫“總公司表”),後者是下屬營業部(如果有的話)的相關資料(為方便描述,暫且叫“子公司表”)。

由於業務需要,想將之擴充套件為適用於所有“公司類”(比如酒店、景區、景點、漂流公司、娛樂餐飲、機票代理、交通公司等)的資料表,由於酒店、餐飲娛樂、機票代理等公司都有可能有分部或分公司,所以表的資料結構是差不多的。所以,我們可以通用這樣的資料表設計來簡化今後的程式開發。當然,我們需要在資料表中新增一列,用於描述公司的型別是旅行社、酒店、景區或是娛樂餐飲類公司等。不在本文的敘述範圍,按下不表。

為了方便今後的分類搜尋查詢,確保公司(包括子公司)的唯一性,所以,我想在上述兩個表中增加一列,我把列名叫做GUID。它的每條記錄都是唯一不重複的值,類似:{9E4038C8-E965-45B1-BDE1-9F06E6B280A3},這有點象.Net中的System.Guid.NewGuid()生成的值,並用大括號{}包含起來。

做法: 如何在已有資料庫表記錄的情況下自動生成每一條記錄的這些值呢?

一開始,我走了點彎路。在新增GUID列時,我選擇了此列的資料型別為“數字”並在下面常規選項卡中“欄位大小”中選擇了“同步複製 ID”,索引中選擇了“有(無重複)”。本以為這樣儲存結構之後就萬事大吉,最終開啟表的所有記錄時發現,GUID列完全為空,沒有任何值!於是,我想了一些辦法去插入GUID唯一值。方案之一是在ACCESS中使用SQL語句更新,後來發現此路不通。方案之二就是使用ADO.net程式設計方式更新表記錄,工作量也不小。

有沒有更好的辦法呢?一個偶爾的想法讓我找到了更快更好的解決辦法,那就是在設計檢視中建立GUID列時,資料型別選擇自動編號

而不是數字!同時,在下面常規選項卡中“欄位大小”中選擇了“同步複製 ID”,索引中選擇了“有(無重複)”。

如下圖: 設計檢視中增加GUID列 圖2  給總公司名錄表(TC_TourCompany表)增加GUID列

在設計檢視中給子公司增加GUID列 圖3 給總公司表(TC_TourCompany表)增加GUID列後自動生成GUID記錄值 在設計檢視中給分公司(分部)表增加GUID列 圖4  給分公司(分部)TC_SubDetail表增加GUID列

給分公司(分部)增加GUID列後自動生成GUID記錄值 圖5 給分公司(分部)TC_SubDetail表增加GUID列後自動生成GUID記錄值

以後新增記錄時會發生什麼?經測試發現,ACCESS會自動搞定生成GUID記錄值的問題。OK,完美!

更多的話: 從 Access 生成 SQL 語句時,遇到了 Guid 查詢的問題,在 SQL Server 中使用的字串形式,不能查詢出任何資料。

SELECT * FROM tableName WHERE [GUID]='12345678-90AB-CDEF-1234-567890ABCDEF'

如果條件字串所引用的列為 GUID 型別,那麼該條件表示式使用的語法稍微有所不同: WHERE [GUID] = {GUID {12345678-90AB-CDEF-1234-567890ABCDEF}} 請確保包含如上所示的巢狀大括號和連字號。 需要注意的是,嵌入大括號的方法只用於 Where 語句,在 Insert 語句中還是要使用單引號,否則將產生 MALFORMED GUID in query 的錯誤。

更多參考: ASP.NET開發經驗(3) --- 使用 GUID 值來作為資料庫行標識  http://blog.joycode.com/moslem/archive/2004/03/23/16930.aspx

其他: 匯出/列印Access資料庫的結構 http://blog.csdn.net/johnsuna/archive/2008/05/05/2393664.aspx

附錄:

Access資料型別與.net OleDbType列舉型別的對應

最常見的資料型別對映列表

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
訪問型別名稱 資料庫資料型別 OLEDB 型別 .NET 框架型別 成員名稱
文字 VarWChar DBTYPE _ WSTR System.String OleDbType.VarWChar
備忘錄 LongVarWCha R DBTYPE _ WSTR System.String OleDbType.LongVarWChar
位元組數: UnsignedTinyInt DBTYPE _ UI 1 System.Byte OleDbType.UnsignedTinyInt
是/否 Boolean DBTYPE_BOOL System.Boolean OleDbType.Boolean
日期 / 時間 DateTime DBTYPE _ DATE System.DateTime OleDbType.date
貨幣 十進位制 DBTYPE_NUMERIC System.Decimal OleDbType.numeric
十進位制數: 十進位制 DBTYPE_NUMERIC System.Decimal OleDbType.numeric
雙精度數字: 雙精度數字 DBTYPE_R8 System.Double OleDbType.Double
自動數字(複製 ID) GUID DBTYPE_GUID System.Guid OleDbType.guid
複製 (ID) 號: GUID DBTYPE_GUID System.Guid OleDbType.guid
自動數字(長整型) 整數 DBTYPE_I4 System.Int 32 OleDbType.integer
數量: (長整型) 整數 DBTYPE_I4 System.Int 32 OleDbType.integer
OLE 物件 LongVarBinary DBTYPE_BYTES 陣列 System.Byte OleDbType.LongVarBinary
單精度數字: 單精度數字 DBTYPE_R4 System.Single OleDbType.single
整型數: SmallInt DBTYPE_I2 System.Int 16 OleDbType.SmallInt
二進位制 VarBinary * DBTYPE_BYTES 陣列 System.Byte OleDbType.binary
超連結 VarWChar DBTYPE _ WSTR System.String OleDbType.VarWChar
           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述