資料交易的一致性問題? |
缺席
|
adonis
高階會員 發表:140 回覆:258 積分:159 註冊:2002-04-15 發送簡訊給我 |
各位前輩,請教一個問題..
我利用Query元件所查得的資料(假設有十筆),利用這十筆資料要去更新其它五個Table,其中四個(有相對應的四個Query元件)僅更新或新增一筆資料,所以我利用了CachedUpdates & RequestLive 設為True(在相對應的四個Query元件中),並在 StartTransaction中去ApplyUpdates & Commit,若有錯誤時則CancelUpdates & Rollback,經測試也正常。 但讓我困擾的是第五個表格會利用Query元件所查得的這十筆資料,去找到相對應的Key值後去更新相對的欄位(利用 While Not Qry5.Eof 的迴圈去單筆觸發查詢),但如此CancelUpdates 若設為True時只有最後一筆會寫入資料庫(因為當下的Local DataSet僅為最後一次查詢所得的筆數,當然只有一筆,只是不知該如何解決這個問題),單筆觸發查詢的寫法例如: Str:='Select * from tb5 where 相對應的key值'; With Qry5 do begin DisableControls; Close; CachedUpdates:=True; DatabaseName:=DB1.DatabaseName; SQL.Clear; SQL.Add(Str); RequestLive:=True; if Prepared = False then Prepare; Open; First; if Not IsEmpty then begin Edit; FieldByName('501').AsString:='.......'; FieldByName('502').AsFloat :=...; end; EnableControls; end; 若將CachedUpdates設為False則會正常的寫入十筆,但是當資料寫入有問題時卻沒了Rollback的相對功能。因為CachedUpdates設為False時,是直接寫入資料庫,但想要讓資料合理性的話必須在發生問題是可以Rollback才比較正確.. 但不知有何法可以解決目前我所碰到的問題,謝謝。 不好意思..已解決 ^ ^
------
我也在努力學習中,若有錯謬請見諒。 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |