全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2487
推到 Plurk!
推到 Facebook!

applyupdate 跟 commit的差別

尚未結案
andygod
一般會員


發表:7
回覆:7
積分:2
註冊:2002-11-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-04-13 20:56:24 IP:61.64.xxx.xxx 未訂閱
各位大大 大家好  小弟初次發言 如有不對的請多多指教 ....^^ 最近使用到 BDE Table元件  如果cachedupdate 設為true的話 要實際寫入資料庫的話 需下 commitupdate 或 applyupdate  但這兩個指令 最大的差別在哪裡  並不是很了解  有搜尋過並沒有找到相似的問題    所以想請各位大大  解答一下  謝謝  我隨風而來,隨風而去
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-04-14 09:17:49 IP:61.219.xxx.xxx 未訂閱
ApplyUpdates是將cachedUpdate之資料送回DataBase Server儲存.  TBDEDataSet.CommitUpdates是將local的cachedUpdate之內容清空, 並不執行任何post等動作注意DataBase.Commit與DataSet.CommitUpdates意義完全不同 在BDE中TDataBase及TBDEDataSet均有此method, 但效能不完全相同 以Dataset而言, 以下是online Help中之標準寫法
  with CustomerQuery do  //針對dataset
  begin
    Database1.StartTransaction;  //開始一個Transaction
    try
      ApplyUpdates; //實際執行寫入
      Database1.Commit; //確認寫入, 此為database之method
    except
      Database1.Rollback; 
    raise; {raise the exception to prevent a call to CommitUpdates!}
    end;
  CommitUpdates; //清除 cache buffer
  end;
但這兩個指令 最大的差別在哪裡 DataSet.applyupdates, database.commit是Transaction之兩個階段 dataset.commitupdates是清除 cache buffer 意義是完全不同的 另外TDatabase元件也有applyupdates method 例: Database1.applyupdates([query1,query2...]); //多個dataset Database之applyupdates會自動包裝整個Transaction, 如同上面的一樣, 包含Database.commit, rollback等等均會自動完成 因此, 使用Cached updates時應用Database.applyupdates不要用dataset.applyupdates, 否則就要自己包Transaction
pgdennis
資深會員


發表:41
回覆:526
積分:443
註冊:2002-05-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-04-14 10:20:17 IP:61.219.xxx.xxx 未訂閱
引言: ApplyUpdates是將cachedUpdate之資料送回DataBase Server儲存. TBDEDataSet.CommitUpdates是將local的cachedUpdate之內容清空, 並不執行任何post等動作注意DataBase.Commit與DataSet.CommitUpdates意義完全不同 在BDE中TDataBase及TBDEDataSet均有此method, 但效能不完全相同 以Dataset而言, 以下是online Help中之標準寫法
  with CustomerQuery do  //針對dataset
  begin
    Database1.StartTransaction;  //開始一個Transaction
    try
      ApplyUpdates; //實際執行寫入
      Database1.Commit; //確認寫入, 此為database之method
    except
      Database1.Rollback; 
    raise; {raise the exception to prevent a call to CommitUpdates!}
    end;
  CommitUpdates; //清除 cache buffer
  end;
但這兩個指令 最大的差別在哪裡 DataSet.applyupdates, database.commit是Transaction之兩個階段 dataset.commitupdates是清除 cache buffer 意義是完全不同的 另外TDatabase元件也有applyupdates method 例: Database1.applyupdates([query1,query2...]); //多個dataset Database之applyupdates會自動包裝整個Transaction, 如同上面的一樣, 包含Database.commit, rollback等等均會自動完成 因此, 使用Cached updates時應用Database.applyupdates不要用dataset.applyupdates, 否則就要自己包Transaction
又上了寶貴的一課了...感謝
------
星期一,二...無窮迴圈@@
andygod
一般會員


發表:7
回覆:7
積分:2
註冊:2002-11-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-04-15 21:10:28 IP:61.64.xxx.xxx 未訂閱
謝謝 ccc 大大 感謝你的解答 我隨風而來,隨風而去
系統時間:2024-05-09 16:24:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!