1. 程式人生 > >資料儲存時,出現‘record not found or changed by another user’錯誤資訊的解決辦法

資料儲存時,出現‘record not found or changed by another user’錯誤資訊的解決辦法

  'record not found or changed by  another user',這個錯誤是我在做專案時,遇到的問題,找了一些參考才解決。如下:

所用的控制元件有:TDataSetProvider,TADOQuery,TClientDataSet

1.當 DataSetProvider.UpdateMode=upWhereAll 時,update時 where 是指定全部欄位,比如,你有a、b、c 3個欄位,修改了c欄位,在app server中修改的命令是update ... set c=新c where a=舊a and b=舊b and c=舊c

如果 舊的a、b、c之一 已經被其他人改掉了,那where就找不到合適的記錄來修改了。所以報告“記錄被其他人修改”,這個問題和“鎖定”是無關的。

2.當 DataSetProvider.UpdateMode=upWhereKeyOnly 時,update時 where 是指定key欄位,比如,

你有a、b、c 3個欄位,修改了c欄位,a是key field在app server中修改的命令是update ... set c=新c where a=舊a (只比較a欄位)你的程式應該設計為客戶修改不到主鍵欄位的值,這樣你的客戶只能修改到其他欄位的值,其他欄位不會出現在where中,就不會出現你說的問題了。

(用第2種方法解決,注意如果你的表原來沒有主鍵的,需要雙擊dataset,新增你的所有field,在有唯一值的field的 ProviderFlasgs 屬性裡面 InKey 設定為 true (該field必須是有唯一值的,能相當於主鍵的,也就是能唯一確定該行記錄的),TADOQuery,TClientDataSet控制元件裡的唯一值的field字都要設定InKey為true)