It計(jì)算機(jī)課件 PB函數(shù)_第1頁(yè)
It計(jì)算機(jī)課件 PB函數(shù)_第2頁(yè)
It計(jì)算機(jī)課件 PB函數(shù)_第3頁(yè)
It計(jì)算機(jī)課件 PB函數(shù)_第4頁(yè)
It計(jì)算機(jī)課件 PB函數(shù)_第5頁(yè)
已閱讀5頁(yè),還剩73頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論