欧美特黄不卡,涩涩视频在线,成人国产精品一区二区网站,亚洲一区二区三区欧美

當(dāng)前位置:雨林木風(fēng)下載站 > 技術(shù)開(kāi)發(fā)教程 > 詳細(xì)頁(yè)面

DataWindow的數(shù)據(jù)緩沖區(qū)

DataWindow的數(shù)據(jù)緩沖區(qū)

更新時(shí)間:2022-05-14 文章作者:未知 信息來(lái)源:網(wǎng)絡(luò) 閱讀次數(shù):

在PowerBuilder中,DataWindow是用戶前端用來(lái)存儲(chǔ)、操縱數(shù)據(jù)的對(duì)象。在每一個(gè)DataWindow對(duì)象中有4個(gè)二維表作為數(shù)據(jù)緩沖區(qū),用來(lái)存儲(chǔ)查詢(xún)到的數(shù)據(jù)。用戶在DataWindow中對(duì)數(shù)據(jù)處理系統(tǒng)內(nèi)部的操作實(shí)際上都是將數(shù)據(jù)在這幾個(gè)緩沖區(qū)中進(jìn)行的修改和移動(dòng),最后在用戶提交數(shù)據(jù)庫(kù)時(shí),系統(tǒng)根據(jù)這四個(gè)緩沖區(qū)中的信息形成SQL的IN-SERT,UPDATE,DELETE等語(yǔ)句。這四個(gè)緩沖區(qū)是:

PrimaryBuffer
這個(gè)緩沖區(qū)是存放填充窗口中DataWindow控件中數(shù)據(jù)的,調(diào)用DataWindow的Retrieve()函數(shù)和InsertRow()函數(shù)可以將數(shù)據(jù)填入這個(gè)緩沖區(qū)中。當(dāng)使用有關(guān)DataWindow刪除和過(guò)濾函數(shù)時(shí),相應(yīng)記錄將從這一緩沖區(qū)中刪除。而在執(zhí)行DataWindow的Update()函數(shù)時(shí),PowerBuilder將查看這一緩沖區(qū)中的記錄,以形成SQLINSERT和UPDATE語(yǔ)句。

DeleteBuffer
這個(gè)緩沖區(qū)保存的是用DeleteRow()函數(shù)從PrimaryBuffer中刪除的記錄,執(zhí)行Update()函數(shù)時(shí),系統(tǒng)根據(jù)這一緩沖區(qū)的記錄形成DELETE語(yǔ)句。

FilterBuffer
這個(gè)緩沖區(qū)存儲(chǔ)的是從OriginalBuffer使用Filter()函數(shù)過(guò)濾到PrimaryBuffer中后剩余的記錄。

OriginalBuffer
這一緩沖區(qū)存儲(chǔ)的是DataWindow最初執(zhí)行retrieve()函數(shù)時(shí)得到的全部記錄。當(dāng)提交數(shù)據(jù)庫(kù)時(shí),根據(jù)PrimaryBuffer生成的UPDATE語(yǔ)句和根據(jù)DeleteBuffer生成的DELETE語(yǔ)句都要依據(jù)這一緩沖區(qū)來(lái)構(gòu)造這些SQL語(yǔ)句中的Where子句。

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

溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

本類(lèi)教程下載

系統(tǒng)下載排行

主站蜘蛛池模板: 泸州市| 高要市| 合水县| 贵德县| 黑河市| 白朗县| 吉安县| 镇安县| 汉源县| 囊谦县| 南雄市| 抚宁县| 乌海市| 株洲县| 公安县| 合山市| 酉阳| 武强县| 牡丹江市| 潮安县| 瑞金市| 西峡县| 莆田市| 志丹县| 宜阳县| 兴隆县| 武陟县| 刚察县| 赣州市| 柘荣县| 车致| 金阳县| 江都市| 三门峡市| 曲靖市| 自贡市| 安龙县| 衡山县| 定远县| 密云县| 杂多县|