[PB]DATAWINDOW的四個緩衝區



在PowerBuilder中,DataWindow是使用者前端用來存儲、操縱資料的物件。在每一個DataWindow物件中有4個二維表作為資料緩 沖區,用來存儲查詢到的資料。使用者在DataWindow中對資料處理系統內部的操作實際上都是將資料在這幾個緩衝區中進行的修改和移動,最後在使用者提交 資料庫時,系統根據這四個緩衝區中的資訊形成SQL的IN-SERT,UPDATE,DELETE等語句。這四個緩衝區是:

1、Primary Buffer

這個緩衝區是存放填充視窗中DataWindow控制項中資料的,調用DataWindow的Retrieve()函數和InsertRow()函數可以 將資料填入這個緩衝區中。當使用有關DataWindow刪除和過濾函數時,相應記錄將從這一緩衝區中刪除。而在執行DataWindow的 Update()函數時,PowerBuilder將查看這一緩衝區中的記錄,以形成SQL INSERT和UPDATE語句。

2、Delete Buffer

這個緩衝區保存的是用DeleteRow()函數從Primary Buffer中刪除的記錄,執行Update()函數時,系統根據這一緩衝區的記錄形成DELETE語句。

3、Filter Buffer

這個緩衝區存儲的是從Original Buffer使用Filter()函數過濾到Primary Buffer中後剩餘的記錄。

4、Original Buffer

這一緩衝區存儲的是DataWindow最初執行retrieve()函數時得到的全部記錄。當提交資料庫時,根據Primary Buffer生成的UPDATE語句和根據Delete Buffer生成的DELETE語句都要依據這一緩衝區來構造這些SQL語句中的Where子句。

Original Buffer由PowerBuilder內部維護,Power-Builder所提供的任何函數都無法改變它的值,不過通過PowerBuilder所提 供的GetItem…系列的函數可以讀出DataWindow最初從資料庫中查到的原始值。通過這些函數我們可以程式設計實現所謂的"Undo"功能,並且得 到在使用樂觀鎖時形成提交資料庫的WHERE子句。

如果您當前使用的DataWindow沒有設置修改的權力,您將不能對Delete緩衝區和Original緩衝進行操作,而且當調用Update()時也將引起系統錯誤。

數據緩衝區的狀態值

Primary Buffer和Delete Buffer都有行級和列級的狀態值,這個狀態值是一個枚舉類型。在提交時由該行的狀態值來決定是否要產生SQL語句,其中Primary Buffer產生的是IN-SERT和UPDATE語句,而Delete Buffer產生的是DELETE語句。我們用GetItemStatus()函數和SetItemStatus()函數可以對這一狀態值作操縱。這一枚 舉狀態有以下四種:

•NotModified!———該行或行的值為查詢所得,沒有發生改變。

•DataModified!———該行或列的值為查詢所得,發生了改變。

•New!———該行或列為一插入的新行,資料沒有發生改變(資料為空或缺省值)。

•NewModified!———該行或列為一插入的新行,資料發生改變。改變是通過使用者鍵盤輸入或調用了SetItem()函數。

留言

熱門文章