![It計(jì)算機(jī)課件 PB函數(shù)_第1頁(yè)](http://file4.renrendoc.com/view3/M00/27/0B/wKhkFmY-yCeACRmDAAGA8_DZ5pg226.jpg)
![It計(jì)算機(jī)課件 PB函數(shù)_第2頁(yè)](http://file4.renrendoc.com/view3/M00/27/0B/wKhkFmY-yCeACRmDAAGA8_DZ5pg2262.jpg)
![It計(jì)算機(jī)課件 PB函數(shù)_第3頁(yè)](http://file4.renrendoc.com/view3/M00/27/0B/wKhkFmY-yCeACRmDAAGA8_DZ5pg2263.jpg)
![It計(jì)算機(jī)課件 PB函數(shù)_第4頁(yè)](http://file4.renrendoc.com/view3/M00/27/0B/wKhkFmY-yCeACRmDAAGA8_DZ5pg2264.jpg)
![It計(jì)算機(jī)課件 PB函數(shù)_第5頁(yè)](http://file4.renrendoc.com/view3/M00/27/0B/wKhkFmY-yCeACRmDAAGA8_DZ5pg2265.jpg)
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
PB函數(shù)
1.MessageBox
函數(shù)作用:顯示一個(gè)信息提示窗口。該窗口中的標(biāo)題、圖標(biāo)、內(nèi)容和按鈕都可以通過(guò)參數(shù)指
定。提示窗口的樣式如圖1所示。清楚了提示窗口的構(gòu)成,非常有利于記憶該函數(shù)的語(yǔ)法。
函數(shù)語(yǔ)法:MessageBox(title,text{,icon{,button{,default}}})
..Title:窗口標(biāo)題,String類(lèi)型的數(shù)據(jù)。如果該參數(shù)取值為Nul1,則不顯示提示窗口。
..Text:窗I」中要顯示的內(nèi)容,String類(lèi)型的數(shù)據(jù)。如果該參數(shù)取值為Null,則不顯示提示窗II。這兩
個(gè)函數(shù)是必需的,使用更多的參數(shù)可以提供更多的控制。
..Icon:窗I」中顯示的圖標(biāo)的樣式,為枚舉類(lèi)型的數(shù)據(jù)???用的類(lèi)型和對(duì)應(yīng)的圖標(biāo)樣式如表
序號(hào)枚舉取值圖標(biāo)樣式
1Information!
2StopSign!
3Exclamation!
4Question!
5None!
..Button:顯示哪些命令按鈕,枚舉類(lèi)型。nJ?用的取值有:
0K!
OKCancel!
YesNo!
YesNoCancel!
RetryCancel!
AbortRetryIgnore!
..Default:希望成為缺省命令按鈕的編號(hào)。最左側(cè)按鈕的編號(hào)為1,往右依次加1。
返|N|值:如果執(zhí)行成功,則返回用戶(hù)選擇的命令按鈕的編號(hào)(1,2或者3);執(zhí)行失敗則返叫T;如果仃
參數(shù)為Null,則函數(shù)返回Null。
代碼實(shí)例:
例子1,最簡(jiǎn)單的用法:
MessageBox('提示','數(shù)據(jù)保存成功。')
例子2,3個(gè)參數(shù)的:
MessageBox('提示'按回車(chē)鍵將關(guān)閉系統(tǒng)...StopSign!)
例子3,多個(gè)命令按鈕的:
integerli_flag
li-flag=MessageBox('提示','數(shù)據(jù)尚未保存,是否繼續(xù)關(guān)閉窗口?',&
Question!,YesNo!,2)
Choosecaseli_flag
Case1〃選擇'是、繼續(xù)關(guān)閉窗口
Return0
Case2〃選擇'否L不再關(guān)閉窗口
Return1
Endchoose
2.SetFocus
函數(shù)作用:指定的控件或擰對(duì)象獲得焦點(diǎn)。獲得焦點(diǎn)的對(duì)象或者標(biāo)題欄為藍(lán)色,或者控件有
明顯的邊框。Drawing類(lèi)型的對(duì)象不能獲得焦點(diǎn),所以不能在line、Oval>RectangleRoundRectangle
等控件上使用該函數(shù)。
函數(shù)語(yǔ)法:objectname.SetFocus()其中,ObjectName是要設(shè)置焦點(diǎn)的控件或者對(duì)象的名稱(chēng)。返回值:
如果執(zhí)行成功,則返回L執(zhí)行錯(cuò)誤返回T。如果對(duì)象Objectname為Null,則返回Null。
代碼實(shí)例:
例子1,窗口上:wmain.SetFocus()
例子2,命令按鈕:cb_save.SetFocus0
例子3,數(shù)據(jù)窗口:dw_l.SetFocus()
3.TriggerEvent
函數(shù)作用:觸發(fā)指定對(duì)象的指定事件,并且立即執(zhí)行該事件中的腳木。注意該函數(shù)和PostEvent的區(qū)別。
PostEvent不是立即執(zhí)行,TriggerEvent是立即執(zhí)行觸發(fā)事件的腳本。
函數(shù)語(yǔ)法:objectname.TriggerEvent(event{,word,long})
..objectname:PB中任何對(duì)象或者控件,只要有可以觸發(fā)的事件就可以。
..event:要觸發(fā)的事件??梢允敲杜e類(lèi)型或者String類(lèi)型。PB提供的事件可以使用枚舉或者String類(lèi)
型來(lái)表示,比如Clicked!或者'Clicked'都可以代表Clicked事件;自定義的用戶(hù)事件只能使用String
來(lái)表示。需要注意的是,這里的事件應(yīng)該提供了腳本。
..word:該參數(shù)不是必需的。當(dāng)需要傳遞數(shù)據(jù)給被觸發(fā)的事件時(shí)使用word和long參數(shù)。這兩個(gè)參數(shù)都可
以傳遞long類(lèi)型的數(shù)據(jù),但是參數(shù)long還可以傳遞string類(lèi)型的數(shù)據(jù),而該參數(shù)僅能傳遞long類(lèi)型的。
如果使用了該參數(shù),在被觸發(fā)的事件中使用Message.WordParm接收傳遞過(guò)去的數(shù)據(jù)。如果不使用該參數(shù)傳
遞數(shù)據(jù)而是使用參數(shù)long進(jìn)行傳遞,則將該參數(shù)設(shè)置為Oo
..long:該參數(shù)也不是必須的,用來(lái)傳遞long或者string類(lèi)型的數(shù)據(jù)。使用Message.LongParm接收傳
遞的數(shù)據(jù)。當(dāng)傳遞string類(lèi)型的數(shù)據(jù)時(shí),對(duì)象Message.LongParm中保存的是所傳數(shù)據(jù)的存儲(chǔ)地址,必須
使用string(XX,'address')來(lái)讀取該地址中的string類(lèi)型數(shù)據(jù)。
返回值:Integer類(lèi)型。如果返回1,表示該函數(shù)執(zhí)行成功:如果指定事件中沒(méi)有腳本或者函數(shù)執(zhí)行錯(cuò)誤,
則返回-1。當(dāng)任意參數(shù)為Null時(shí),函數(shù)返叫Null。
代碼實(shí)例:
例子1,觸發(fā)缺省事件:
cb1.TriggerEvent(Clicked!)
等價(jià)于:
cb1.TriggerEvent("Clicked”)
例子2,觸發(fā)用戶(hù)自定義事件:
wmain.TriggerEvent("ueopen")
例子3,傳遞信息和接收信息:
wmain.TriggerEvent("ue_open",0,'test')
在用戶(hù)自定義事件ue_open中接收數(shù)據(jù):
stringls_msg
1s_msg=String(Message.LongParm,address')
例子4,傳遞long數(shù)據(jù):
wmain.TriggerEvent(<ue_open,,100,0)
在用戶(hù)自定義事件ue_open中接收數(shù)據(jù):
longll_msg
11_msg=Message.WordParm
4.Close
函數(shù)作用:關(guān)閉指定的窗口,并且釋放窗口以及窗口上控件所占用的資源。該函數(shù)執(zhí)行時(shí),首先執(zhí)行窗口
的CloseQueu事件腳本,然后關(guān)閉窗口,然后執(zhí)行該函數(shù)所在事件中的其它腳本。一定注意這個(gè)順序。窗
口關(guān)閉后,窗口中的屬性、控件、實(shí)例變量等都不可用。執(zhí)行了該函數(shù)后,如果希望還能夠阻止窗口的關(guān)
閉,可以在窗口的CloseQuery中返回1。
函數(shù)語(yǔ)法:Close(windowname)
..windowname:要關(guān)閉的窗口的名稱(chēng)。
返回值:Integer類(lèi)型。如果返回1,表示該函數(shù)執(zhí)行成功;如果函數(shù)執(zhí)行錯(cuò)誤,則返回
當(dāng)任意參數(shù)為Null時(shí),函數(shù)返回Null。
代碼實(shí)例:
例子1,以下代碼在命令按鈕'關(guān)閉'的Clicked事件中,執(zhí)行會(huì)發(fā)生錯(cuò)誤:
close(parent)
messageboxCJ,this,text)〃控件已經(jīng)不可用,該語(yǔ)句執(zhí)行錯(cuò)誤。
例子2,以下代碼在窗口的CloseQuery事件中,當(dāng)執(zhí)行函數(shù)Close之后觸發(fā)該事件,如果用戶(hù)回答為‘No'
則取消關(guān)閉:
IFMessageBoxC關(guān)閉','真的要關(guān)閉嗎?Question!,YesNo!)=2THEN
〃如果選擇'No',則停止關(guān)閉
RETURN1
ENDIF
5.SQLCA
6.connect;
7.Open
函數(shù)作用:打開(kāi)指定的窗口。如果希望同一個(gè)窗口打開(kāi)多個(gè),則只能使用語(yǔ)法格式二。
函數(shù)語(yǔ)法:格式一:Open(windowvar{,parent})
格式二:Open(windowvar,windowtype(,parent})
..windowvar:要打開(kāi)的窗口名稱(chēng),可以是在Window畫(huà)板中設(shè)計(jì)的窗口的名稱(chēng),也可以是指定類(lèi)型的窗口
變量。
..windowtype:一個(gè)String類(lèi)型的變量,取值是已經(jīng)設(shè)計(jì)好的窗II的名稱(chēng)。使用該參數(shù),直到程序運(yùn)行
的時(shí)候才確定要打開(kāi)的窗口,所以可以提高程序的靈活性。
..parent:當(dāng)windowvar參數(shù)指定的窗I」是ChiId或者Popup類(lèi)型時(shí),應(yīng)該指定一個(gè)窗II作為當(dāng)前windowvar
的父窗口。如果不指定父窗口,則最近打開(kāi)的窗口作為當(dāng)前打開(kāi)窗口的父窗口。
返1"|值:如果執(zhí)行成功,則返回1,執(zhí)行錯(cuò)誤則返回-1,任何參數(shù)為Null,則返回Null。
代碼實(shí)例:
例子1,格式一:
open(wmain)
例子2,格式一:
w_mainlw_ToOpen1
wjnainlw_To0pen2
Open(1w_ToOpen1)〃打開(kāi)窗口w_main
Open(lw_To0pen2)〃再打開(kāi)一個(gè)wjnain窗口
例子3,格式一:
Open(w_msg,w_main)〃打開(kāi)窗口wjnsg,并且將wjnain設(shè)置為它的父窗口
例子4,格式二:
Stringls_ToOpen
Windowlw_WinToOpen
selectwinnameinto:ls_ToOpenwhereywmc=:ls_ywmc;
Open(lwWinToOpcn,IsToOpen)〃根據(jù)業(yè)務(wù)名稱(chēng)打開(kāi)窗口
例子5,格式二:
windowwstockwin[]
stringw_stock_type[4]
wstock_type[l]=stock_wine〃
w_stock_type[2]=,,w_stock_scotch,/
\v_stock_type[3]二"wstockbeer”
w_stock_type[4]=〃w_stock_soda”
FORn=1to4
Open(w_stock_win[n],w_stock_type[n])
NEXT
8.haltclose
9.ProfileString
函數(shù)作用:從指定的配置文件中獲取String類(lèi)型的數(shù)據(jù)。配置文件按照節(jié)、關(guān)鍵字來(lái)組織。學(xué)習(xí)該函數(shù),
首先應(yīng)該熟悉配置文件的格式??梢栽谀愕挠?jì)算機(jī)中隨便查找一個(gè)后綴為ini的文件,打開(kāi)觀(guān)察一下文件
的格式。以下是典型的配置文件格式:
[database]
dbms=sycenterpriseserver
logid=sa
其中,database為*section*(節(jié)),dbms為(鍵),sycenterpriseserver是鍵dbms的取值。
和該函數(shù)語(yǔ)法類(lèi)似的還有PorFilcInt,用來(lái)從配置文件中讀取Integer類(lèi)型的數(shù)據(jù):函數(shù)SetProfileString
用來(lái)設(shè)置配置文件。
函數(shù)語(yǔ)法:ProfileString(filename,section,key,default)
..filename:配置文件的名稱(chēng),可以包含完整的路徑信息。如果沒(méi)有指定路徑信息,則使用操作系統(tǒng)的搜
索路徑查找指定的配置文件。不區(qū)分大小寫(xiě)。
..section:從配置文件的指定節(jié)中讀取信息。不區(qū)分大小寫(xiě)。
..key:要讀取信息的鍵名稱(chēng)。不區(qū)分大小寫(xiě)。
..default:當(dāng)指定的filename、section、key中任意一個(gè)沒(méi)有找到時(shí),或者讀取的數(shù)據(jù)不能轉(zhuǎn)換成string
類(lèi)型時(shí),函數(shù)則返回該參數(shù)指定的數(shù)據(jù)。
返回值:String類(lèi)型的數(shù)據(jù),最長(zhǎng)為4096個(gè)字節(jié)。如果能夠正確讀取指定配置文件中、指定節(jié)的、指
定鍵的取值,則返回該鍵的取值,否則返回參數(shù)default指定的數(shù)據(jù);如果執(zhí)行錯(cuò)誤,則返回'';如果任
意參數(shù)為Null,則返回Null。
代碼實(shí)例:
例子1:
ifProfileString("C:\PROFILE.INI","Department","Name","None")&
="Marketing“thenOpen(wmarketing)
例子2:
sqlca.dbms=ProfileString("setup.ini","database","dbms","None")
10.Disconnect
11.IsRowModified
函數(shù)作用:該函數(shù)是數(shù)據(jù)窗口對(duì)象函數(shù),不能在PowerScript中直接使用。該函數(shù)用來(lái)判斷指定數(shù)據(jù)行的
數(shù)據(jù)是否被修改過(guò),通常只在Detail節(jié)中使用該函數(shù)。經(jīng)常在計(jì)算域中使用該函數(shù),根據(jù)返回值決定計(jì)算
域中顯示的內(nèi)容;也可以為列的某屬性設(shè)置表達(dá)式,使用該函數(shù),比如設(shè)置列的背景顏色時(shí)使用該函數(shù),
可以讓修改過(guò)的數(shù)據(jù)和沒(méi)有修改過(guò)的顯示不同的背景顏色。
函數(shù)語(yǔ)法:IsRowModified((rowno})
..rowno:可選參數(shù),要判斷數(shù)據(jù)是否修改過(guò)的數(shù)據(jù)行的行號(hào)。如果省略該參數(shù),則用來(lái)判斷計(jì)算列所在
的數(shù)據(jù)行。
返回值:Boolean類(lèi)型。如果數(shù)據(jù)修改過(guò),則返回True,否則返回False。
代碼實(shí)例:
例子1:
IsRowModified0
上面代碼等價(jià)于:
IsRowModified(GetRowO)
12.IsRowNew
函數(shù)作用:該函數(shù)是數(shù)據(jù)窗口對(duì)象函數(shù),不能在PowerScript中直接使用。該函數(shù)用來(lái)判斷指定數(shù)據(jù)行的
數(shù)據(jù)是否是新數(shù)據(jù)行,通常只在Detail節(jié)中使用該函數(shù)。經(jīng)常在計(jì)算域中使用該函數(shù),根據(jù)返回值決定計(jì)
算域中顯示的內(nèi)容;也可以為列的某屬性設(shè)置表達(dá)式,使用該函數(shù),比如設(shè)置列的背景顏色時(shí)使用該函數(shù),
可以讓新增加的數(shù)據(jù)行和老的數(shù)據(jù)行顯示不同的背景顏色。
函數(shù)語(yǔ)法:1sRowNew({rowno})
..rowno:可選參數(shù),要判斷數(shù)據(jù)是否新增加的數(shù)據(jù)行的行號(hào)。如果省略該參數(shù),則用來(lái)判斷計(jì)算列所在
的數(shù)據(jù)行。
返回值:Boolean類(lèi)型。如果是新增加的數(shù)據(jù)行,則返回True,否則返回False。
代碼實(shí)例:
例子1:
IsRowNedwO
上面代碼等價(jià)于:
IsRowNew(GetRow())
13.數(shù)據(jù)窗口中的if函數(shù)
函數(shù)作用:根據(jù)條件表達(dá)式的取值,返回特定的參數(shù)。
函數(shù)語(yǔ)法:If(boolean,truevalue,falsevalue)
..boolean:返回值為Boolean類(lèi)型的表達(dá)式。
..truevalue:當(dāng)參數(shù)boolean取值為T(mén)rue時(shí),函數(shù)if返回該參數(shù)的取值,可以是任意標(biāo)準(zhǔn)數(shù)據(jù)類(lèi)型。
但是,具體類(lèi)型根據(jù)該表達(dá)式所在位置而定。比如,該表達(dá)式是在字段的protect屬性上,則該參數(shù)取值
為0或者1應(yīng)該是合理的。
..falsevalue:當(dāng)參數(shù)boolean取值為False時(shí),函數(shù)if返回該參數(shù)的取值,可以是任意標(biāo)準(zhǔn)數(shù)據(jù)類(lèi)型。
但是,具體類(lèi)型根據(jù)該表達(dá)式所在位置而定。注意,該參數(shù)的數(shù)據(jù)類(lèi)型和truevalue的數(shù)據(jù)類(lèi)型應(yīng)該是一
致的。
返回值:返回值類(lèi)型為參數(shù)truevalue或者falsevalue類(lèi)型的數(shù)據(jù),返回值或者是truevalue或者是
falsevalue?兩個(gè)參數(shù)的類(lèi)型是相同的。
代碼實(shí)例:
例子1,設(shè)置背景顏色。如果數(shù)據(jù)行修改過(guò),則背景設(shè)置為紅色,否則設(shè)置為灰色:
if(lsRowModified(),rgb(255,0,0),rgb(192,192,192))
例子2,設(shè)置數(shù)據(jù)行的修改狀態(tài)。用下面的表達(dá)式創(chuàng)建一個(gè)計(jì)算列:
if(IsRowNewO,,新',if(isRowModified(),'改','舊'))
14.error
15.ChooseCase
16.insertrow
函數(shù)作用:在指定的數(shù)據(jù)窗口控件或者DataStore中插入一條數(shù)據(jù)。如果列定義了缺省值,則在顯示新插
入的數(shù)據(jù)行之前自動(dòng)設(shè)置這些列的缺省值。該函數(shù)僅僅新插入一行新數(shù)據(jù)行,不會(huì)改變當(dāng)前數(shù)據(jù)行,并且
也不會(huì)改變數(shù)據(jù)窗口中數(shù)據(jù)行的顯示情況。如果要改變當(dāng)前數(shù)據(jù)行,或者跳轉(zhuǎn)到新的數(shù)據(jù)行,則需要調(diào)用
函數(shù)SetRow
或者ScrollToRowo
函數(shù)語(yǔ)法:longdwcontrol.InsertRow(longrow)
..dwcontrol:要插入數(shù)據(jù)的數(shù)據(jù)窗口控件、DataStore或者子數(shù)據(jù)窗口。
..row:在該數(shù)據(jù)行之前插入新的數(shù)據(jù)行。如果希望在最后插入數(shù)據(jù),則將該參數(shù)設(shè)置為0即可。
返1"|值:long類(lèi)型,新插入的數(shù)據(jù)行的行號(hào)。如果執(zhí)行錯(cuò)誤,則返回-1;如果任意一個(gè)參數(shù)為Null,則
返回Null,
代碼實(shí)例:
例子1,在當(dāng)前數(shù)據(jù)行之前插入一行數(shù)據(jù):
dw1.InsertRow(dwl.GetRowO)
例子2,在最后插入數(shù)據(jù)行,并且跳轉(zhuǎn)到新插入的數(shù)據(jù)行:
long1l_newrow
llnewrow=dwemployee.InsertRow(0)
dwemployee.ScrollToRow(llnewrow)
17.setitem
函數(shù)作用:給指定的數(shù)據(jù)窗口或者Datastore中的、指定單元設(shè)置數(shù)據(jù),通過(guò)行和列來(lái)確定哪個(gè)單元。該
函數(shù)直接修改緩沖區(qū)中的數(shù)據(jù),而不是針對(duì)顯示界面進(jìn)行修改,修改成功之后,數(shù)據(jù)窗口控件上會(huì)自動(dòng)反
映出最新的內(nèi)容來(lái)。而函數(shù)SetText則針對(duì)顯示界面進(jìn)行修改,如果能夠通過(guò)字段的校驗(yàn)規(guī)則,才能夠進(jìn)
入到數(shù)據(jù)窗口對(duì)應(yīng)的緩沖區(qū)中。注意這兩個(gè)函數(shù)的區(qū)別。
函數(shù)語(yǔ)法:integerdwcontrol.SetItem(longrow,integercolumn,anyvalue)
integerdwcontrol.Set!tern(longrow,stringcolumn,anyvalue)
..dwcontrol:要設(shè)置數(shù)據(jù)的數(shù)據(jù)窗口控件、DataStore或者子數(shù)據(jù)窗口的名稱(chēng)。
..row:要設(shè)置數(shù)據(jù)的行,為long類(lèi)型。
..column:要設(shè)置數(shù)據(jù)的列,可以是string類(lèi)型的列名稱(chēng),也可以是integer類(lèi)型的列號(hào)。
..value:要設(shè)置的數(shù)據(jù)。類(lèi)型根據(jù)數(shù)據(jù)列而定,兩擰的數(shù)據(jù)類(lèi)型應(yīng)該保持一致。
返回值:integer類(lèi)型,1表示函數(shù)執(zhí)行成功,T表示函數(shù)執(zhí)行失敗。如果有任意一個(gè)參數(shù)為Nul1,則
函數(shù)返回Null。
代碼實(shí)例:
例子1,下面腳本在第一行的hire_date列中設(shè)置數(shù)據(jù):
dworder.SetItem(1,〃hire_datc〃,1993-06-07)
例子2,當(dāng)用戶(hù)在數(shù)值類(lèi)型的字段中輸入內(nèi)容,然后又刪除后要離開(kāi)該單元時(shí),數(shù)據(jù)窗口嘗試著將‘‘賦
值給該單元,這時(shí)會(huì)導(dǎo)致內(nèi)容不能通過(guò)校驗(yàn)規(guī)則而產(chǎn)生錯(cuò)誤。解決的辦法就是在數(shù)據(jù)窗口控件的ItemE仃or
事件中編寫(xiě)下面的腳本:
integerli__Null
Stringls_type
ls_type=This.Describe(dwo.name+,.ColType*)
ls_type=Left(Lower(Trim(ls_type)),3)
choosecasels_type
casedec,int,Ion,num,rea,ulo
This.SetItem(Row,integer(dwo.ID),li_Null)
endchoose
return2
18.Print
函數(shù)作用:將數(shù)據(jù)窗口或者DataStore中的數(shù)據(jù)作為一個(gè)打印任務(wù)發(fā)送到打印機(jī)。使用這里的語(yǔ)法格式進(jìn)
行數(shù)據(jù)窗口打印,將自動(dòng)創(chuàng)建打印任務(wù)。在該函數(shù)執(zhí)行后、將要將數(shù)據(jù)發(fā)送到打印機(jī)時(shí)觸發(fā)Printstart事
件,每打印完一頁(yè)后都會(huì)觸發(fā)PrintPage事件,打印完畢后觸發(fā)PrintEnd事件。在這些事件中如何控制打
印,可以參閱這些事件的相關(guān)幫助。
函數(shù)語(yǔ)法:integerdwcontrol.Print({booleancanceldialog})
..dwcontrol:要打印的數(shù)據(jù)窗II、DataStore或者子數(shù)據(jù)窗口。
..canceldialog:boolean類(lèi)型,表示是否顯示一個(gè)非模式的對(duì)話(huà)框,在該對(duì)話(huà)框
中用戶(hù)可以取消正在打印的任務(wù)。取值為T(mén)rue表示顯示該對(duì)話(huà)框,取值為False表示不顯示該對(duì)話(huà)框。當(dāng)
打印DataStore中的數(shù)據(jù)時(shí),該參數(shù)必須為False,或者可以省略該參數(shù)。
返回值:如果函數(shù)執(zhí)行成功,則返回1,否則返回T。任意參數(shù)為Null則返回Null。
代碼實(shí)例:
例子1,打印數(shù)據(jù)窗口dwj中的內(nèi)容:
dw_l.Print()
19.CloseWithReturn
函數(shù)作用:關(guān)閉窗口,并且將要返網(wǎng)的數(shù)據(jù)存儲(chǔ)在Message對(duì)象中。只有Response類(lèi)型的窗口才能使用該
函數(shù)關(guān)閉。使用該函數(shù)的目的,是將Response窗口中的處理情況返回給打開(kāi)該窗口的對(duì)象,根據(jù)返回信息
決定下一步的處理。執(zhí)行該函數(shù)后,首先執(zhí)行窗口的CloseQuery事件腳本,然后關(guān)閉窗口,然后執(zhí)行該函
數(shù)所在事件中的其它腳本。?定注意這個(gè)順序。窗口關(guān)閉后,窗口中的屬性、控件、實(shí)例變量等都不可用。
執(zhí)行了該函數(shù)后,如果希望還能夠阻止窗口的關(guān)閉,可以在窗口的CloseQuery中返回1。
函數(shù)語(yǔ)法:CloseWithReturn(windowname,returnvalue)
..windowname:要關(guān)閉的窗口的名稱(chēng)。
..returnvalue:當(dāng)窗口關(guān)閉時(shí),將該數(shù)據(jù)保存在Message對(duì)象中。返回的數(shù)據(jù)類(lèi)型可以是String、Numberic
或者PowerObject,分別用Message對(duì)象的StringParmsDoubleParm和PowerObjectParm來(lái)接收對(duì)應(yīng)類(lèi)型
的數(shù)據(jù)。需要注意的是,控件和用戶(hù)對(duì)象是通過(guò)引用方式進(jìn)行傳遞的,窗口關(guān)閉后這些對(duì)象也就不存在了,
所以接收到這些對(duì)象也沒(méi)有意義。只能返回這類(lèi)對(duì)象的相應(yīng)屬性。如果需要返回多個(gè)值,可以使用結(jié)構(gòu)類(lèi)
型的變量。
返回值:integer類(lèi)型,如果執(zhí)行成功則返回1,否則返回任意參數(shù)為Null則返回Null。
代碼實(shí)例:
例子1,以下腳本在命令按鈕‘關(guān)閉’的Clicked事件中:
CloseWithReturn(Parent,s1e_Emp1oyeeName.text)
例子2,在窗IIw_main的自定義事件ue_openpost中,打開(kāi)response類(lèi)型的登錄窗II,并根據(jù)用戶(hù)的登
錄情況決定是否關(guān)閉:
Stringls_msg
Open(wlogin)
ls_msg=Message.StringParm
ifls_msg<><success,thenhalltclose
20.數(shù)據(jù)窗口中的Lower函數(shù)
函數(shù)作用:將給定字符串中的所有字符都轉(zhuǎn)換成小寫(xiě)。該函數(shù)的執(zhí)行不會(huì)影響到作為參數(shù)的變量中的內(nèi)容。
函數(shù)語(yǔ)法:Lower(string)
..string:要轉(zhuǎn)換成小寫(xiě)的字符串。
返l>i|值:string類(lèi)型,如果執(zhí)行成功則返|“|和參數(shù)string對(duì)應(yīng)的、大寫(xiě)字符都變成相應(yīng)小寫(xiě)字符的一
個(gè)字符串,如果執(zhí)行失敗則返回一。
代碼實(shí)例:
例子1,以下代碼返回'baberuth':
Lower(,zBabeRuth")
21.SetTransObject
函數(shù)作用:為數(shù)據(jù)窗口或者DataStore指定一個(gè)事務(wù)對(duì)象。必須通過(guò)事務(wù)對(duì)象,PowerBuilder才能夠和數(shù)
據(jù)庫(kù)進(jìn)行通信,才能夠進(jìn)行數(shù)據(jù)處理。這里的事務(wù)對(duì)象是基于程序的事務(wù)對(duì)象,可以對(duì)數(shù)據(jù)庫(kù)事務(wù)進(jìn)行更
多的控制。在程序中,通過(guò)SQL語(yǔ)句中的Connect、Rollback、Commit等進(jìn)行事務(wù)的控制。使用該事務(wù)對(duì)
象,可以為PB應(yīng)用程序建立一個(gè)和數(shù)據(jù)庫(kù)的永久性聯(lián)結(jié),在數(shù)據(jù)窗口或者DataStore每次進(jìn)行Retrieve
或者Update前不必再臨時(shí)建立聯(lián)結(jié),而建立聯(lián)結(jié)是比較費(fèi)資源的一種操作,所以使用該函數(shù)可以提供更好
的程序執(zhí)行性能。在調(diào)用該函數(shù)之前,應(yīng)該設(shè)置事務(wù)對(duì)象的各個(gè)參數(shù)。缺省的事務(wù)對(duì)象SQLCA,是一個(gè)
Transaction類(lèi)型的全局變量,可以在PB應(yīng)用程序中直接使用。也可以定義我們自己的事務(wù)對(duì)象。和該函
數(shù)類(lèi)型的還有SetTrans,兩者的區(qū)別是:SetTransObject不能對(duì)事務(wù)進(jìn)行自動(dòng)控制,都是由程序來(lái)控制的;
使用函數(shù)SetTrans時(shí)程序不能控制事務(wù)對(duì)象,這時(shí)的事務(wù)都是自動(dòng)控制的。使用事務(wù)對(duì)象按照如下步驟進(jìn)
行:
1)設(shè)置事務(wù)對(duì)象的參數(shù),根據(jù)DBMS的不同而不同,可以在DBProfile對(duì)話(huà)框的Preview中找到語(yǔ)法。
這些教本通常在Application的Open事件中編寫(xiě);
2)使用SQL語(yǔ)句Connect聯(lián)結(jié)數(shù)據(jù)庫(kù)。通常也是在Application的Open事件中編寫(xiě)該教本。需要注意的
是,一定要檢查是否聯(lián)結(jié)成功??梢酝ㄟ^(guò)SQLCA.SQLCode來(lái)判斷,如果SQLCA.SQLCode等于1則表示聯(lián)結(jié)
成功。如果聯(lián)結(jié)不成功,則不應(yīng)該繼續(xù)允許。
3)調(diào)用SetTransObject函數(shù),為數(shù)據(jù)窗口對(duì)象設(shè)置事務(wù)對(duì)象。通常在窗口的Open事件或者數(shù)據(jù)窗口的
Constructor事件中編寫(xiě)。
4)在調(diào)用函數(shù)Update之后,檢查返回值是否為1,如果是1則使用事務(wù)語(yǔ)句Commit提交數(shù)據(jù),否則調(diào)
用RolIback回退事務(wù)。
函數(shù)語(yǔ)法:integerdwcontrol.SetTransObject(transactiontransaction)
..dwcontrol:要設(shè)置事務(wù)對(duì)象的DataWindow、子數(shù)據(jù)窗口或者DataStore的名稱(chēng)。
..transaction:事務(wù)對(duì)象名稱(chēng),是Transaction類(lèi)型的變量。
返回值:integer類(lèi)型,1表示成功,如果發(fā)生錯(cuò)誤則返回T,如果任意參數(shù)為Null則返回Null。
代碼實(shí)例:
例1:以下腳本在窗口的Open事件中編寫(xiě):
dw_l.SetTransObject(SQLCA)
例子2:以下腳本在數(shù)據(jù)窗口的Constructor事件中編寫(xiě):
This.SetTransObject(SQLCA)
例子3:以下教本在Application對(duì)象的Open事件中編寫(xiě):
//ProfileMpxt
SQLCA.DBMS=ProfileString(,setup,ini','database*,*DBMS')
SQLCA.AutoCoinmit=False
SQLCA.DBParm=ProfileString(,setup.ini','database'DBParm')
connect;
ifsqlca.sqlcode=0then
Open(w_main)
else
MessageBox(*錯(cuò)誤','不能和數(shù)據(jù)庫(kù)建M連接。按任意鍵關(guān)閉系統(tǒng)',StopSign!)
haltclose;
endif
22.Retrieve
函數(shù)作用:為DataWindow或者Datastore檢索數(shù)據(jù)。在使用該函數(shù)之前應(yīng)該執(zhí)行過(guò)函數(shù)SetTransObject
或者SetTrans,為數(shù)據(jù)窗口設(shè)置過(guò)事務(wù)對(duì)象。該函數(shù)執(zhí)行之前,首先將數(shù)據(jù)窗口中已有的數(shù)據(jù)清除掉,然
后將數(shù)據(jù)庫(kù)中的數(shù)據(jù)檢索到數(shù)據(jù)窗II中。所以,如果希望將檢索到的數(shù)據(jù)追加到數(shù)據(jù)窗口中,需要編寫(xiě)程
序。在數(shù)據(jù)窗口對(duì)象的RetrievcStart事件中返回2,即可防止清除掉數(shù)據(jù)窗口中的已有數(shù)據(jù)。
函數(shù)語(yǔ)法:longdwcontrol.Retrieve({anyargument,anyargument...})
..dwcontrol:數(shù)據(jù)窗口、DataStore或者子數(shù)據(jù)窗口。
..argument:可選參數(shù),根據(jù)數(shù)據(jù)窗口對(duì)象中的定義而定。參數(shù)的個(gè)數(shù)和數(shù)據(jù)類(lèi)型應(yīng)該和數(shù)據(jù)窗口對(duì)象中
的定義保持一致。
返回值:數(shù)字類(lèi)型,表示函數(shù)執(zhí)行完之后數(shù)據(jù)窗口中顯示出來(lái)的數(shù)據(jù)行數(shù)。注意,該返回值不表示檢索
到的數(shù)據(jù)行數(shù)。有兩點(diǎn),Retrievestart中是否編寫(xiě)了腳本、數(shù)據(jù)窗口對(duì)象定義中是否指定了過(guò)濾規(guī)則。
如果數(shù)據(jù)窗口對(duì)象中定義了過(guò)濾規(guī)則,檢索完成后自動(dòng)將不符合過(guò)濾規(guī)則的數(shù)據(jù)移動(dòng)到數(shù)據(jù)窗口的Filter
緩沖區(qū)中,函數(shù)的返回值則是檢索到的總數(shù)據(jù)行數(shù)扣除移動(dòng)到Filter緩沖區(qū)的數(shù)據(jù)行數(shù)。需要注
意的是,只有數(shù)據(jù)窗口對(duì)象中定義的過(guò)濾規(guī)則影響Retrieve函數(shù)的返回值,函數(shù)SetFi1ter和Fi1ter并
不影響。
代碼實(shí)例:
例1:下面的程序根據(jù)Retrieve函數(shù)的返回值顯示提示信息。
long11_rows
dwmain.SetTransObject(SQLCA)
1l_rows=dwmain.RetrieveO
IF1l_rows<1THENMessageBox("錯(cuò)誤","沒(méi)有檢索到數(shù)據(jù)。
例2:帶參數(shù)的檢索。
數(shù)據(jù)窗口對(duì)象的SQL語(yǔ)句如下:
SELECTName,emp.sal,sales,rgnFromEmployee,Sales
WHEREemp.sal>:an_Salaryandsales,rgn=:as_Region
其中,anSalary和as_Rcgion為檢索參數(shù),分別為數(shù)值型和字符型。可以使用下面的語(yǔ)法檢索數(shù)據(jù):
dw_l.Retrieve(50000,〃NW〃)
23.SetFilter
函數(shù)作用:為DataWindow或者DataStore指定數(shù)據(jù)過(guò)濾規(guī)則。通常在調(diào)用該函數(shù)前使用函
數(shù)Retrieve將數(shù)據(jù)檢索到客戶(hù)端,該函數(shù)可以決定檢索到客戶(hù)端的這些數(shù)據(jù)哪些可以顯示,哪些不能顯示。
該函數(shù)對(duì)客戶(hù)端的數(shù)據(jù)進(jìn)行操作,和后臺(tái)數(shù)據(jù)庫(kù)沒(méi)有任何關(guān)系。在設(shè)置完過(guò)濾規(guī)則后使用函數(shù)Retrieve檢
索數(shù)據(jù)是不合理的,每次設(shè)置過(guò)濾規(guī)則后都檢索數(shù)據(jù),這樣的執(zhí)行效率很低。需要注意的是,該函數(shù)緊緊
是設(shè)置過(guò)濾規(guī)則,并不進(jìn)行過(guò)濾。函數(shù)Filter是進(jìn)行過(guò)濾的,使用最近設(shè)置好的過(guò)濾規(guī)則對(duì)數(shù)據(jù)進(jìn)行過(guò)濾。
函數(shù)語(yǔ)法:integerdwcontrol.SetFilter(stringformat)
..dwcontrol:要為其設(shè)定過(guò)濾規(guī)則的DataWindow、DataStore或者子數(shù)據(jù)窗II控件的名稱(chēng);
..format:作為過(guò)濾規(guī)則的表達(dá)式,該表達(dá)式的返回值應(yīng)該是Boolean類(lèi)型,或者是True、或者是False。
如果表達(dá)式返同值為Null,則在執(zhí)行函數(shù)Filter時(shí)自動(dòng)彈出對(duì)話(huà)框讓用戶(hù)指定過(guò)濾規(guī)則。在表達(dá)式中可
以使用數(shù)據(jù)窗口對(duì)象函數(shù)、列名、列號(hào)、數(shù)字、字符串等。如果用到了列號(hào),則應(yīng)該以開(kāi)頭、后面
緊跟數(shù)字來(lái)表示。多個(gè)條件可以使用邏輯運(yùn)算符進(jìn)行聯(lián)結(jié),一個(gè)非常良好的習(xí)慣是每個(gè)條件都應(yīng)該使用括
號(hào)。這樣既可以保證表達(dá)式的清晰,又可以避免一些Bug。后面的代碼實(shí)例中會(huì)講到。
返回值:數(shù)字類(lèi)型,1表示執(zhí)行成功,-1表示執(zhí)行失敗。該函數(shù)的返回值沒(méi)有多大意義,很少在程序中
使用該返回值。
代碼實(shí)例:
例1:使用列名進(jìn)行過(guò)濾。
stringls_filter
ls_filter="cust_qty>100andcust_code>30”
dwEmployee.SetFilter(1s_fi1ter)
dwEmployee.Filter()
例2:必須使用括號(hào)的情況。下面的腳本在邏輯上看起來(lái)沒(méi)有什么問(wèn)題:
Stringls_filter
ls_fi1ter=i(name1ike'張%'andarticle_titielike‘%計(jì)算機(jī)%
dw_l.SetFilter()
dw1.Filter()
實(shí)際上,上面的程序是不能正確執(zhí)行的。將過(guò)濾規(guī)則作如下改動(dòng)就可以了:
ls_filter=i((name1ike'張%')and(article_titlelike‘%計(jì)算機(jī)%')”
例3:取消過(guò)濾規(guī)則。下面兩個(gè)語(yǔ)句都能實(shí)現(xiàn):
語(yǔ)句1:dw1.SetFilter(aft)
語(yǔ)句2:dw_l.SetFilter("<l=lw)
例4:下面的語(yǔ)句在運(yùn)行時(shí)可以讓用戶(hù)自己指定過(guò)濾規(guī)則:
Stringls_null
SetNul1(ls_nul1)
dw_l.SetFilter(ls_null)
dw1.Filter()
例5:下面腳本可以判斷數(shù)據(jù)窗口中是否有主鍵重復(fù)的數(shù)據(jù)。假設(shè)數(shù)據(jù)窗口中的主鍵是dept_id:
string1s_fieldname〃主鍵名稱(chēng)
longll_rc〃數(shù)據(jù)窗口中總的數(shù)據(jù)行數(shù)
ls_fieldname=〃dept_id”
dw_l.SetFilterCl=rO〃取消過(guò)濾規(guī)則,顯示全部的數(shù)據(jù)
dw_l.Filter0〃過(guò)濾
ll_rc=dw_l.RowCount()//保存數(shù)據(jù)行數(shù)
dw1.SetSort(1sfieldname+〃A")〃用主鍵進(jìn)行排序
dw_l.Sort()
〃下面語(yǔ)句是核心語(yǔ)句。該過(guò)濾規(guī)則的含義是:只顯示相鄰行不同的數(shù)據(jù)。
dw_l.SetFilter(ls_fieldname+〃?〃+ls_fieldname+z/[-1]orGetRowO=1")
dw」.Filter()
ifdw_l.RowCount()<ll_rcthen
MessageBox("提示",ls_fieldname+〃列中存在重復(fù)的數(shù)據(jù)!StopSign!)
endif
24.Filter
函數(shù)作用:使用已經(jīng)設(shè)置好的過(guò)濾規(guī)則處理數(shù)據(jù)窗II中的數(shù)據(jù),能夠讓過(guò)濾規(guī)則取值為T(mén)rue的數(shù)據(jù)都顯示
出來(lái),為False的數(shù)據(jù)移動(dòng)到Filter緩沖區(qū)中。當(dāng)數(shù)據(jù)窗口對(duì)象的RetrieveAsNeeded屬性選中時(shí),調(diào)
用該函數(shù)會(huì)導(dǎo)致檢索所有的數(shù)據(jù)。該函數(shù)對(duì)Composite類(lèi)型的數(shù)據(jù)窗口不起作用;對(duì)于Group類(lèi)型的數(shù)據(jù)
窗口,在調(diào)用該函數(shù)后應(yīng)該調(diào)用函數(shù)GroupCalc,以便重新生成分組。
函數(shù)語(yǔ)法:integerdwcontrol.Filter()
..dwcontrol:數(shù)據(jù)窗口、DataStore或者子數(shù)據(jù)窗口控件名稱(chēng)。
返1"|值:數(shù)字型,如果函數(shù)執(zhí)行成功則返回1,否則返回該函數(shù)的返回值意義不大,很少在程序中
用到。如果參數(shù)decontrol為Null,則返回如果。
代碼實(shí)例:參見(jiàn)函數(shù)SetFilter。
25.AcceptText
函數(shù)作用:函數(shù)執(zhí)行時(shí),首先對(duì)當(dāng)前編輯框中的內(nèi)容進(jìn)行對(duì)應(yīng)字段的校驗(yàn)規(guī)則,能夠通過(guò)校驗(yàn)規(guī)則,則保
存在對(duì)應(yīng)字段中,否則顯示校驗(yàn)信息提示錯(cuò)誤。需要執(zhí)行該函數(shù)的原因是,當(dāng)在某字段上的編輯框中輸入
內(nèi)容而沒(méi)有移動(dòng)光標(biāo)到別的字段上時(shí),其他控件獲得焦點(diǎn),此時(shí)編輯框中的內(nèi)容不能被保存到字段中,所
以就應(yīng)該在數(shù)據(jù)窗II失去焦點(diǎn)時(shí)執(zhí)行該函數(shù)。該函數(shù)可.能會(huì)觸發(fā)數(shù)據(jù)窗II的ItemChanged或者ItemError
事件。
函數(shù)語(yǔ)法:dwcontrol.AcceptText()
返回值:執(zhí)行成功則返回1,執(zhí)行過(guò)程中發(fā)生錯(cuò)誤則返回T,如果dwcontrol為Null則返回Null。
使用說(shuō)明:和數(shù)據(jù)窗II控件打交道都是通過(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è)單元上,接受輸入或者修改。對(duì)于熟悉MicrosoftExcel的人來(lái)說(shuō),編輯控件可以看成是
Excel網(wǎng)格中的單元格。當(dāng)用戶(hù)在一個(gè)單元格中輸入一個(gè)公式,它不會(huì)被接受和計(jì)算,直到用戶(hù)移到其他
單元格時(shí)才進(jìn)行公式正確性檢查,如果錯(cuò)誤則不能移動(dòng)到其他單元格中。數(shù)據(jù)窗口控件使用了同樣的概念。
編輯控件在沒(méi)有離開(kāi)當(dāng)前字段時(shí),用戶(hù)錄入或者修改的數(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è)借誤信息窗I用戶(hù)選擇其他單元時(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í)例變量:
Booleanib_accept=True
該變量用來(lái)表示是否正確通過(guò)了校驗(yàn),然后將LoseFocus中的腳本改成下面的腳本:
Ifib_acceptThen
This.AcceptText()
Else
ib_accept=true
EndIf
在數(shù)據(jù)窗口的ItemError事件中編寫(xiě)腳本:
ibaccept=False
這樣就可以解決顯示兩個(gè)校驗(yàn)錯(cuò)誤信息窗I】了,并且不會(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ā)生情況取決于分配給被稱(chēng)為動(dòng)作代碼的
值。
如果數(shù)據(jù)窗口用于數(shù)據(jù)錄入,只在LoseFocus事件中使用函數(shù)this.AcceptText0即可,其他事件可以不
編寫(xiě)腳本。數(shù)據(jù)窗口中,如果僅僅修改了一個(gè)數(shù)據(jù)項(xiàng),并且光標(biāo)沒(méi)有離開(kāi)該數(shù)據(jù)項(xiàng),這時(shí)保存數(shù)據(jù)窗LI將
不會(huì)產(chǎn)生更新,使用該函數(shù)可以避免這種情況??梢哉J(rèn)為,在數(shù)據(jù)窗口控件中有一個(gè)移動(dòng)的編輯框,編輯
哪個(gè)字段的數(shù)據(jù),該編輯框就落在哪個(gè)字段上;在編輯框中輸入內(nèi)容并且還沒(méi)有離開(kāi)該字段時(shí),輸入的內(nèi)
容僅僅保存在該編輯框中,并沒(méi)有賦給字段。函數(shù)AcceptText就是將編輯框中的內(nèi)容賦給字段,所以在數(shù)
據(jù)窗I1控件的LoseFocus事件中使用該函數(shù)是必須的。該函數(shù)在數(shù)據(jù)窗口的ItemChanged事件中不起作用,
因?yàn)轫?xiàng)目改變是發(fā)生在接受編輯框中內(nèi)容之后。
代碼實(shí)例:
例1:下面腳本在‘保存'命令按鈕的Clicked事件中編寫(xiě)。
dw_l.AccpetText()
ifdw1.Update0=1then
commit;
else
MessageBox('錯(cuò)誤',’數(shù)據(jù)不能正確保存。')
RolIback;
Endif
例2:以下程序也可以避免兩次顯示錯(cuò)誤提示。
定義窗口實(shí)例變量:
booleandwhas_focus
在數(shù)據(jù)窗口的GetFocus事件中編寫(xiě)如下腳本:
dw_has_focus=TRUE
在數(shù)據(jù)窗口的LoseFocus事件中編寫(xiě)如下腳本:
dwhas_focus=FALSE
dw_l.eventpostue_acceptText()
在數(shù)據(jù)窗口dw1的自定義事件ue_acceptText中編寫(xiě)如卜,腳本:
IFdw_has_focus=FALSETHEN
dw1.accepttext()
ENDIF
26.ModifiedCount
函數(shù)作用:獲取數(shù)據(jù)窗II或者Datastore中被修改過(guò)但還沒(méi)有提交到數(shù)據(jù)庫(kù)中的記錄數(shù),包括主緩存區(qū)中
修改過(guò)的記錄數(shù)、Filter緩存區(qū)中被修改過(guò)的記錄數(shù)。新插入的數(shù)據(jù)行,如果既沒(méi)有修改過(guò)其中的內(nèi)容,
也沒(méi)有調(diào)用過(guò)Setitem函數(shù),則不被考慮。相關(guān)的函數(shù)還有:DeletedCount計(jì)算刪除的數(shù)據(jù)行數(shù),RowCount
計(jì)算數(shù)據(jù)窗口Primary緩沖區(qū)中的數(shù)據(jù)行數(shù)。判斷數(shù)據(jù)是否修改過(guò),通常使用該函數(shù)和DeletedCount()函
數(shù)相加得到的和,如果大于0則表示數(shù)據(jù)修改過(guò)。僅用ModifiedCount或者DeletedCount來(lái)判斷是否修改
過(guò)數(shù)據(jù)都不科學(xué)。
函數(shù)語(yǔ)法:dwcontrol.ModifiedCount()
返回值:返回long類(lèi)型的數(shù)據(jù)窗口控件中被修改過(guò)的記錄數(shù),如果沒(méi)有記錄被修改過(guò)或者修改后都已經(jīng)
保存到了數(shù)據(jù)庫(kù)中則返叫0,執(zhí)行過(guò)程中如果發(fā)生借誤則返回-1,如果dwcontrol為Null則返回Null。
代碼實(shí)例:
下面的腳本計(jì)算數(shù)據(jù)窗II中修改過(guò)了多少行數(shù)據(jù):
long1IRows
ll_Rows=dw_Employee.ModifiedCount()
27.DeletedCount
函數(shù)作用:獲取數(shù)據(jù)窗口控件或者datastore控件dwcontrol中被刪除的記錄數(shù)。
函數(shù)語(yǔ)法:dwcontrol.DeletedCount()
返回值:返回long類(lèi)型的已經(jīng)被刪除但還沒(méi)有提交到數(shù)據(jù)庫(kù)中的記錄數(shù),如果執(zhí)行過(guò)程中發(fā)生了錯(cuò)誤則
返回T,如果dwcontrol為Null則返回Null,如果沒(méi)有刪除過(guò)記錄則返回0。
代碼實(shí)例:
例1:下面代碼判斷數(shù)據(jù)窗II中的數(shù)據(jù)是否修改過(guò)。
Long11Rows
ll_rows=dw_l.ModifiedCount()+dw_l.DeletedCount()
ifll_Rows>0then
ifdw_l.Update()=1then
commit;
MessageBox(*提示','保存了'+String(ll_Rows)+'條數(shù)據(jù)。')
Else
Rollback;
MessageBox('錯(cuò)誤'不能正確保存。')
Endif
endif
28.Update
函數(shù)作用:根據(jù)數(shù)據(jù)窗口或者datastore中的數(shù)據(jù)變動(dòng)情況,修改數(shù)據(jù)庫(kù)中對(duì)應(yīng)表中的數(shù)據(jù)。注意,該函
數(shù)執(zhí)行之前一定正確執(zhí)行過(guò)函數(shù)SetTransObjecto另外,在數(shù)據(jù)窗口對(duì)象設(shè)計(jì)時(shí)還需要正確的設(shè)置修改屬
性,以確保數(shù)據(jù)窗口具有修改數(shù)據(jù)庫(kù)中數(shù)據(jù)的能力。該函數(shù)執(zhí)行完成后,通常根據(jù)該函數(shù)的返回值調(diào)用事
務(wù)語(yǔ)句,或名?使用Commit提交事務(wù),或者使用Rollback回退事務(wù)。
函數(shù)語(yǔ)法:dwcontrol.Update({accept{,resetflag}})
..accept:為T(mén)rue,表示在提交數(shù)據(jù)之前自動(dòng)執(zhí)行AccpetText函數(shù),否則不執(zhí)行該函數(shù),該參數(shù)缺省為
True。
..resetflag:為T(mén)rue,表示數(shù)據(jù)提交后自動(dòng)清除修改標(biāo)識(shí),該參數(shù)缺省為T(mén)rue。
返回值:執(zhí)行成功則返回1,發(fā)生錯(cuò)誤則返回T,如果dwcontrol為Null則返回Null。
使用說(shuō)明:通常在命令按鈕‘保存'中調(diào)用該函數(shù),保存數(shù)據(jù)。如果在數(shù)據(jù)窗IIItemChanged事件中使用
該函數(shù),則需要將參數(shù)accept設(shè)置為false,因?yàn)槭录旧頃?huì)自動(dòng)執(zhí)行和函數(shù)AcceptText類(lèi)似的操作。
事件自動(dòng)執(zhí)行類(lèi)似AcceptText的操作,參數(shù)accept設(shè)置為T(mén)rue也導(dǎo)致執(zhí)行類(lèi)似AcceptText的操作,容
易發(fā)生異常。所以,在該事件中調(diào)用該函數(shù)一定要將參數(shù)accept設(shè)置為False。另外,該事件中及時(shí)能夠
修改成功,當(dāng)前編輯的字段內(nèi)容也不會(huì)保存到數(shù)據(jù)庫(kù)中,因?yàn)樵谠撌录|發(fā)的時(shí)候該字段中的內(nèi)容正在被
校驗(yàn)。所以,需要首先獲取當(dāng)前輸入的內(nèi)容(可以使用ItemChanged事件的參數(shù)data),然后調(diào)用函數(shù)
Setltem,為當(dāng)前字段賦值即可。該函數(shù)的執(zhí)行可能會(huì)觸發(fā)以下事件:
..DBError
..SQLPreview
.?UpdateEnd
..UpdateStart
如果參數(shù)accept設(shè)置為T(mén)rue,還可以觸發(fā)以下事件:
..ItemChanged
?.ItemError
代碼實(shí)例:
例1:常規(guī)‘保存'命令按鈕的編程:
ifdw_l.Update()二1then
commitusingsqlca;
else
rollbackusingsqlca;
endif
29.commit
30.rollback
31.SelectRow
函數(shù)作用:選中或者取消選中數(shù)據(jù)窗口、DataStore中的一行或者所有行數(shù)據(jù)。該函數(shù)的執(zhí)行不會(huì)改變當(dāng)
前數(shù)據(jù)行。也就是說(shuō),如果第2行是當(dāng)前數(shù)據(jù)行,執(zhí)行完該函數(shù),比如dw_LSelectRow(5),第2行仍然
是當(dāng)前數(shù)據(jù)行。
函數(shù)語(yǔ)法:integerdwcontrol.SelectRow(longrow,booleanselect)
..dwcontrol:數(shù)據(jù)窗口、DataStore或者子數(shù)據(jù)窗口。
..row:long類(lèi)型,耍選中或者取消選中的數(shù)據(jù)行行號(hào)。如果該參數(shù)為0,表示對(duì)所有的數(shù)據(jù)行進(jìn)行操作。
..select:Boolean類(lèi)型,取值為T(mén)rue表示要選中指定的數(shù)據(jù)行(不管在執(zhí)行函數(shù)之前是否是選中的);
取值為False表示要取消選中指定的數(shù)據(jù)行(不管執(zhí)行函數(shù)之前是否沒(méi)有選中)。
返回值:函數(shù)執(zhí)行成功返回1,執(zhí)行錯(cuò)誤返回-1,任何參數(shù)為空則返回Null。
代碼實(shí)例:
例1:數(shù)據(jù)窗口中多行選中程序。
首先定義窗口實(shí)例變量:
longil_LastSelectedRow=1
然后開(kāi)始編寫(xiě)多行選中程序。程序算法描述如下:
1)、如果按下了Control鍵如果是在選中行上,取消該行否則,選中該行記錄當(dāng)前到窗口實(shí)例變量中
2)、如果按下了Shift鍵取消所有選中行選中上次點(diǎn)擊行和當(dāng)前行之間的所有數(shù)據(jù)行記錄當(dāng)前到窗口實(shí)例
變量中
3)、如果沒(méi)有按鍵如果點(diǎn)擊行為選中行,不執(zhí)行任何操作否則,取消所仃選中行,選中當(dāng)前行記錄當(dāng)前到
窗口實(shí)例變量中比如,我們?cè)诖翱赿w」的Clicked事件中編寫(xiě)該腳本,程序如下:
longll_Start
longll_End
longll_index
ifRow<1thenreturn
ifKeyDown(KeyControl!)then
ifThis.IsSelected(Row)then
This.SelectRow(Row,False)
else
This.SelectRow(Row,True)
endif
elseifKeyDown(KeyShift!)then
ifRow<ilLastSelectedRowthen
ll_Start二Row
1l_End;il_LastSelectedRow
else
ll_Start二il_LastSelectedRow
ll_End=Row
endif
This.SelectRow(0,False)
Forll_index=ll_Startto1l_End
This.SelectRow(l1index,True)
next
else
ifNotThis.IsSelected(Row)then
This.SelectRow(0,False)
This.SelectRow(Row,True)
endif
endif
i1_LastSelectedRow=Row
32.GetRow
函數(shù)作用:獲取數(shù)據(jù)窗口或者DataStore中的當(dāng)前數(shù)據(jù)行。需要說(shuō)明的是,當(dāng)前數(shù)據(jù)行不見(jiàn)得就是在數(shù)據(jù)
窗口中我們看見(jiàn)的數(shù)據(jù)行。該函數(shù)有時(shí)和SetRow函數(shù)搭配使用。
函數(shù)參數(shù):numberdwcontrol.GetRow()
..dwcontrol:數(shù)據(jù)窗口、DataStore或者子數(shù)據(jù)窗II控件。
返回值:函數(shù)執(zhí)行成功則返回當(dāng)前數(shù)據(jù)行,如果沒(méi)有當(dāng)前數(shù)據(jù)行則返回0,如果執(zhí)行錯(cuò)誤則返回T,如
果參數(shù)dwcontrol為空則返|”|Null<,
代碼實(shí)例:
例1:下面的代碼為當(dāng)前行的ID列設(shè)置值。該程序片段可以為多用戶(hù)系統(tǒng)的主鍵生成。
Longll_CurRow
Stringls_id
ll_CurRow=dw1.GetRow()//獲取當(dāng)前數(shù)據(jù)行
if1l_CurRow<1thenreturn〃如果沒(méi)有當(dāng)前行,則返回。
//gs_userid為全局變量,保存用戶(hù)的1D號(hào)。
ls_id=gs_userid+String(today(),*yyyymmdd,)+string(now(),*hhmmssr)
dwl.SetItem(ll_CurRow,id,,ls_id)
例2:當(dāng)用戶(hù)點(diǎn)擊數(shù)據(jù)窗11縱向滾動(dòng)條翻頁(yè)時(shí),將當(dāng)前頁(yè)中的第一行數(shù)據(jù)設(shè)置為當(dāng)前行,這樣可能更方便
用戶(hù)的操作。下面腳本實(shí)現(xiàn)該功能:
longll_CurRow
longll_FirstRow
ll_CurRow=dw_l.GetRow()
H_FirstRow=Long(dw1.Object.DataWindow.FirstRowOnPage)
ifll_CurRow<>ll_FirstRowthenThis.SetRow(ll_FirstRow)
33.GetltemString
函數(shù)作用:從數(shù)據(jù)窗口或者DataStore控件的指定緩沖區(qū)中獲取指定單元的String類(lèi)型的數(shù)據(jù)。通過(guò)參數(shù)
的設(shè)置,還叫.以獲取指定單元的最初數(shù)據(jù),也就是最初Retrieve或者最近Update成功之后的該單元的取
值。需要注意的是,該函數(shù)獲取的是被數(shù)據(jù)窗口中字段接受的數(shù)據(jù),是觸發(fā)完AcceptText之后列中的數(shù)據(jù),
是通過(guò)了校驗(yàn)規(guī)則的數(shù)據(jù);當(dāng)用戶(hù)輸入完內(nèi)容尚未離開(kāi)該單元時(shí),數(shù)據(jù)尚未被該單元接受,這種情況下使
用該函數(shù)是獲取不到當(dāng)前錄入的內(nèi)容的,這時(shí)需要使用函數(shù)GetText來(lái)獲取。這是GctText和GetltemString
函數(shù)的區(qū)別。類(lèi)似的,GetltemNumber.GetltemDecimal等系列函數(shù)還有很多,它們的用法都是類(lèi)似的。
函數(shù)語(yǔ)法:
語(yǔ)法格式一:stringdwcontrol.GetItemString(longrow,integercolumn{,DWBufferdwbuffer,
booleanoriginalvalue))
語(yǔ)法格式二:stringdwcontrol.GetltemString(longrow,stringcolumn{,DWBufferdwbuffer,
booleanoriginalvalue})
..dwcontrol:要獲取數(shù)據(jù)的數(shù)據(jù)窗口、DataStore或者子數(shù)據(jù)窗口控件:
..row:要獲取哪行的數(shù)據(jù),long類(lèi)型;
..column:要獲取數(shù)據(jù)的列,可以是列號(hào),也可以是列名。當(dāng)采用列號(hào)時(shí),一定要注意只有定義數(shù)據(jù)窗口
的SQL語(yǔ)句中字段的順序才能決定列號(hào),列的顯示位置不能決定列號(hào)。該列的類(lèi)型必須是字符類(lèi)型,否則
不能正確獲取數(shù)據(jù)。
..dwbuffer:該參數(shù)是可選的。用來(lái)指明在哪個(gè)數(shù)據(jù)緩沖區(qū)中獲取數(shù)據(jù)。該參數(shù)為枚舉類(lèi)型,可用的取值
有Filter!、Primary!和Delete!,不能使用Original!。
..originalvalue:該參數(shù)也是可選的,為Boolean類(lèi)型,用來(lái)指明是否使用最初的數(shù)據(jù)。
返回值:函數(shù)執(zhí)行正確時(shí)返回指定單元中的數(shù)據(jù),執(zhí)行錯(cuò)誤返回任何參數(shù)為空時(shí)返回Null。
使用說(shuō)明:該函數(shù)可以用來(lái)獲取常規(guī)的列以及計(jì)算列和計(jì)算域中的數(shù)據(jù)。計(jì)算列是指在定義數(shù)據(jù)窗口的SQL
語(yǔ)句中指定的,可以是表達(dá)式、常量等;計(jì)算域指在數(shù)據(jù)窗II設(shè)計(jì)時(shí)添加的。用來(lái)獲取常規(guī)列和計(jì)算列中
的數(shù)據(jù)時(shí),該函數(shù)獲取的是非格式數(shù)據(jù)。比如,我們定義一個(gè)字符類(lèi)型的列用來(lái)保存電話(huà)號(hào)碼,指定格式
為###一########,雖然這樣的列中顯示的數(shù)據(jù)樣式也是這樣的數(shù)據(jù),但是
使用該函數(shù)獲取到的數(shù)據(jù)仍然是'01081692157'。如果希望獲取帶有格式的數(shù)據(jù),可以使用
GetltemFormattedString函數(shù)來(lái)代替,兩個(gè)函數(shù)的參數(shù)及含義是相同的。而對(duì)于計(jì)算域,函數(shù)
GetltemString獲取到的數(shù)據(jù)恰恰相反,而是格式化以后的數(shù)據(jù)。如果希望獲取計(jì)算域中非格式化的數(shù)據(jù),
可以使用函數(shù)GetltemUnformattedString,該函數(shù)的語(yǔ)法格式也是相同的。和該函數(shù)類(lèi)似的或者相關(guān)的函
數(shù)有:
..GetltemDate
..GetltemDateTime
..GetltemDecimal
..GetItemFormattedString
..GetltemNumber
..GetltemTime
..GetltemUnformattedString
..GetText
..SetItem
..SetText
代碼實(shí)例:
例1:下面腳本獲取數(shù)據(jù)窗口中第3行字段emp_name中的數(shù)據(jù):
String1s_name
Isname=dwemployee.GetltemString(3,〃empname")
例2:如何編寫(xiě)自定義函數(shù)GetltemAny,使用該函數(shù)可以獲取任何類(lèi)型的數(shù)據(jù)。
/*
求函數(shù)名稱(chēng):gf_GetItemMany(datawindowad_dw,longal_row,stringas_column)
*函數(shù)作用:獲取指定數(shù)據(jù)窗口中指定字段的取值.
*編寫(xiě)日期:2001-4-15
Stringls_type
anyla_rtn
ls_type:Trim(ad_dw.Describe(as_column+,/.ColType^))
choosecaseLower(Left(ls_Type,3))
case"cha"
la_rtn=addw.GetItemString(al_row,as_column)
case〃dat”
ifls_type="date"then
la_rtn二ad_dw.GetltemDate(al_row,as_column)
else//datetime
la_rtn;ad_dw.GetltemDateTime(al_row,as_column)
endif
caseint,ion,num,rea
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- LY/T 3417-2024油茶果脫殼機(jī)性能要求和試驗(yàn)方法
- 人教版地理八年級(jí)下冊(cè)6.2《白山黑水-東北三省》聽(tīng)課評(píng)課記錄1
- 蘇科版九年級(jí)數(shù)學(xué)聽(tīng)評(píng)課記錄:第50講 二次函數(shù)y
- 七年級(jí)下聽(tīng)評(píng)課記錄數(shù)學(xué)
- 新版湘教版秋八年級(jí)數(shù)學(xué)上冊(cè)第四章一元一次不等式組課題一元一次不等式的應(yīng)用聽(tīng)評(píng)課記錄
- 申請(qǐng)?jiān)诩易詫W(xué)的協(xié)議書(shū)(2篇)
- 電價(jià)變更合同范本(2篇)
- 蘇科版數(shù)學(xué)七年級(jí)下冊(cè)聽(tīng)評(píng)課記錄8.1同底數(shù)冪的乘法
- 湘教版數(shù)學(xué)九年級(jí)下冊(cè)2.5《直線(xiàn)與圓的位置關(guān)系》聽(tīng)評(píng)課記錄3
- 一年級(jí)上冊(cè)數(shù)學(xué)聽(tīng)評(píng)課記錄《3.8 小雞吃食 》 北師大版
- 小學(xué)數(shù)學(xué)三年級(jí)下冊(cè)第八單元《數(shù)學(xué)廣角-搭配(二)》大單元集體備課整體設(shè)計(jì)
- (高清版)TDT 1031.6-2011 土地復(fù)墾方案編制規(guī)程 第6部分:建設(shè)項(xiàng)目
- 2024年江蘇省高中學(xué)業(yè)水平測(cè)試生物試卷
- 露天采場(chǎng)危險(xiǎn)有害因素辨識(shí)
- 蘇教版一年級(jí)上、下冊(cè)勞動(dòng)與技術(shù)教案
- 七上-動(dòng)點(diǎn)、動(dòng)角問(wèn)題12道好題-解析
- 山東曲阜的孔廟之旅
- 一到六年級(jí)語(yǔ)文詞語(yǔ)表人教版
- 中煤集團(tuán)綜合管理信息系統(tǒng)運(yùn)維服務(wù)解決方案-V3.0
- 直播營(yíng)銷(xiāo)與運(yùn)營(yíng)(第2版)全套教學(xué)課件
- 高二英語(yǔ)閱讀理解30篇
評(píng)論
0/150
提交評(píng)論