【PB】PB程式設計通俗快速入手

灰色軌跡發表於2012-07-21

第一章   一般使用

1、程式的開始,application的open事件。

退出程式例程:(halt為退出函式)

int SureQuit

SureQuit = 2

SureQuit=Messagebox("退出系統","退出前請確認已儲存好資料",Question!,OKCancel!, 2)

if SureQuit = 1 then halt

2、變數定義有效範圍:

◎declare-globe 全域性變數,整個程式均有效

◎declare-instance 區域性變數,可在一個物件中有效(如:窗體,APP等)

◎模組中定義的變數,可在當前模組中有效

定義:(PB中大小寫不敏感)

constant string LS_HOMECITY = "Boston"  //常量

int a                      //整型

char c                   //字元型

Boolean b              //布林型

String a                 //字串型

String a[1000]        //1000的陣列,0~1000

String a[3 to 30]     //陣列元素為3到30,最初一個為a[3],最後一個為a[30]

String a [100,3to 30]  //二維陣列,一維為0~100,二維為3 到30

String a[]               //變長陣列,賦值時(如a[30]=333)自動分配記憶體。

得到上界UPPERBOUND,下界LOWERBOUND。

操作:

a=”aaaa”+”vvvbb”+b+c

string(b)  //將B轉換成字串型

integer(“333333333333”) //將“333333333333”字串轉換成數333333333333

a=a+b*c^d/e\f%g  //注意:減號前後要空格,用於避免PB7.0之前版本的BUG。

3、函式定義:

第一行是返回型別和函式名,第二行是變數型別和變數名,tab鍵加形參。

Return 是函式的返回,同時如C語言一樣,return則函式執行結束

4、開啟視窗

open(視窗名)

openwithparm(視窗名,引數,父視窗<僅對子窗體和彈出窗體有效>)

5、MDI窗體中開啟子窗體

層疊樣式開啟 opensheet(子窗體,父窗體名,1,layered!)

平鋪樣式開啟 opensheet(子窗體,父窗體名,1, Original!)

如果在父窗體的窗體級函式下編寫,可用 opensheet(子窗體,this,1, Original!)

第三個參數列示新開窗體在父窗體選單中的位置。

6、控制元件基本屬性

控制元件名.x         //x座標

控制元件名.y          //Y座標

控制元件名.width    //寬

控制元件名.height   //高……                   (其他可參見編輯器中的屬性視窗)

7、調整窗體模式

this.windowstate=maximized!             

窗體.windowstate=maximized!            窗體最大化(其他可參見編輯器中的屬性視窗)

8、INI檔案讀取及寫入

【舉例】有名為“MNR.INI”的ini檔案,(路徑在程式所在目錄)有資料如下:

[ACTION]

PRELOAD=YES

可以用如下語句讀取:

a=ProfileString("MNR.INI","ACTION","PRELOAD","aaa")

a為變數,”aaa”為無此資料項時預設資料

可以用如下語句寫入(寫入值為yes):

setprofilestring("MNR.INI","ACTION","PRELOAD","YES")

9、  對於整個程式中都要用到的變數

可以先定義一個結構,再在globe declare中定義該結構型別變數,管理起來方便些

10、主要語法單元

A、條件判斷           

if 怎樣 then

怎樣做

else if 怎樣 then

怎樣做

end if

choose case 變數

case is <3

case 4 to 7

case else

end choose

B、迴圈到A大於5 

DO

A=a+1

LOOP UNTIL A > 5

DO WHILE A <= 5

A = A + 1

LOOP

DO

A=a+1

LOOP UNTIL A > 5

DO UNTIL A > 5

A = A + 1

LOOP

跳出迴圈EXIT,繼續下一輪迴圈CONTINUE

11、訊息框

messagebox(標題,資訊)                   其他看幫助,查索引messagebox

12、取得當前時間now()

sle_begintime.text=string(now(),"yyyy-mm-dd 10:00:00")

如現在是 2002-7-14 17:22:21秒,則輸出為 2002-7-14 10:00:00

13、列表框應用

DDLB_BSC.RESET()  //清空列表框內容

I=1

DO WHILE I<=UpperBound(WINBSC)

       IF WINBSC[I]="" THEN EXIT;

       DDLB_BSC.ADDITEM(WINBSC[I])          增加內容項到列表框

       I=I+1

LOOP

第二章   應用資料庫

1、datawindow控制元件的使用

先建立一個datawindow物件dw_hwtj,再在窗體中新增一個datawindow控制元件dw_rep,最後將datawindow的dataobject屬性設定成dw_hwtj。

a)我寫的選行函式,datawindow控制元件的click事件上用

if row=0 then return

if nowrow<>row and nowrow>=0 then

       THIS.SELECTROW(nowROW,false)

end if

THIS.SELECTROW(ROW,TRUE)

nowrow=row

b)我寫的排序函式,在datawindow控制元件的雙擊事件上用

IF dwo.Type = "column" THEN

ls_columnname = dwo.Name

END IF

if nowstate='A' then

       THIS.SETSORT(ls_columnname+" D")

       NOWSTATE='D'

ELSE

       THIS.SETSORT(ls_columnname+" A")

       NOWSTATE='A'

END IF

THIS.SORT()

(效果,在某一列上雙擊一次,正向排序,再一次,反向排序)

c)規定排序

dw_rep.setsort("BSCMC A,XQH A,xqmc A")

dw_rep.sort()

(先按BSCMC,再按XQH,再按xqmc正向排序)

d)儲存到xls檔案

dw_rep.saveas('',Excel5!,true)

e)讀寫:

寫w_netrep_cell.dw_rep.object.tchpzzs[I] =a

讀a=w_netrep_cell.dw_rep.object.tchpzzs[I]

2、  建立與資料庫的連線

1)定義

transaction localdb

2)設定

MyTrans.DBMS=”as”

MyTrans.Database=”sda”

MyTrans.LogPass=”def”

MyTrans.ServerName=”dbo”

MyTrans.LogID=”abc”

MyTrans.DBParm=””

MyTrans.Lock=””

MyTrans.UserID=”abc”

MyTrans.AutoCommit   =true

3)連線

連線       connect using localdb;

斷開       disconnect using localdb;

4)從庫中查詢多行資料:(查詢語句被固化)

connect using localdb;                                             //連線

if localdb.SQLCODE<0 then

       Messagebox("連線本地資料庫失敗...",localdb.sqlerrtext)

       return 1

end if

DECLARE MY_CURSOR CURSOR FOR                                //定義遊標

SELECT BSC from BSC ORDER BY BSC USING LOCALDB;  //執行查詢

I=1;

OPEN MY_CURSOR;                                                            //開啟遊標

DO WHILE NOT LOCALDB.SQLCODE = 100                 //直到結束

       IF I>UpperBound(WINBSC) THEN EXIT

       FETCH MY_CURSOR INTO :WINBSC[I];                //提取資料項

       I=I+1

LOOP

CLOSE MY_CURSOR;                                     //關閉遊標

disconnect using localdb;                                  //斷開

5)從庫中查詢一行資料:(查詢語句被固化)HELP中例程,“:“後加一個字串是指標誌為該字串的變數

SELECT employee.Emp_LName, employee.Emp_FName

INTO :Emp_lname, :Emp_fname

FROM Employee

WHERE Employee.Emp_nbr = :Emp_num

USING Emp_tran ;

6)在資料更新,刪除,增加,建表等操作中使用的:

注意查閱:Dynamic SQL Format 1 statement  ……Dynamic SQL Format 4 statement,其中講得很清楚(看sample)

直接執行一條語句:

EXECUTE IMMEDIATE SQLStatement      {USING TransactionObject} ;

HELP中講得很清楚,這裡就不多講了。

7)非固化的查詢語句:這個對提高軟體靈活性很重要,但很簡單,只貼上HELP中的SAMPLE一個:

DECLARE my_cursor DYNAMIC CURSOR FOR SQLSA

string sql1, sql2

sql1 = "SELECT emp_id FROM department WHERE salary > 90000"

sql2 = "SELECT emp_id FROM department &    //這是分行連線符號,空格後一個&符號

WHERE salary > 20000"

IF deptId = 200 then

       PREPARE SQLSA FROM :sql1 USING SQLCA ;

ELSE

       PREPARE SQLSA FROM :sql2 USING SQLCA ;

END IF

OPEN DYNAMIC my_cursor ;

小結:

內容不多,但主要的東西都在這裡了,其他的要在實踐中領會,這些知識對上手和標準的MIS系統等開發,知識面及深度已經足夠了。SQL語句幫助中的已夠用,詳細講太多,恕不贅述。

相關文章