2011-11-28 24 views
0

當DataSnap客戶端應用程序連接到DataSnap服務器的遠程數據模塊並使用TDataSetProvider + TClientDataSet時,它會緩存客戶端應用程序本地的數據庫表(或視圖)。用戶可以在本地對TClientDataSet中的數據進行更改,並將更改與服務器同步。這一切都有道理。使用公文包模式的本地TClientDataSet上的主鍵

使用SQL Server 2008數據庫,主鍵可以是identityGUID字段。假設用戶將離線而他們新記錄添加到本地TClientDataSet,請問該主鍵字段的地方TDataSetProviderTClientDataSet手柄分配當用戶創建一個新的記錄?由於本地創建的記錄可能是主/關係關係的一部分,因此在本地創建新主鍵需要似乎是合理的。當用戶執行「ApplyUpdates(0)」時如何解決這個問題?

當多個用戶創建離線模式記錄,怎麼也主鍵衝突解決時,他們每做一個ApplyUpdates(0)

identity字段好於GUID字段,或反之亦然?爲什麼?

+0

可能重複的[你喜歡你的主鍵?](http://stackoverflow.com/questions/404040/how-do-you-like-your-primary-keys) – JNK

+0

該文章是一般性討論什麼樣的主鍵最好。我的問題是,當TDataSetProvider和TClientDataSet在高速緩存的數據集中創建離線主鍵以及當用戶通過調用ApplyUpdates(0)同步其本地高速緩存與服務器時,這些組件是如何處理主鍵的。當使用「身份」或「GUID」字段時,組件處理主鍵的方式可能存在問題 - 因此,問題是哪個最好。 –

回答

0

這可能是最接近的答案:

How to use AutoInc fields with DataSnap

有誰有更好的建議?

+0

'uniqueidentifier'將會滿足我們的需求,包括處理本地緩存數據中的大部分主/客戶端詳細信息關係。當兩個在離線模式下工作的用戶創建具有相同GUID的新記錄時,我們需要處理的唯一例外是主鍵違規。我知道GUID **總是**獨特。但是,當GUID創建時以太網/令牌環地址不可用時,它們不保證是唯一的。在這種情況下,在不同計算機上創建的GUID之間可能會有重疊。 –