線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1048
推到 Plurk!
推到 Facebook!

資料交易的一致性問題?

缺席
adonis
高階會員


發表:140
回覆:258
積分:159
註冊:2002-04-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-01-05 11:25:02 IP:210.201.xxx.xxx 訂閱
各位前輩,請教一個問題..
我利用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才比較正確..
但不知有何法可以解決目前我所碰到的問題,謝謝。
不好意思..已解決 ^ ^
------
我也在努力學習中,若有錯謬請見諒。
系統時間:2024-05-19 17:45:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!