PowerScript 語法

一、powerScript的語法

1.0變量的命名及使用

powerscript的標識符(變量名稱)必須以字母或下劃線開頭,其它的字符可以是下劃線(_)、短橫線(-)、美元符號($)、號碼符號(#) 、百分號(%)。

1.1.最長40個字符(實際可以更長),中間不能有空格

1.2.保留字不能用作標識符(變量名稱)。

1.3 標識符不區分大小寫,如:PART、part、Part表示同一個標識符

1.4 特殊符號表示

換行符                       ~n

回車                           ~r

製表                           ~t

豎直製表符                ~v

換行                           ~f

退格                           ~b

波浪號                       ~~

單引號                        ~'

雙引號                        ~""

2.Null(空值)

null是powerbuild與數據庫交換數據時使用的一種特殊值,表示數據未定義、不確定,它與空字符串、數值零、以及日期00-00-00的意義完全不同。

powerscript的所有數據類型都支持null,將變量賦null的方法有兩個,

2.1.從數據庫中讀到空值

2.2.使用SetNull函數賦值,例:String person="";

SetNull(person);將person變量的值設置爲 null

測試變量是否爲null時,使用函數IsNull(),例:IF IsNull(a) THEN,不能使用 IF a=NULL THEN,因爲空值不等於任何值,也不等於另一個空值。

3.powerScript中斷行、續行與多條語句

3.0 powerScript中的續行符號"&",它放在一行的末尾指示下一行是當前行的繼續,例如:

把語句MessageBox("SQL語句出錯","出錯號="+String(SQLCA.SQLCode))寫成兩行

MessageBox("SQL語句出錯","出錯號="+&

String(SQLCA.SQLCode))

但是不能在保留字或標識符(變量名)的中間續行,例如:

MessageBox("SQL語句出錯","出錯號="+String(SQL&

CA.SQLCode))

如果想一行中寫多條語句可以用分號進行分隔例:

a=b+c;g=q-m;

4.powerScript中的註釋

4.0 單行註釋"//",多行註釋"/*  */",例: // 這是一條註釋

/* 我是註釋多行的*/

5.對象、屬性、函數和事件的引用方法

5.0對象屬性的使用

對象名.屬性名,例如:UserEnter=sle_name.Text,sle_name單行文本編輯框的名稱,Text是其屬性

5.1函數和事件的訪問方式

[objectname.][type][calltype][when]functionname([argumentlist))

objectname對象名稱

type 類型的取值爲Function或Event,用於指明訪問的是函數還是事件,默認是Function

calltype 用於指明powerbuilder查找函數的時機,有效取值爲:static(默認值)編譯時查找函數,如果不存在,則產生編譯錯誤

dynamic程序運行時查找函數,如果不存在,則產生編譯錯誤。

when用於指明函數或事件是立即執行還是當前程序段執行完之後執行,取值爲trigger(默認值)立即執行,post當前程序段執行完之後再執行

functionname是指調用的函數或事件的名稱,argumentlist是調用函數或事件的參數

例如:把焦點移到單行編輯框中  sle_name.SetFocus()

給按鈕添cb_name加單擊事件,cb_name.EVENT Trigger Clicked() 

6.代詞的使用(This、Parent、ParentWindow、Super)

6.0 This表示正在爲之編寫事件處理程序的對象

6.1 Parent表示當前控件所在的窗口,例如:窗口w_win中有個按鈕cb_close,其作用是單擊該按鈕關閉窗口w_win,我們可以在按鈕的Clicked事件處理中寫上close(w_win),或close(Parent)

6.2 ParentWindow表示運行時菜單所在的窗口,該代詞只能在菜單的事件中使用,例如,關閉菜單的Clicked事件中寫上 close(ParentWindow)

6.3 Super調用父對象的Clicked事件處理程序

CALL Super ::Clicked

調用在子類重載的父的函數f_func()

Super:: f_func()

7.powerScript中的數據類型

Blod  表示二進制對象,用於存儲大量數據,例如圖象、大文本等。

Boolean  布爾開型,取值爲true或false

Character或Char  單個ASCII字符

Date 表示日期,包括年(1000-3000)、月(01-12)、日(01-31)

Datetime 表示日期及時間,僅用於訪問數據的Datetime類型數據

Decimal或Dec  表示帶符號十進制數,最大18位精度

Double  表示帶符號的浮點數,15位有效數字

Integer或Int  表示16位帶符號整數

Long   表示32位帶符號整數

Real    表示帶符號浮點數,精度6位

String  表示字符串類型,用於存儲字符,長度爲0-60000

Time    表示小時,24小時制的時間,小時(00-23)、分(00-59)、秒(00-59)

UnsignedInteger或UnsignedInt或Uint 表示16位無符號整數

UnsignedLong或Ulong 表示32位無符號整數

7.0.any數據類型

any是一種可變的數據類型,程序中給它什麼類型的值,它將變成什麼類型,any類型可以接受標準數據類型,結構數據類型、對象及數組等各種類型

判斷any保存的是什麼數據類型,可以使用ClassName函數

8.變量的聲明

數據類型  變量名稱,例如:Integer i,a,b

Blob類型的變量聲明,Blob[{大小}] 變量名,Blob的默認長度爲0,系統會根據實際數據的長度自動調整其長度。例如:blob{100} temp_pic //表示長度爲100的 blob類型變量

blob ib_picture表示一個默認長度爲0的blob變量

Decimal類型的變量聲明

Dec|Decimal [{精度}] 變量名,精度是指小數點之後的位數,如果沒有指定,則以賦值時的精度爲準.

數組的聲明

數據類型 數組名稱 [大小]

Integer person[30],real  lr_array[10,10]聲明一個二維數組,real  lr_array1[3]={1.2,3.2,3.5}

常量的聲明

CONSTANT 數據類型 常量名=常量值,constant可以聲明除blob之外的任意標準數據類型

9.變量的作用域

變量的作用域有以下四種:

1. 全局變量

 可以在整個程序內訪問。

2.共享變量

在一個對象內定義,可以在對象內部的任何地方使用,同一個類的所有實例共享一個共享變量。

3.實例變量

在一個對象內定義,只能在這個對象內部使用

4.局部變量

就是在腳本層定義的變量,只能用於腳本層,且在腳本層的末尾被刪除

變量的優先級:局部變量、實例變量、全局變量、共享變量

10.存儲過程的聲明及使用

10.0 存儲過程按返回值分爲兩類,一類 有返回值,我們把它看成函數;另一類沒有返回值,我們稱作過程。函數型存儲過程使用function關鍵字,過程型存儲過程使用subroutine關鍵字。

函數型存儲過程的聲明語法爲:

function rtndatatype functionname ({{ref} datatype1 arg1,...{ref} datatypen argn }) rpcfunc{ alias for "spname" }

rtndatatype返回值類型

functionname函數名稱

ref關鍵字指明函數是傳引用,省略該關鍵字則表示傳值

datatype arg 表示參數的數據類型和參數名稱

rpcfunc 關鍵字說明是數據庫的存儲過程說明,而不是動態連接庫中外部函數的說明

alias for 關鍵字是給存儲過程起別名,"spname"是別名的名稱

例:

function double give_raise(ref double salary) rpcfunc alias for "give_raise_proc"

調用存儲過程,double val=2000,double rv

rv=SQLCA.give_raise_proc(val)

11.變量的默認值

blob 默認爲0

char 或character 默認值爲0

boolean 默認值爲 false

Date 默認值是1900-01-01

DateTime 默認值是 1900-01-01 00:00:00

數值類型(int,long,decimal,real,double,unsignedinteger,unsignedLong) 默認值爲0

String 默認值是 空字符串("")

Time 默認值 00:00:00

12.條件語句

12.0 if語句 

12.1 單行 if ...then  格式爲

 if cond then action1 

 else action2

當cond爲true時 執行action1,否則執行action2

12.2  多行 if ...then  格式爲 

 if  condition1  then action1 

 elseif  condition2  then action2

 else action3  

 end if

例:if parentCorrect>=90 then

            grade="a"

       elseif  parentCorrect>=80 then 

            grade="b"

       elseif  parentCorrect>=70  then

            grade="c"

       elseif parentCorrect>=60 then

            grade="d"

        else

            grade="d"

        end if

13.  choose case 語句

choose case testexpression

        case expressionlist

            statementblock

        case expressionlist

            statementblock

        case else 

            statementblock

end choose

testexpression 是測試表達式,expressionlist是判斷表達式,statementblock是執行語句塊

判斷表達式可以使用如下的形式:

是用逗號分隔的數據,例如:2,4,7

用To 表示一個區間範圍,例如:2 To 15

用IS 代表測試值,後跟關係運算符和比較值,例如:IS>30

例:

choose case parentCorrect

case IS >=90

     grade="A"

case 80 To 89

     grade="B"

case 70 To 79

     grade="C"

case 60 To 69

     grade="D"

case else

     grade="E"

end choose

14. 循環語句

14.1 do...loop循環

do... loop 循環提供了四種形式,分別爲:

do until codition...loop

do while condition...loop 

do ... loop until condition

do ... loop while condition

do 表示循環的開始,loop 表示循環的結束,condition表示循環條件,是邏輯表達式,其值爲true或false

do until condition ... loop的語法格式爲:

do until condition

    statements

loop 

condition條件爲false則執行 statemets語句,接着檢查條件,直到爲true時退出循環

do while condition ... loop的語法格式爲:

do while condition

     statements

loop

condition執行條件爲true時則執行statements語句,接着檢查條件,直到爲false時退出循環

do... loop until condition的語法格式爲:
do 

    statements

loop until condition

do ... loop while condition的語法格式爲:

do

    statements

loop while condition

14.2 for ...next循環

for ...next是循環次數確定的循環結構,使循環體的語句執行規定的次數

for varname=start to end [step increment]

    statements

next

varname是循環變量,可以爲任意的數值,start,end分別爲循環變量的初始值和終止值,increment是每次循環後循環變量的步長增量,默認是1

例:

int ii_aar[50]

int sum

int i

for i=1 to 50

    sum+=ii_aar[i]

next

15.Call語句的使用

call語句用來調用祖先對象的事件或祖先對象的控件上的事件

Call語句的語法爲:

call ancestorobject {controlname} ::event {(argumentlist)}

ancestorobject是祖先對象的名稱

controlname 事件名稱

event 指定要調用的事件名稱

argumentlist 指定事件參數,參數類型、個數由具體事件確定。如果事件要求參數,調用時沒有提供參數,系統將默認設置參數值爲NULL

例:調用祖先窗口的Open事件

Call w_emp::open

調用祖先窗口上命令按鈕cb_close的click事件處理

Call w_emp cb_close :: Clicked

16. MessageBox函數的使用

MessageBox 函數常用於顯示出錯、警告及其它重要的信息,其語法格式爲:

MessageBox(title,text{,Icon{,Button{,Default}}})

大括號中的部分可以省略,title表示標題,text是指顯示在窗口的文本。

Icon指定在窗口中顯示的圖標,是枚舉類型,取值爲:

Information!、StopSign!、Exclamation!、Quetion!、None!

Information是Icon的默認值

Button參數指定在窗口中顯示哪些按鈕,有效取值爲:

OK!   "確定"按鈕

OKCance! "確定"、"取消"按鈕

YesNo!  "是"、"否"按鈕 

YesNoCancel   "是"、"否"、"取消"按鈕

RetryCancel!    "重試"、"取消"  按鈕

AbortRetryIgnore!   “終止"、"重試"、"忽略"  按鈕

Default  參數指定哪個按鈕是默認按鈕,即用戶按下鍵盤上的Enter鍵時,執行哪個按鈕的

clicked事件,用戶數字1、2、3表示,默認是1

MessageBox的返回值是用戶按下的 按鈕序號,通過判斷返回值能夠知道用戶按了哪個按鈕

例:li_rc=MessageBox('保存修改','你修改了數據窗口的數據,現在是否保存?',&

Quetion!,YesNoCancel!)

17.  數據類型轉換

17.1字符串轉換成數值類型

Integer(String),將字符串轉換成Integer

Long(String),將String轉換成Long

Real(String),將String轉換成Real

Double(String),將String轉換成Double

Dec(String),將String轉換成Dec

17.2 數值類型轉換成字符串

String(number,format),number是任意一種數值類型, format是轉換後的格式

例:amount=12345678,String(amount,'$###,##0.00') 轉換後爲$123,456.78

18.運行其它應用程序的Run

其語法格式爲:Run(String{,windowstate})

windowstate的取值爲Maximized、Minimized、Normal

Run執行成功返回1、否則返回-1

18、設置焦點函數SetFocus

19. SQL語句介紹

     1.建立和斷開數據庫的連接,使用connect

     語法格式爲:

     connect  {using transactionobject}

     transactionobject表示事務對象,如果省略則默認使用SQLCA

     斷開數據庫連接語法爲:

     disconnect  {using transactionobject}

     2.提交與回滾事務

     提交事務的語法爲:

     commit {using transactionObject}

     回滾事務的語法爲:

     rollback {using transactionObject}

     3.單行查詢語句select

        語法格式:

        select fieldlist into varlist from tableList 

        where  criteria  {using transactionObject}

        例:int emp_num

        select  employee.Emp_Lname,employee.Emp_name

        into :sle_Lname.Text, :sle_Fname.Text 

        from Employee

        where employee.Emp_nbr= :emp_num


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章