none
為何會莫名其妙的漏失記錄 RRS feed

  • 問題

  • 1. 使用 VB2008.
    2. 使用 Access 2003 的 mdb 資料庫。
    3. 採區域網路作業。共有 5 台 Client 端電腦,Data 放在 Server 端。 Client  端的資料存取對象為 Server 的 mdb 檔案,每個檔案都有十萬筆以上的記錄。

    問題:共有 10 個 mdb 檔案,幾乎每個 mdb 檔案都會產生資料漏失的問題,有的四五筆,有的數十筆不定。

    請問,有哪些狀況會導致 mdb 資料漏失呢? 我一直找不出答案,不知問題在哪,所以無法具體提問,因此煩請大大們能提供線索,讓我來搜尋問題。


     
    chian
    2009年10月12日 上午 02:13

解答

  • Hi,

    由您的敘述及資料庫資料筆數來講, 想必您的應用程式對於資料庫存取會很頻繁?
    建議您可以改以SQL Server 作為資料庫(SQL Server Express為免費版本), 透過SQL Server控管會比使用MDB好.

    如果您要找出為什麼資料會Lose, 建議您可以寫一些Log去判斷.
    微軟技術支援中心 (CSS)
    • 已標示為解答 chian 2009年10月13日 上午 09:32
    2009年10月12日 上午 02:30
  • Access 並非設計用來當網路資料庫使用,他是檔案型資料庫,雖然可用在區域網路上,但不應該把這種特例當成設計上的邏輯來運用。

    Access 是透過本機的 odbc / oledb 去連線,查詢時也是使用本機的驅動程式,則會造成過度的網芳流量流竄,雖然還不致於整個資料庫檔案沒事就透過網芳傳來傳去,但查詢過程的必要資料流量仍會透過網芳流動,等於沒事就透過網路傳輸整個表格到本機,再於本機過濾,由於傳輸量大,自然不可避免的鎖定時間將會增加,建議你檢查你錯誤捕捉部分,是否忽略了鎖定造成的問題。

    網路環境下,請明確改用伺服器型資料庫,若有採購問題,可用免費版的 SQL Server Express ,伺服器型資料庫查詢過程是在伺服器上執行,執行完後解除鎖定將資料寫入緩衝區透過網路傳輸,網路傳輸僅有必要流量,可確保鎖定時間降到最小。
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    • 已標示為解答 chian 2009年10月13日 上午 09:32
    2009年10月12日 上午 02:45
  • hi
    根據以上大大所說
    小弟在補充一下
    你採用ACCESS共用方法為網路資料夾,這種方法最簡單但功能也最少
    雖然可以讓多人使用該資料庫,但如果同時有多位使用者變更資料,
    就會發生資料正確性,可靠性和可用性的問題(而這應該也是是你會漏失紀錄原因),
    所以你可以考慮更換SQLSERVER(底層database engine 提供Locking Facility,來維持資料一致性,完成性,隔離性)

    供你參考
    http://www.dotblogs.com.tw/ricochen/Default.aspx
    • 已標示為解答 chian 2009年10月13日 上午 09:32
    2009年10月12日 上午 03:32
  • 請問是否有救急之計,讓短時間內先避免資料之漏失,而後再慢慢來變更使用SQL Server 資料庫。 

    前面有寫:
    建議你檢查你錯誤捕捉部分,是否忽略了鎖定造成的問題。

    另外還有一種可能,若是你沒正確考慮多人存取的互動,可能誤砍了也不一定。

    因為若是鎖定造成資料無法新增,會丟出例外,所以有兩種可能,一是把例外捕捉掉,反而沒訊息讓你參考,一是順利新增,但是卻又被其他部分砍掉。
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    • 已標示為解答 chian 2009年10月13日 上午 09:31
    2009年10月12日 下午 03:19

所有回覆

  • Hi,

    由您的敘述及資料庫資料筆數來講, 想必您的應用程式對於資料庫存取會很頻繁?
    建議您可以改以SQL Server 作為資料庫(SQL Server Express為免費版本), 透過SQL Server控管會比使用MDB好.

    如果您要找出為什麼資料會Lose, 建議您可以寫一些Log去判斷.
    微軟技術支援中心 (CSS)
    • 已標示為解答 chian 2009年10月13日 上午 09:32
    2009年10月12日 上午 02:30
  • Access 並非設計用來當網路資料庫使用,他是檔案型資料庫,雖然可用在區域網路上,但不應該把這種特例當成設計上的邏輯來運用。

    Access 是透過本機的 odbc / oledb 去連線,查詢時也是使用本機的驅動程式,則會造成過度的網芳流量流竄,雖然還不致於整個資料庫檔案沒事就透過網芳傳來傳去,但查詢過程的必要資料流量仍會透過網芳流動,等於沒事就透過網路傳輸整個表格到本機,再於本機過濾,由於傳輸量大,自然不可避免的鎖定時間將會增加,建議你檢查你錯誤捕捉部分,是否忽略了鎖定造成的問題。

    網路環境下,請明確改用伺服器型資料庫,若有採購問題,可用免費版的 SQL Server Express ,伺服器型資料庫查詢過程是在伺服器上執行,執行完後解除鎖定將資料寫入緩衝區透過網路傳輸,網路傳輸僅有必要流量,可確保鎖定時間降到最小。
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    • 已標示為解答 chian 2009年10月13日 上午 09:32
    2009年10月12日 上午 02:45
  • hi
    根據以上大大所說
    小弟在補充一下
    你採用ACCESS共用方法為網路資料夾,這種方法最簡單但功能也最少
    雖然可以讓多人使用該資料庫,但如果同時有多位使用者變更資料,
    就會發生資料正確性,可靠性和可用性的問題(而這應該也是是你會漏失紀錄原因),
    所以你可以考慮更換SQLSERVER(底層database engine 提供Locking Facility,來維持資料一致性,完成性,隔離性)

    供你參考
    http://www.dotblogs.com.tw/ricochen/Default.aspx
    • 已標示為解答 chian 2009年10月13日 上午 09:32
    2009年10月12日 上午 03:32
  • 1. 感謝各位大大的說明,這讓我知道,我錯用了資料庫類型。
    2. 由於系統在上線中,且 mdb 資料庫有 20 幾個,一下子要變更使用 SQL Server 資料庫有困難。

    請問是否有救急之計,讓短時間內先避免資料之漏失,而後再慢慢來變更使用SQL Server 資料庫。 

    敬請再指導,謝囉.
    chian
    2009年10月12日 上午 07:11
  • 由於access不向SQLERVER有lock機制來維護資料,所以建議利用晚上時間快點轉換資料庫才是正途



    1.前端系統自己實作lock機制,例如:user A update table1,其餘user不准update,delete only select(這樣搞相信會更麻煩更複雜)
    2.使用SSMA快速轉換至SQLSERVER,前端系統只改連線字串,同時也避免發生資料遺失問題

    使用SSMA可以參考小弟這篇Access 2 SQL(很快的)
    http://www.dotblogs.com.tw/ricochen/archive/2009/09/16/10664.aspx
    http://www.dotblogs.com.tw/ricochen/Default.aspx
    2009年10月12日 下午 12:42
  • 1. 感謝提供意見。
    2. 請問如何取得 SSMA 軟體。此轉換系統是否會將 Access 資料庫的記錄,也一併轉入 SQL Server 資料庫。

    謝囉
    chian
    • 已標示為解答 chian 2009年10月13日 上午 09:31
    • 已取消標示為解答 bauannModerator 2009年12月16日 上午 03:59
    2009年10月12日 下午 01:57
  • 2.http://www.microsoft.com/downloads/details.aspx?FamilyId=D842F8B4-C914-4AC7-B2F3-D25FFF4E24FB&displaylang=en
    資料這是一定要轉換的

    ^^
    http://www.dotblogs.com.tw/ricochen/Default.aspx
    2009年10月12日 下午 02:15
  • 請問是否有救急之計,讓短時間內先避免資料之漏失,而後再慢慢來變更使用SQL Server 資料庫。 

    前面有寫:
    建議你檢查你錯誤捕捉部分,是否忽略了鎖定造成的問題。

    另外還有一種可能,若是你沒正確考慮多人存取的互動,可能誤砍了也不一定。

    因為若是鎖定造成資料無法新增,會丟出例外,所以有兩種可能,一是把例外捕捉掉,反而沒訊息讓你參考,一是順利新增,但是卻又被其他部分砍掉。
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    • 已標示為解答 chian 2009年10月13日 上午 09:31
    2009年10月12日 下午 03:19