• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

        DataWindow的數據緩沖區

        DataWindow的數據緩沖區

        更新時間:2022-05-14 文章作者:未知 信息來源:網絡 閱讀次數:

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

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

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

        FilterBuffer
        這個緩沖區存儲的是從OriginalBuffer使用Filter()函數過濾到PrimaryBuffer中后剩余的記錄。

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

            OriginalBuffer由PowerBuilder內部維護,Power-Builder所提供的任何函數都無法改變它的值,不過通過PowerBuilder所提供的GetItem…系列的函數可以讀出DataWindow最初從數據庫中查到的原始值。通過這些函數我們可以編程實現所謂的"Undo"功能,并且得到在使用樂觀鎖時形成提交數據庫的WHERE子句。
        如果您當前使用的DataWindow沒有設置修改的權力,您將不能對Delete緩沖區和Original緩沖進行操作,而且當調用Update()時也將引起系統錯誤。
        數據緩沖區的狀態值
            PrimaryBuffer和DeleteBuffer都有行級和列級的狀態值,這個狀態值是一個枚舉類型。在提交時由該行的狀態值來決定是否要產生SQL語句,其中PrimaryBuffer產生的是INSERT和UPDATE語句,而DeleteBuffer產生的是DELETE語句。我們用GetItemStatus()函數和SetItemStatus()函數可以對這一狀態值作操縱。這一枚舉狀態有以下四種:
        ·NotModified!———該行或行的值為查詢所得,沒有發生改變。
        ·DataModified!———該行或列的值為查詢所得,發生了改變。
        ·New!———該行或列為一插入的新行,數據沒有發生改變(數據為空或缺省值)。
        ·NewModified!———該行或列為一插入的新行,數據發生改變。改變是通過用戶鍵盤輸入或調用了SetItem()函數。
        讓我們來看下面這一實例:
        我們有這樣一張表,表中有三個字段,其中ITEM是主鍵。
        ITEMCHAR(5);
        NAMECHAR(20);
        QUANTITYINT。
        在Script中我們查詢這張表的記錄,得到以下這些信息存儲了在Primary和OrigianalBuffer中,其中的行號是緩沖區加上的。!TB01175000.gif
        在窗口中,我們編程過濾掉數量為0的行,并且加上一個空行:
        dw_1.SetFilter("quantity=0")
        dw_1.Filter()
        dw_1.InsertRow()
        這時PrimaryBuffer的狀態為:!TB01175001.gif
        在FilterBuffer中的記錄為:!TB01175002.gif
        用戶在新插入行中輸入數據,刪除了第3行數據,并修改了第2行數據。當他離開這個DataWindow時,Primary和Delete緩沖區的狀態如下:!TB01175003.gif
        這時執行dw_1.update()函數,系統將基于這兩個緩沖區生成SQL語句。!TB01175004.gif
        在PrimaryBuffer中,狀態為NotModified和New!的行將被忽略而不產生SQL語句。狀態為DataModified的行將產生UPDATE語句,狀態為NewModified的行將產生INSERT語句,在Delete緩沖區中的行將產生DELETE語句。
        四個緩沖區在編程中的運用
        某些DataWindow控件的函數有指定DataWindow緩沖區的功能。如果缺省,則表示Primary緩沖區。下列是可以指定緩沖區的函數:
        ·GetItemStatus()
        ·GetNextModified()
        ·GetUpdateStatus()
        ·SetItemStatus()
        此外還有GetItem…系列的函數,用以查詢DataWindow中的值。這些函數有:
        ·GetItemDate()
        ·GetItemDataTime()
        ·GetItemDecimal()
        ·GetItemNumber()
        ·GetItemString()
        ·GetItemTime() 

        溫馨提示:喜歡本站的話,請收藏一下本站!

        本類教程下載

        系統下載排行

        主站蜘蛛池模板: 国产亚洲人成A在线V网站| 免费爱爱的视频太爽了| 国产成人综合亚洲亚洲国产第一页| 亚洲国产精品免费观看| 中字幕视频在线永久在线观看免费| 久久亚洲AV无码精品色午夜| 免费人妻无码不卡中文字幕系| 亚洲视频在线免费看| 黄页网站免费观看| 免费v片在线观看视频网站| 亚洲AV无码国产在丝袜线观看| 光棍天堂免费手机观看在线观看 | 成人无码区免费A片视频WWW| 亚洲伊人久久大香线蕉啊| 成人网站免费观看| 亚洲AV无码专区国产乱码不卡| 久久久免费的精品| 久久亚洲sm情趣捆绑调教| 成人性生交大片免费看午夜a| 爱情岛亚洲论坛在线观看| 亚洲综合色区在线观看| 久久er国产精品免费观看2| 免费看又爽又黄禁片视频1000| 亚洲国产精品美女久久久久| 亚洲无码日韩精品第一页| 久久美女网站免费| 亚洲一区二区三区在线| 国产成人免费福利网站| 国产精品免费久久久久影院 | 色五月五月丁香亚洲综合网| 亚洲免费无码在线| 91精品全国免费观看含羞草| 亚洲色大18成人网站WWW在线播放| 夜色阁亚洲一区二区三区| 亚洲1区1区3区4区产品乱码芒果 | 一个人免费观看在线视频www| 美国免费高清一级毛片| 亚洲AV日韩AV永久无码绿巨人| 一区二区无码免费视频网站 | 国产高清免费观看| 国产麻豆一精品一AV一免费|