2012-08-09 60 views
0

我正在嘗試編寫一個程序VB.net這是一個'花哨'的數據庫前端。 該程序要做的是將數據庫從「服務器」數據庫所在的共享位置本地存儲在用戶計算機上。合併Access數據庫

本地和服務器副本都存儲到數據集中,然後程序檢查服務器副本以查看它最近是否有任何更新。如果有,它只會下載更新以減少帶寬。

我想要做的是強制本地數據庫承擔服務器數據庫更改。但是,使用data-adapter.update時,它無法注意到任何更改,因爲目前重新加載服務器數據集的方式是清除它,並從頭開始重新加載。

是否有任何有效的方法強制服務器數據集到本地,然後強制本地數據集重寫數據庫在BGW?正如我之前所說的,如果我只是清除本地服務器並將服務器複製到本地服務器,那麼data-adapter.update似乎不會保存更改。

道歉,如果我完全錯誤的方式。任何意見,或指導將不勝感激。

約翰

dsLocalDB.Clear() 'Clear the local dataset 
    dsLocalDB = dbServerDB.Copy 'copy the server dataset to the local dataset 
    LoadData() 'let the application reload all the new records 


    Dim cb As New OleDb.OleDbCommandBuilder(daLocalDB) 'Create a COmmand Builder 
    For i = 1 To TableNames.GetUpperBound(0) 'Loop through all the tables which have been stored as an array 
     For Each row As DataRow In dsLocalDB.Tables(TableNames(i)).Rows 'Loop through the rows, so we can see if it detects modified data. For testing purposes. 
      If row.RowState = DataRowState.Modified Then 'Its found modified data! 
       MsgBox("Found Modified Data Row!") 'Output a message 
       Exit For 'exit the for loop 
      End If 
     Next 
     daLocalDB.Update(dsLocalDB, TableNames(i)) 'Update the local database 
    Next i 
+0

您是否添加了創建和更新所有表格的時間戳? – Fionnuala 2012-08-09 11:31:40

+0

我還沒有,但是我打算在每條記錄上做這個。但是,這隻需要同步到一邊。本地副本永遠不會被寫入,它將始終是隻讀的。用戶只會從中讀取數據,它只是該機器設法抓取的最新服務器的「副本」。 – 2012-08-09 11:43:27

+0

也許我不明白?對我來說,最簡單的事情就是存儲上次更新的日期,然後複製下面的任何內容。 – Fionnuala 2012-08-09 11:46:23

回答

2

你可能想看看這個:

http://www.codeproject.com/Articles/18027/Take-Data-Offline-Using-Microsoft-Synchronization

PS:
如果你打開善意的忠告:你這樣做它錯了。永遠不要保留兩個數據庫。
同步兩個數據庫是一個非常微妙的過程。
即使集羣應用程序也使用實時同步。
如果你沒有幾年的經驗,你很快就會產生混亂。
閱讀文章中的免責聲明(無擔保,明示,暗示或法定)。

+0

對不起,可能是我寫的。我無意保持它們同步。我所需要做的就是確保它可以從服務器副本下載所有更改。並且由於它已經在數據集中執行了,將數據集上傳到數據庫會更容易,而不是佔用更多的帶寬? – 2012-08-09 11:52:27