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

用Delphi如何實現VFP中的Cache特性

 
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-10-25 12:27:19 IP:61.221.xxx.xxx 未訂閱
此為轉貼資料 用Delphi如何實現VFP中的Cache特性 作者: 新疆化工學校 馬向東 ---- 在VFP50中編程,因?其本身以資料庫?核心的操作方式,Cache(資料緩衝)工作方式是其本身固有的,當把一個VFP程式向Delphi中轉移時,?提高資料處理速度,應使用其在Delphi2.0以後版本增加的資料庫緩衝機制。Delphi的緩衝機制本身不僅提高了資料處理的性能,同時還帶來了新的特性,增強了資料處理的靈活性。 ---- 與緩衝機制有關的屬性和方法如下,只有在緩衝機制下,即CachedUpdates:=True時,以下屬性和方法才有效: ---- CachedUpdates(屬性):?True時,打開緩衝機制。 ---- UpdatesObject(屬性):可以放置一個TUpdateSql元件的SQL語句,並可自動執行,也可以由OnUpdateRecord事件處理程式調用。 ---- UpdatesPending(屬性):緩存中資料是否改變,True:改變。 ---- ApplyUpdates(方法):將緩衝資料存檔。 ---- CommitUpdates(方法):與ApplyUpdates合作,緊跟之後,將緩衝資料存檔。 ---- CancelUpdates(方法):取消緩存中的所有更新。 ---- RevertRecord(方法):恢復當前記錄的原有資料,取消資料更改。 ---- UpdateRecord(方法):將緩衝資料存檔。 ---- UpdateStatus(函數):返回記錄的更新狀態,共有四種狀態,usUnmodified,usModified,usInserted,usDeleted,可供查詢。 ---- 瞭解緩衝機制的屬性和方法後,用一個電話管理程式來說明。如圖1(略) ---- 東西不多,一個TDBGrid,三個Button,四個CheckBox,一個Table和一個DataSource,一個Navigator。將Table.ChacedUpdates屬性設置?True,加入三個欄位,其中一個State欄位是一個計算欄位,欄位值在DhbTable的OnCalcFields事件中定義,如下: procedure TForm1.DhbTableCalcFields(DataSet: TDataSet); begin If DhbTable.UpdateStatus =usUnmodified Then DhbTableState.Value:='原有記錄'; //這兩種訪問欄位的方式是等價的 If DhbTable.UpdateStatus =usModified Then DhbTable.FieldByName('State').asString:='已修改記錄'; If DhbTable.UpdateStatus =usInserted Then DhbTable.FieldByName('State').asString:='新增記錄'; If DhbTable.UpdateStatus =usDeleted Then DhbTable.FieldbyName('State').asstring:='已刪除記錄'; end; ---- 這個在DhbTable中定義的計算欄位表達了每個記錄現有的狀態,而如何在DBGrid中顯示這些欄位由四個CheckBox控制,它們共用了一個事件控制碼,如下: procedure TForm1.CheckBox1Click(Sender: TObject); var UpdataTypes:TUpdateRecordTypes; begin UpdataTypes:=[]; If CheckBox1.Checked then Include(UpdataTypes,rtUnModified); If CheckBox2.Checked then Include(UpdataTypes,rtModified); If CheckBox3.Checked then Include(UpdataTypes,rtInserted); If CheckBox4.Checked then Include(UpdataTypes,rtDeleted); DhbTable.UpdateRecordTypes :=UpdataTypes; end; ---- rtModified, rtInserted, rtDeleted, rtUnmodified這四個常量分別定義了緩衝狀態下的四種顯示狀態。若四種都沒有選擇,默認狀態是除了rtDeleted以外的三種狀態集合。DhbTable根據其屬性UpdateRecordType集合中的值自動顯示相應的記錄。 ---- 三個按鈕首先判斷緩衝中是否有變化,若有,分別執行緩衝操作指令。OKButton是存檔,CancelAllButton是取消所有更新,RevertThisButton是恢復當前記錄的改變(如果有變化)。代碼如下: procedure TForm1.OKButtonClick(Sender: TObject); begin If DhbTable.UpdatesPending then DhbTable.ApplyUpdates; DhbTable.CommitUpdates; end; procedure TForm1.CancelAllButtonClick (Sender: TObject); begin If DhbTable.UpdatesPending then DhbTable.CancelUpdates; end; procedure TForm1.RevertThisButtonClick (Sender: TObject); begin If DhbTable.UpdatesPending then DhbTable.RevertRecord; end; ---- 然後,運行這個小程式,感覺一下緩衝的效果,先增加一批記錄,修改一批記錄,再刪除幾個記錄,單擊四個CheckBox,看一看不同選擇下的顯示方式,試著恢復刪除或修改的記錄,絕對錯不了。 ---- 要注意的是,在緩衝機制下,如果用POST,或Refresh或用: Table.Close Table.Open ---- 後,修改的資料並沒有存入到資料庫中,如果要存檔,必須使用: Table.ApplyUpdates; Table.CommitUpdates; ---- 這才是緩衝機制下存檔的正確方法。
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
系統時間:2024-05-16 7:02:35
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!