PB程式設計通俗快速入手

kaiyinkaiyin發表於2007-08-25
PB程式設計通俗快速入手[@more@]

程式的開始,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/ef%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、 主要語法單元

條件判斷

if 怎樣 then

怎樣做

else if 怎樣 then

怎樣做

end if
choose case 變數

case is <3

case 4 to 7

case else

end choose

迴圈到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 ;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10957369/viewspace-965853/,如需轉載,請註明出處,否則將追究法律責任。

相關文章