分享
 
 
 

PB编程通俗快速入手(自己2002年教别人PB时随手写的,很多年了,放上来送给新手们)

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

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、 主要语法单元

条件判断

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 ;

小结:

内容不多,但主要的东西都在这里了,其他的要在实践中领会,这些知识对上手和标准的MIS系统等开发,知识面及深度已经足够了。SQL语句帮助中的已够用,详细讲太多,恕不赘述。

2002-7-14

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有