版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、PowerBuilder 程序設(shè)計(jì)基礎(chǔ),李 茜 主編 謝維成 陳永強(qiáng) 曾傳華,第六章 PowerScript編程,PowerBuilder使用的編程語言叫做PowerScript,它不是簡單的第四代語言,而是一種高級的、結(jié)構(gòu)化的編程語言,我們使用PowerScript編寫函數(shù)和事件處理程序。如果你以前使用過其它高級語言的話,就會發(fā)現(xiàn)PowerScript十分簡單易學(xué),它的許多語言成分與大多數(shù)編程語言很相似,比如,PowerScript和C均使用(/)和(/* */)來注釋程序行。,變量類型和作用域1,變量是指在程序運(yùn)行過程中可以改變的量,變量在程序運(yùn)行的過程中被賦值,在執(zhí)行各種操作的時候,變量
2、的值被不斷傳遞,以實(shí)現(xiàn)程序員設(shè)定的各種操作。可以說,沒有變量就沒有程序可言,而靈活使用各種不同的變量將使程序設(shè)計(jì)更為簡潔、高效、安全,條理性也會更強(qiáng)。在變量聲明時只需注意四點(diǎn),一是必須以字母開頭;二是標(biāo)識符不能使用保留字;三是標(biāo)識符長度必須小于40;各字符之間不允許有空格。另外還要注意連字符,因?yàn)檫B字符容易和減號混淆。 在Power-Builder中,所有變量都必須事先聲明才能使用,而且類型固定,一旦聲明之后就不能變化。變量的作用域是指某一變量的使用范圍。早期的BASIC語言中,所有的變量都是全局變量,這樣做有很大的危害,主要是因?yàn)檫^多的全局變量會引起程序的崩潰,同時也會限制為函數(shù)取名的個數(shù)。
3、在PowerBuilder中,程序的變量分為四個層次,局部變量、實(shí)例變量、共享變量和全局變量,用戶可以充分利用局部變量和實(shí)例變量以使程序變的簡潔和高效,變量類型和作用域2,數(shù)組及使用1,數(shù)組是任何一種程序化語言都必須有的一種數(shù)據(jù)結(jié)構(gòu),與集合和枚舉類型的數(shù)據(jù)結(jié)構(gòu)不同,它是一系列有序數(shù)據(jù)的集合。數(shù)組中的每一個元素都屬于相同的數(shù)據(jù)類型,并且每一個元素都有相同數(shù)組名和不同的數(shù)組下標(biāo)。數(shù)組的類型有兩種:一種是一維數(shù)組,另一種是多維數(shù)組。多維數(shù)組必須有一個固定的大小,而一維數(shù)組的下標(biāo)可以是固定的,也可以是可變的。用戶在聲明一個數(shù)組時首先必須聲明的是一個數(shù)組的類型,然后是數(shù)組名,數(shù)組下標(biāo)。 一維數(shù)組定義:
4、string ls_my_array_1 /不定長數(shù)組 string ls_my_array_2 10 / 從 ls_my_array1 到 ls_my_array10 共10個單元 string ls_my_array_3 5 to 24 / 從 ls_my_array5 到 ls_my_array 24 共10個單元 多維數(shù)組: string ls_my_2d_array1100,200 /定義一個 100 * 200 的數(shù)組,共20000個單元 string ls_my_2d_array21-100 , -2 to 97 / 定義一個 100 * 100 的數(shù)組。 數(shù)組及數(shù)組間的操作:
5、上界及下界: UpperBound(ls_my_array_1) ,LowerBound(ls_my_array_3) 數(shù)組是否一致 =, 數(shù)組變量類型可以是任意類型,包括窗口,菜單,自定義對象,控件等等。,數(shù)組及使用2,一維數(shù)組: string ls_array_1 /不定長數(shù)組 string ls_array_2 10 / 從 ls_array1 到 ls_array10 共10個單元 string ls_array_3 5 to 24 / 從 ls_array5 到 ls_array 24 共10個單元 多維數(shù)組: string ls_array1100,200 /定義一個 100 *
6、200 的數(shù)組,共20000個單元 string ls_array21-100 , -2 to 97 / 定義一個 100 * 100 的數(shù)組。 數(shù)組及數(shù)組間的操作: 上界及下界: UpperBound(ls_my_array_1) ,LowerBound(ls_my_array_3) 數(shù)組是否一致 =, 數(shù)組變量類型可以是任意類型,包括窗口,菜單,自定義對象,控件等等,結(jié)構(gòu)使用1,一個結(jié)構(gòu)是一個或幾個相關(guān)變量的集合,它們有著相同或不同的數(shù)據(jù)類型,但都在同一個名字下。在有些語言中,例如Pascal和COBOL語言,集合又被叫做記錄。集合允許將一些相關(guān)的數(shù)據(jù)項(xiàng)整合為一個整體而不是彼此獨(dú)立。比如說
7、,如果將用戶的ID,地址,等級,照片組合為一個叫做user_struct的結(jié)構(gòu),就可以將這個變量的集合作為一個統(tǒng)一的user_struct結(jié)構(gòu)來使用。 結(jié)構(gòu)按存取范圍分為2類: 全局結(jié)構(gòu) 對象結(jié)構(gòu),結(jié)構(gòu)使用2,全局結(jié)構(gòu): 作為一個獨(dú)立對象存放在 PBL 中,可以直接申明并引用。如通過winzard創(chuàng)建一個Structure對象,然后在腳本中就可以使用了。譬如已經(jīng)做好了一個結(jié)構(gòu)叫做 st_user_structure,則程序中應(yīng)當(dāng)如下使用: 一、申明一個變量(上述四種變量中的一種) 二、指定這個變量的類型為 st_user_structure 三、引用這個變量。 譬如某事件中: st_user_
8、structure lst_user_structure ls_user_structure.user_id = asdfasdf ls_user_structure.user_no = 20 ,結(jié)構(gòu)使用3,對象結(jié)構(gòu): 依賴某對象而存在,只能在這個對象內(nèi)存取,如某窗口內(nèi)定義一個結(jié)構(gòu)。在菜單View /structure List中可以看到所有在這個對象中的結(jié)構(gòu),雙擊該結(jié)構(gòu)可以進(jìn)行詳細(xì)定義。 使用方式和全局結(jié)構(gòu)一致 對象內(nèi)部的結(jié)構(gòu)如果申明為Instance變量,則必需加入Private前綴。,常用程序結(jié)構(gòu)1,IF 1if then else . end if 2 if then elseif t
9、hen elseif then else end if 3 if then ,常用程序結(jié)構(gòu)2,CHOOSE CASE CHOOSE CASE testexpression CASE expressionlist statementblock CASE expressionlist statementblock . . . CASE expressionlist statementblock CASE ELSE statementblock END CHOOSE,常用程序結(jié)構(gòu)3,GOTO GOTO label . :label,常用程序結(jié)構(gòu)4,Do 循環(huán) DO UNTIL condition s
10、tatementblock LOOP DO WHILE condition statementblock LOOP DO statementblock LOOP UNTIL condition DO statementblock LOOP WHILE condition,方式1,方式2,方式3,方式4,常用程序結(jié)構(gòu)5,For 循環(huán) For 起點(diǎn) to 終點(diǎn) Step 步長 . Next / 或 End For 例如: For li_row = 1 to dw_1.rowcount() End for For li_row = dw_1.rowcount() to 1 step 1 dw_1.d
11、eleterow(li_Row) End for,代名詞,This 指代當(dāng)前Script所在的窗口、 用戶對象、菜單、應(yīng)用程序或控件 Parent 指代包含當(dāng)前對象的對象 Super 指代當(dāng)前類的直系父輩。,常用函數(shù)和語句IS函數(shù)系,IS 族函數(shù)和轉(zhuǎn)換函數(shù) 以Is開頭的函數(shù)有很多,例如IsNumber、IsDate、IsTime等等,它們用來判斷一個字符串是否符合某種數(shù)據(jù)類型的格式,它的返回值是一個布爾類型的值,當(dāng)字符串符合類型要求時,返回值為True,否則返回值為False。諸如此類的函數(shù)統(tǒng)稱為類型判斷函數(shù)。之所以要用到這些函數(shù)是因?yàn)楫?dāng)我們用文本框輸入數(shù)據(jù)時,需要用類型轉(zhuǎn)換函數(shù)將輸入的字符串
12、轉(zhuǎn)化為我們所需要的數(shù)據(jù)類型,如果該字符串與所要類型不匹配,轉(zhuǎn)化時就會出現(xiàn)異常錯誤。 比較好的解決方法是先用類型判斷函數(shù)來檢驗(yàn)輸入的字符串,然后再進(jìn)行類型轉(zhuǎn)化。類型轉(zhuǎn)化函數(shù)的作用是將某個字符串轉(zhuǎn)化為另一種類型的數(shù)據(jù)格式。常見的類型轉(zhuǎn)化函數(shù)有Integer(將字符串轉(zhuǎn)化為整形),Long(將字符串轉(zhuǎn)化為長整形),Real(將字符串轉(zhuǎn)化為實(shí)形),Double(將字符串轉(zhuǎn)化為雙精度形),Dec(將字符串轉(zhuǎn)化為十進(jìn)制數(shù))。另外有String函數(shù)將各種不同的數(shù)據(jù)類型轉(zhuǎn)化為字符串,并可以規(guī)定轉(zhuǎn)化的格式。,常用函數(shù)和語句事件觸發(fā),Trigger ,Post 當(dāng)使用Trigger來激活一個函數(shù)或事件時,它被立即
13、執(zhí)行。它的返回值可以在Script中使用。當(dāng)用戶使用Post來激活一個函數(shù)或事件時,它被加入到對象隊(duì)列中并且按順序執(zhí)行。在大多數(shù)情況下,它在當(dāng)前Script完成后被執(zhí)行。但是如果在這段時間中其它系統(tǒng)事件發(fā)生了,那它可能在隊(duì)列中被排到其它Script之后。它的返回值不能被Script使用。因?yàn)镻ost使得返回值對調(diào)用者不可見,所以可以把它想象成將函數(shù)或事件調(diào)入一種狀態(tài)。 一般情況下,如果需要將所在Script執(zhí)行完畢后再調(diào)用其它函數(shù)或事件,則應(yīng)該使用Post而不是Trigger。TriggerEvent和PostEvent是PowerBuilder中的事件函數(shù),被用來觸發(fā)某一個特定事件。盡管它們
14、的功能已經(jīng)被Post和Trigger所取代并得到加強(qiáng)。但為了向后兼容,它們?nèi)匀槐槐A袅讼聛?。但是你不能在調(diào)用事件時傳遞參數(shù)。必須將數(shù)據(jù)通過消息對象傳遞給事件的數(shù)據(jù)。 示例: 帶參數(shù)的執(zhí)行某個事件,并且從消息對象中反饋參數(shù)值。先帶參數(shù)的執(zhí)行該事件: w_xxx.postevent(ue_myevent,0,this is a test) 然后在窗口w_xxx的 ue_myevent 事件中接受參數(shù): string ls_passed_string ls_passed_string = Message.stringparm,常用函數(shù)和語句文件操作,文件操作在程序設(shè)計(jì)中是不可缺少的??梢杂梦募瘮?shù)來
15、打開一個文本或Blob文件并對它進(jìn)行讀寫操作??梢杂昧髂J?Stream!) 或行(Line!) 模式打開一個文件。在行模式中,文件每次被一行行的讀入,每行之間被回車符和換行符隔開,最后以EOF(文件結(jié)束)為結(jié)束標(biāo)志。在流模式中,文件被整個讀入,并且換行符和回車符不被寫入文件。用戶一般用流模式將整個文件讀入到MultilineEditor中,再整個寫到文件中去。 當(dāng)打開文件時,PowerBuilder分給打開的文件一個獨(dú)特的整數(shù)并且將指針放在文件中你所規(guī)定的地方。你可以用這個整數(shù)來標(biāo)識文件以便讀寫或關(guān)閉文件。文件指針規(guī)定了下一次文件讀寫的起始位置并且在每次讀寫完成后由PowerBuilder自
16、動更改。文件函數(shù)如下: FileClose : 關(guān)閉一個打開的文件 FileDelete : 刪除一個文件 FileExists : 判斷文件或目錄是否存在 FileLength : 得到文件長度 FileOpen : 打開一個文件,如果不存在,則創(chuàng)建 FileWrite : 寫入一個文件 FileRead : 從某打開的文件中讀取 FileSeek : 移動文件中讀寫位置 GetFileOpenName : 彈出標(biāo)準(zhǔn)文件打開對話框,得到一個需要打開的文件名; GetFileSaveName : 彈出標(biāo)準(zhǔn)文件保存對話況,得到一個需要保存的文件名;,常用函數(shù)和語句其他,RGB 函數(shù) RGB (紅
17、,綠,蘭) ,RGB(R,G,B) R : 0-255 , 紅色 G : 0-255 , 綠色 B : 0-255 , 藍(lán)色 返回一個顏色值,長整形 B * 65526+G * 256+R 如 rgb(255,0,0 ) = 255,紅色 常用顏色對應(yīng)的RGB值: 紅色: rgb(255,0,0) 綠色: rgb(0,255,0) 藍(lán)色: rgb(0,0,255) 黃色: rgb(255,255,0) 黑色: rgb(0,0,0) 白色: rgb(255,255,255) 中灰: rgb(192,192,192) 淺灰: rgb(128,128,128) 深紅: rgb(128,0,0) 棕色
18、: rgb(128,128,0) 深綠: rgb(0,128,0),Open 函數(shù) Open函數(shù)用來顯示一個窗口,并且使得該窗口的一切屬性和控件都變得對Script可用。Open函數(shù)在打開窗口的同時,也調(diào)用了該窗口的Open事件。 Close 函數(shù) Close函數(shù)關(guān)閉窗口并釋放被窗口和窗口中所有控件占據(jù)的系統(tǒng)資源。在執(zhí)行Close函數(shù)后,系統(tǒng)首先觸發(fā)窗口的Close-Query事件,若事件返回值為1,則觸發(fā)Close事件并關(guān)閉窗口。 Create 語句 Create語句為某一對象類型創(chuàng)建一個實(shí)例。一個對象被創(chuàng)建后,對象的屬性可以被訪問。Create語句創(chuàng)建完畢后,創(chuàng)建生成的對象實(shí)例可以被當(dāng)作一
19、個變量來使用。 如 gu_registry = create u_sys_registry Destroy 語句 與 Create 相對應(yīng),從內(nèi)存中刪除該對象,如 Destroy gu_registry,嵌入式SQL語句,結(jié)構(gòu)化查詢語言SQL(Structured Query Language)是由國際標(biāo)準(zhǔn)化組織(ISO)認(rèn)定的關(guān)系數(shù)據(jù)庫管理系統(tǒng)的標(biāo)準(zhǔn)語言,現(xiàn)今幾乎所有的數(shù)據(jù)庫廠商都在其產(chǎn)品中對其提供支持。在PowerBuilder中,雖然數(shù)據(jù)窗口給用戶提供了強(qiáng)大的數(shù)據(jù)庫操作功能,但它并不能有效解決所有同數(shù)據(jù)庫交互的相關(guān)問題。為此,PowerScript提供了嵌入式SQL語句,以便于在程序中更
20、加靈活地操縱數(shù)據(jù)庫。,嵌入式SQL語句,結(jié)構(gòu)化查詢語言SQL(Structured Query Language)是由國際標(biāo)準(zhǔn)化組織(ISO)認(rèn)定的關(guān)系數(shù)據(jù)庫管理系統(tǒng)的標(biāo)準(zhǔn)語言,現(xiàn)今幾乎所有的數(shù)據(jù)庫廠商都在其產(chǎn)品中對其提供支持。在PowerBuilder中,雖然數(shù)據(jù)窗口給用戶提供了強(qiáng)大的數(shù)據(jù)庫操作功能,但它并不能有效解決所有同數(shù)據(jù)庫交互的相關(guān)問題。為此,PowerScript提供了嵌入式SQL語句,以便于在程序中更加靈活地操縱數(shù)據(jù)庫。,事務(wù)管理語句CONNECT,CONNECT是每個訪問數(shù)據(jù)庫的PowerBuilder程序必須使用的語句,它的功能是通過事務(wù)對象將應(yīng)用程序與數(shù)據(jù)庫建立連接,連接成
21、功后,其它SQL語句和數(shù)據(jù)窗口才能通過事務(wù)對象操作數(shù)據(jù)庫。CONNECT語句的語法格式為: CONNECT USING TransactionObject ; 其中,TransactionObject是事務(wù)對象。在執(zhí)行該語句前,必須正確設(shè)置事務(wù)對象的數(shù)據(jù)庫連接屬性,有關(guān)事務(wù)對象的介紹,請參閱本書第三章的相關(guān)內(nèi)容。大括號表示該部分可以省略,省略時使用缺省的事務(wù)對象SQLCA。為了清晰和便于初學(xué)者閱讀程序,即使應(yīng)用程序中只使用了一個事務(wù)對象,也要寫上USING子句,這樣能夠改進(jìn)程序的可讀性。,事務(wù)管理語句DISCONNECT,DISCONNECT語句用于斷開與數(shù)據(jù)庫的連接,執(zhí)行該語句時,它首先執(zhí)行
22、COMMIT語句(事務(wù)提交語句),完成事務(wù)提交,然后解除與數(shù)據(jù)庫的連接。DISCONNECT語句的語法格式為: DISCONNECT USING TransactionObject ; 其中,TransactionObject是前面用CONNECT語句連接的事務(wù)對象名,缺省時使用事務(wù)對象SQLCA。,事務(wù)管理語句COMMIT,COMMIT語句用于提交事務(wù),完成數(shù)據(jù)庫的物理修改。執(zhí)行該語句后,將關(guān)閉所有先前打開的游標(biāo)(CURSOR)和過程(PROCEDURE),并開始一個新的事務(wù)。COMMIT語句的語法格式為: COMMIT USING TransactionObject ; 其中,Transa
23、ctionObject是自上次執(zhí)行COMMIT、ROLLBACK或CONNECT操作后需要永久更新數(shù)據(jù)庫操作的事務(wù)對象名,缺省時使用事務(wù)對象SQLCA。,事務(wù)管理語句ROLLBACK,ROLLBACK語句放棄自上一個COMMIT、ROLLBACK或CONNECT語句以來的所有數(shù)據(jù)庫操作,關(guān)閉所有的游標(biāo)和過程,并開始一個新的事務(wù)。其語法格式為: ROLLBACK USING TransactionObject ; 其中,TransactionObject是事務(wù)對象名,缺省時使用事務(wù)對象SQLCA。,事務(wù)管理語句提示,缺省情況下,當(dāng)應(yīng)用程序執(zhí)行DISCONNECT語句時,系統(tǒng)自動執(zhí)行一條COMMI
24、T語句,這一缺省并不總是有利的,有時候我們希望在執(zhí)行DISCONNECT語句時由程序本身決定是提交還是回滾事務(wù)。在PowerBuilder中新引進(jìn)了一個名稱為CommitOnDisconnect的DBParm參數(shù),該參數(shù)設(shè)置為Yes后,執(zhí)行DISCONNECT語句時系統(tǒng)將首先執(zhí)行一條COMMIT語句,完成事務(wù)的提交;該參數(shù)設(shè)置為No后,執(zhí)行DISCONNECT語句時系統(tǒng)將首先執(zhí)行一條ROLLBACK語句回滾事務(wù)。另外,PowerBuilder不支持某些數(shù)據(jù)庫管理系統(tǒng)支持的事務(wù)嵌套。,基本SQL語句SELECT,SELECT語句從數(shù)據(jù)庫中檢索記錄,其語法格式為: SELECT FieldsLis
25、t INTO VarList FROM TableList WHERE Criteria USING TransactionObject ;,基本SQL語句INSERT,INSERT語句向數(shù)據(jù)庫中插入一條記錄,其語法格式為: INSERT INTO TableName ( FieldName , . ) VALUES ( ValueOfField , . ) USING TransactionObject ;,基本SQL語句DELETE,使用DELETE語句刪除表中的數(shù)據(jù),其語法格式為: DELETE FROM TableName WHERE Criteria USING TransactionObject ;,基本SQL語句UPDATE,UPDATE語句修改表中指定的數(shù)據(jù),其語法格式為: UPDATE TableName SET FieldName = Value , FieldName = Value , . WHERE Criteria USING TransactionObject ;,基本SQL語句SE
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026“才聚齊魯成就未來”山東鋼鐵股份有限公司博士后科研工作站博士后招聘備考題庫及完整答案詳解1套
- 2025貴州黔西南州興義市人民醫(yī)院引進(jìn)高層次、急需緊缺人才100人備考題庫完整參考答案詳解
- 2026年上半年云南省農(nóng)業(yè)農(nóng)村廳所屬事業(yè)單位公開招聘人員備考題庫(5人)及完整答案詳解一套
- 2026上半年云南事業(yè)單位聯(lián)考國土資源職業(yè)學(xué)院招聘39人備考題庫及答案詳解參考
- 2026山東泰安市新泰市紫光實(shí)驗(yàn)中學(xué)招聘10人備考題庫及答案詳解(易錯題)
- 2025江西南昌市安義縣林業(yè)局招聘專職護(hù)林員20人備考題庫及答案詳解(奪冠系列)
- 2026年上半年云南特殊教育職業(yè)學(xué)院招聘人員備考題庫(6人)及1套完整答案詳解
- 2026北京市某政府單位熱線值守招聘需求備考題庫及1套完整答案詳解
- 2026中國日報社及所屬事業(yè)單位招聘國內(nèi)高校應(yīng)屆畢業(yè)生21人備考題庫附答案詳解
- 2026四川師范大學(xué)考核招聘事業(yè)單位人員126人備考題庫參考答案詳解
- 水電站安全管理體系構(gòu)建
- 施工現(xiàn)場臨時用電:配電箱一級二級三級定義及管理規(guī)范
- 2025財務(wù)經(jīng)理年終總結(jié)
- TCACM 1463-2023 糖尿病前期治未病干預(yù)指南
- 江蘇省淮安市2024-2025學(xué)年七年級上學(xué)期1月期末道德與法治
- 2024年度高速公路機(jī)電設(shè)備維護(hù)合同:某機(jī)電公司負(fù)責(zé)某段高速公路的機(jī)電設(shè)備維護(hù)2篇
- 癌癥患者生活質(zhì)量量表EORTC-QLQ-C30
- QCT55-2023汽車座椅舒適性試驗(yàn)方法
- 孕產(chǎn)婦妊娠風(fēng)險評估表
- 消化系統(tǒng)疾病健康教育宣教
- 河南省洛陽市2023-2024學(xué)年九年級第一學(xué)期期末質(zhì)量檢測數(shù)學(xué)試卷(人教版 含答案)
評論
0/150
提交評論