久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

PB數(shù)據(jù)窗口控件之簡(jiǎn)介

 格瑞思n5c5alhf 2020-03-25

數(shù)據(jù)窗口控件-datawindow
PB9.0提供了28個(gè)屬性、35個(gè)默認(rèn)事件,、162個(gè)函數(shù)。注意與數(shù)據(jù)窗口對(duì)象的區(qū)分,。

【其他】

■腳本的執(zhí)行效率
*盡量不要在RetrieveRow事件下編寫(xiě)腳本(包括注釋?zhuān)?/p>

*如果數(shù)據(jù)窗口的DoubleClicked事件中編寫(xiě)了腳本,,那么在數(shù)據(jù)窗口的C1icked事件中的腳本應(yīng)該盡量短,否則雙擊事件中的腳本永遠(yuǎn)不可能得到執(zhí)行,。一般來(lái)說(shuō),,Cliked中腳本的執(zhí)行時(shí)間和兩次擊鼠標(biāo)之間的間隔時(shí)間之和,不應(yīng)該大于操作系統(tǒng)中所設(shè)定的鼠標(biāo)雙擊時(shí)間間隔,,否則雙擊事件永遠(yuǎn)不可能觸發(fā),,雙擊時(shí)僅僅是接連兩次觸發(fā)c1icked事件。

*在數(shù)據(jù)窗口中錄入數(shù)據(jù)時(shí),,事件EditChanged是觸發(fā)頻率最高的,,每一個(gè)按鈕都觸發(fā)該事件;觸發(fā)頻率僅次于該事件的是ItemChanged事件和ItemFocusChanged,,只要修改了單元中的內(nèi)容,,每次觸發(fā)ItemFocusChanged事件都會(huì)觸發(fā)ItemChanged事件。在這些事件下編寫(xiě)過(guò)長(zhǎng)的腳本會(huì)非常影響錄入工作的效率,。同樣,,事件RowFocusChanged的觸發(fā)頻率也是相當(dāng)高的。一般來(lái)說(shuō)是可以避免在這四個(gè)事件中編寫(xiě)腳本的,。

■dwo參數(shù)使用
數(shù)據(jù)窗口的某些事件中可以使用一個(gè)稱為dwo的變量,,該變量保存數(shù)據(jù)窗口中的部分信息,用數(shù)據(jù)窗口的屬性可以讀取這些信息dwo.type:讀取在dwo中保存的對(duì)象類(lèi)型,。對(duì)象類(lèi)型可能有bitmap,、button,、column、compute,、graph,、groupbox、line,、ole,、ellipse、rectangle,、roundrectangle,、report、tableblob,、text,、datawindow(當(dāng)用戶沒(méi)有單擊特定對(duì)象時(shí))
dwo.Name:column的列名
dwo.Primary[row]:column的數(shù)據(jù)
dwo.Selected:選中column的數(shù)據(jù)

■數(shù)據(jù)緩沖區(qū)
數(shù)據(jù)窗口在運(yùn)行時(shí)要?jiǎng)?chuàng)建四個(gè)緩沖區(qū),分別是主緩沖區(qū),、刪除緩沖區(qū),、過(guò)濾緩沖區(qū)和原始緩沖區(qū),這四個(gè)緩沖區(qū)各司其職,、共同配合,,來(lái)保證數(shù)據(jù)窗口對(duì)數(shù)據(jù)的正確處理。下面分別加以介紹,。
1,、主緩沖區(qū)-Primary
這是最重要的一個(gè)緩沖區(qū),保存的是當(dāng)前顯示在數(shù)據(jù)窗口中的所有數(shù)據(jù)以及它們的修改狀態(tài),。在保存數(shù)據(jù)時(shí)使用這些狀態(tài)生成SQL語(yǔ)句,。平常的大多數(shù)操作都是針對(duì)該緩沖區(qū),函數(shù)中的緩沖區(qū)參數(shù)缺省也是該緩沖區(qū),。
2,、刪除緩沖區(qū)-Delete
該緩沖區(qū)保存所有刪除了的數(shù)據(jù)。保存數(shù)據(jù)時(shí),,該緩沖區(qū)中的數(shù)據(jù)用來(lái)產(chǎn)生delete語(yǔ)句,。在數(shù)據(jù)沒(méi)有提交到數(shù)據(jù)庫(kù)之前,可以從該緩沖區(qū)中將數(shù)據(jù)恢復(fù)出來(lái),。數(shù)據(jù)提交后,,該緩沖區(qū)中的數(shù)據(jù)清空。
3,、過(guò)濾緩沖區(qū)-Filter
該緩沖區(qū)中保存的是沒(méi)有通過(guò)過(guò)濾規(guī)則的所有數(shù)據(jù),,這些數(shù)據(jù)在存儲(chǔ)時(shí)同主緩存區(qū)的數(shù)據(jù)一起生成相應(yīng)的insert或update語(yǔ)句。
4,、原始緩沖區(qū)-original
用來(lái)保存從數(shù)據(jù)庫(kù)中檢索到的初始值,,在保存數(shù)據(jù)時(shí)用來(lái)生成where語(yǔ)句,。
上面這四個(gè)緩沖區(qū)中,original緩沖區(qū)在腳本中很少使用,,其他三個(gè)經(jīng)常涉及到,,很多數(shù)據(jù)窗口函數(shù)都需要指定對(duì)這三個(gè)緩沖區(qū)中的哪個(gè)進(jìn)行操作,大多數(shù)情況下都使用缺省的緩沖區(qū)Primary!,。這三個(gè)緩沖區(qū),,除了保存相應(yīng)的數(shù)據(jù)外,都自動(dòng)維護(hù)這些數(shù)據(jù)的修改標(biāo)志,,它們之間的協(xié)作也是自動(dòng)維護(hù)的,。例如,當(dāng)使用過(guò)濾函數(shù)時(shí),,沒(méi)有通過(guò)過(guò)濾規(guī)則的數(shù)據(jù)自動(dòng)從Primary緩存區(qū)移送到Filter緩存區(qū),;執(zhí)行刪除操作時(shí),數(shù)據(jù)自動(dòng)從Primary緩存區(qū)移送到Delete緩存區(qū),。所有這些數(shù)據(jù)的移送無(wú)需腳本的干預(yù),,只管使用相應(yīng)的函數(shù)即可。

■DWBuffer
Primary! 0
Delete! 1
Filter! 2

■DWItemStatus
NotModified! 0
DataModified! 1
New! 2
NewModified! 3

■編輯控件
和數(shù)據(jù)窗口控件打交道都是通過(guò)編輯控件進(jìn)行的,。在數(shù)據(jù)窗口中錄入數(shù)據(jù),、修改數(shù)據(jù),實(shí)際上是在修改單元上的編輯控件中的內(nèi)容,。當(dāng)編輯控件移動(dòng)到另外單元上之前,要對(duì)編輯控件中的數(shù)據(jù)進(jìn)行校驗(yàn),,如果能通過(guò)字段的校驗(yàn)規(guī)則,,就保存到字段中。編輯控件是可以移動(dòng)的,,需要編輯哪個(gè)單元,,編輯控件就移動(dòng)到哪個(gè)單元上,接受輸入或者修改,。
編輯控件在沒(méi)有離開(kāi)當(dāng)前字段時(shí),,用戶錄入或者修改的數(shù)據(jù)就不會(huì)被保存到字段中,如何確保在數(shù)據(jù)窗口失去焦點(diǎn)時(shí),,最后位置上編輯框中的內(nèi)容不被遺漏呢,?前面介紹了在數(shù)據(jù)窗口的LoseFocus事件中編寫(xiě)如下腳本:
this.AcceptText()
這個(gè)方法在很多情況下能解決該問(wèn)題。美中不足的是,,如果編輯框中的內(nèi)容不能通過(guò)字段的校驗(yàn)規(guī)則,,有時(shí)會(huì)顯示兩次錯(cuò)誤信息窗口。造成兩個(gè)錯(cuò)誤信息窗口,,往往是在選擇其他單元時(shí)發(fā)生,,在數(shù)據(jù)窗口失去焦點(diǎn)之前(如單擊“保存”按鈕等)只會(huì)顯示一個(gè)錯(cuò)誤信息窗口,。用戶選擇其他單元時(shí),編輯框中的數(shù)據(jù)開(kāi)始進(jìn)行校驗(yàn),,不能通過(guò)校驗(yàn)規(guī)則,,顯示校驗(yàn)錯(cuò)誤信息,在顯示校驗(yàn)錯(cuò)誤信息時(shí)數(shù)據(jù)窗口失去焦點(diǎn),,觸發(fā)數(shù)據(jù)窗口的LoseFocus事件執(zhí)行AcceptText函數(shù),,又一次顯示校驗(yàn)錯(cuò)誤窗口。
所以,,顯示兩次校驗(yàn)錯(cuò)誤窗口的原因是LoseFocus事件中的AcceptText函數(shù)造成的,。可以想法讓該函數(shù)在這種情況下不執(zhí)行,。為此定義一個(gè)實(shí)例變量:
Boolean ib_accept = True
該變量用來(lái)表示是否正確通過(guò)了校驗(yàn),,然后將LoseFocus中的腳本改成下面的腳本:
If ib_accept Then
This.AcceptText()
Else
ib_accept = true
End If
在數(shù)據(jù)窗口的ItemError事件中編寫(xiě)腳本:
ib_accept = False
這樣就可以解決顯示兩個(gè)校驗(yàn)錯(cuò)誤信息窗口了,并且不會(huì)遺漏最后一個(gè)編輯框中的內(nèi)容,。

*當(dāng)在某個(gè)單元中修改或者錄入數(shù)據(jù)后,,編輯框要離開(kāi)時(shí),要進(jìn)行4個(gè)校驗(yàn)步驟,,前面兩個(gè)步驟由PowerBuilder完成,,后面兩個(gè)由開(kāi)發(fā)者編寫(xiě)。
(1)看數(shù)據(jù)和編輯前相比是否發(fā)生了改變,,沒(méi)有改變則不做任何處理,。
(2)檢查測(cè)試此值是否違反了任何一個(gè)在字段上定義的有效性校驗(yàn)規(guī)則,違反則拒絕接受此值,,并觸發(fā)ItemError事件,。
(3)檢查此值是否與編輯前真的不同,沒(méi)有改變則終止有效性校驗(yàn),。
(4)檢查開(kāi)發(fā)人員在ItemChanged事件中編寫(xiě)的腳本,。具體的發(fā)生情況取決于分配給被稱為動(dòng)作代碼的值。

■讀取和設(shè)置數(shù)據(jù)
讀?。?br>1,、使用函數(shù)
dw_1.getitemX()
2、直接使用數(shù)據(jù)窗口對(duì)象屬性來(lái)讀取數(shù)據(jù)
dw_1.object.data.primary.current[row,column]
該語(yǔ)句的格式是:
dwcontrol.object.data[buffer[.whichvalue]][row,column]
dwcontrol是數(shù)據(jù)窗口控件名稱,。
whichvalue既可以是current(缺省值),,也可以是original。這樣就允許用戶訪問(wèn)一個(gè)列的初始值或當(dāng)前值,。
row和column是要訪問(wèn)的單元所在的行號(hào)及列號(hào),。
object、data是保留字,,buffer是緩存區(qū)的名稱,,有Delete,、Primary、Filter,。
這種引用方法速度比較快,,尤其讀取大量數(shù)據(jù)時(shí)。
設(shè)置:
使用函數(shù)
SetItem()
SetText()

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買(mǎi)等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多