【PB】PB程式設計通俗快速入手
第一章 一般使用
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語句幫助中的已夠用,詳細講太多,恕不贅述。
相關文章
- PB程式設計通俗快速入手程式設計
- PB Tips
- pb學習
- PB列印斑馬條碼程式
- pb錯誤程式碼詳解
- PB程式設計:鍵盤enter預設觸發和介面開啟預設輸入程式設計
- 我的PB程式資料庫升級程式資料庫
- webbrowser PB 下拉框Web
- 騰訊終止“黎明計劃”專案PB
- PB中位操作的實現程式碼
- PB程式碼動態解析執行器
- 【PB登陸的實現】
- PB快取資料指南快取
- 【PB】有關日期函式函式
- Error: failed PB timebomb checkErrorAI
- 關於PB列印設定中紙張的大小
- pb9 資料視窗的計算列
- pb資料視窗型別型別
- PB中呼叫儲存過程儲存過程
- PB及ASA的打包說明
- 少兒程式設計如何入手?程式設計
- PB TreeView 屬性,事件詳解(轉)View事件
- Rich Client Java vs. PB, Delphi etcclientJava
- [pb]從excel匯入資料到datawindowExcel
- 我的pb 讀取 Execl函式函式
- PB中建立資料庫的方法資料庫
- 【PB】PB中object,control,custom class,custom visual,custom external等概念的區別Object
- PB GetRow() 和 GetSelectRow(0) 的區別
- ShellExcute API 在PB11中的使用API
- 常用的PB時間函式彙總函式
- SQL批量複製命令的六個陷阱PBSQL
- 【PB】powerbuilder中xml的應用一例UIXML
- 不安裝oracle客戶端部署PB應用Oracle客戶端
- 【PB】製表符和基本資料型別資料型別
- Crust “方舟計劃”播報# 2|儲存總量34PB!Rust
- 阿里雲 PB 級 Kubernetes 日誌平臺建設實踐阿里
- 業界 | 晶片群俠傳:Photobit PB-100晶片
- PB級資料持久化快取系統——lest持久化快取