TClientDataSet.Delta內容問題 |
答題得分者是:sryang
|
max5020
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:30 回覆:277 積分:321 註冊:2003-06-04 發送簡訊給我 |
目前使用TQuery - TProvider - TClientDataSet,
操作資料維護, 因為要依據資料異動內容, 更新部份Table, 所以想從TClientDataSet.Delta取得異動資料, Code如下: [code delphi] qWork:= TClientDataSet.Create(self); ts:= TStringList.Create; ts.Clear; qWork.Data:= DataSet_Detail.Delta; qWork.First; while not qWork.Eof do begin if qWork.UpdateStatus=usModified then ts.Add('usModified'); if qWork.UpdateStatus=usDeleted then ts.Add('usDeleted'); if qWork.UpdateStatus=usInserted then ts.Add('usInserted'); if qWork.UpdateStatus=usUnModified then ts.Add('usUnModified'); for i:= 0 to qWork.FieldCount- 1 do begin s:= qWork.Fields[i].FieldName ': '; s:= s 'OldValue= '; if VarIsNull(qWork.Fields[i].OldValue) then s:= s 'NULL' else begin s1:= qWork.Fields[i].OldValue; s:= s s1; end; s:= s ', Value= '; if VarIsNull(qWork.Fields[i].Value) then s:= s 'NULL' else begin s1:= qWork.Fields[i].Value; s:= s s1; end; ts.Add(s); end; ts.Add('-----------------------------------'); qWork.Next; end; s:= 'c:\' FormatDateTime('hhnnss', Now) '.txt'; ts.SaveToFile(s); ts.Free; qWork.Destroy; [/code] 但是取得的結果如下: usUnModified upb_kind: OldValue= P1, Value= P1 upb_no: OldValue= 091122A011, Value= 091122A011 upb_seq: OldValue= 5, Value= 5 upb_partNo: OldValue= IR 354020.5 - JNS, Value= IR 354020.5 - JNS upb_qty: OldValue= 130, Value= 130 upb_price: OldValue= 0, Value= 0 upb_priceNTD: OldValue= 72.8, Value= 72.8 upb_ordNo: OldValue= NULL, Value= NULL upb_rem: OldValue= NULL, Value= NULL upb_tax: OldValue= NULL, Value= NULL upb_backNo: OldValue= NULL, Value= NULL upb_backQty: OldValue= 0, Value= 0 upb_price1: OldValue= 130, Value= 130 upb_discount: OldValue= 56, Value= 56 upb_sample: OldValue= N, Value= N upb_cost: OldValue= 72.8, Value= 72.8 ----------------------------------- usModified upb_kind: OldValue= NULL, Value= NULL upb_no: OldValue= NULL, Value= NULL upb_seq: OldValue= NULL, Value= NULL upb_partNo: OldValue= NULL, Value= NULL upb_qty: OldValue= 115, Value= 115 upb_price: OldValue= NULL, Value= NULL upb_priceNTD: OldValue= NULL, Value= NULL upb_ordNo: OldValue= NULL, Value= NULL upb_rem: OldValue= NULL, Value= NULL upb_tax: OldValue= NULL, Value= NULL upb_backNo: OldValue= NULL, Value= NULL upb_backQty: OldValue= NULL, Value= NULL upb_price1: OldValue= NULL, Value= NULL upb_discount: OldValue= NULL, Value= NULL upb_sample: OldValue= NULL, Value= NULL upb_cost: OldValue= NULL, Value= NULL ----------------------------------- 為何異動1筆, Detla卻有2筆, 如何使第2筆的OldValue存在舊值?? |
sryang
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
沒有錯。Update 一筆,Delta 就有兩筆;Insert 或是 Delete 的話,Delta 就是一筆
usUnModified 那一筆就是 old value,usModified 那一筆筆資料中「不是 null」或是「(是 null) and (usUnModified 那一筆中不是 null)」的欄位,是「有修改過的欄位」的 new value 所以你要先把 Unmodified 的那一筆暫存下來,遇到 usModified 的時候,與先前存下來的做比對,找出有修改的欄位,組成 UPDATE 中的 SET 部份
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
編輯記錄
sryang 重新編輯於 2009-12-22 17:24:10, 註解 補充說明‧
|
Jasonwong
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:49 回覆:931 積分:581 註冊:2006-10-27 發送簡訊給我 |
|
sryang
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |