PB编程通俗快速入手(自己2002年教别人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、 主要语法单元
条件判断
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
PB编程通俗快速入手(自己2002年教别人PB时随手写的,很多年了,放上来送给新手们)相关推荐
- Maven初探-如何快速入手一个项目
这已是一个工具的时代,而不是一个到处搜集JAR的年代,如果还在为搭建一个项目而到处找依赖,那你就彻底OUT了.下面,跟各位一起重温学习下Maven. 什么是Maven Maven项目对象模型(POM) ...
- 运动控制器编程_快速入门 | 篇二十一:运动控制器ZHMI组态编程简介一
点击上方"正运动小助手",随时关注新动态! 运动控制器ZHMI组态编程简介一 今天我们来学习一下,运动控制器的ZHMI组态编程简介.本文主要从产品概述.控制器连接触摸屏使用.HM ...
- VC与Matlab混合编程的快速实现(3-1)
[原创]VC与Matlab混合编程的快速实现(3-1) 发信站: BBS 水木清华站 (Mon May 19 21:30:19 2003), 转信 3 在VC++中使用Matlab生成的动 ...
- Linux快速入手系列二( 文本处理 )
更多精彩文章点击 -> 我的学习小站 & 更多好玩点击 -> 技术杂谈 文本编辑神器-Vim vim的三种操作模式 vim有三种操作模式,分别是命令模式(Command mode) ...
- 新手如何学习UG,初学UG编程的快速…
新手如何学习UG,初学UG编程的有什么快速入门方法.也许你学习软件时不知道该从哪里着手学起.这里,小编总结以往学习UG编程时的经验.告诉新手,学习时,一般先学习三维造型,由于UG命令多,因此,需要不断 ...
- 搭建之星中文编程汉语编程计算机快速入门教学教程
<搭建之星>采用国际流行的可视开发模式,达到"所见即所得"的效果:开发过程是通过鼠标拖动构件到窗口指定位置,像搭积木一样简单快捷:构件间的逻辑关系是通过命令设置的方式完 ...
- YOLOv3目标检测图片标注方法--快速入手
文章目录 1. YOLOv3目标检测图片标注方法--快速入手 1.1 常用快捷键操作 1.2 界面操作 1.3 文件夹创建要求 1.4 标记过程示例: 1. YOLOv3目标检测图片标注方法–快速入手 ...
- Android好书《Android9编程通俗演义》
向大家推荐一本Android入门好书:<Android9编程通俗演义> ! 本书的目标是让技术不再难懂.没有术语黑话,没有玄虚抽象,妇孺可读,老少皆宜,充满了故事性.娱乐性,轻松入门,愉快 ...
- 网络编程懒人入门(八):手把手教你写基于TCP的Socket长连接
转自即时通讯网:http://www.52im.net/ 本文原作者:"水晶虾饺",原文由"玉刚说"写作平台提供写作赞助,原文版权归"玉刚说" ...
最新文章
- 钢铁侠“变身”AI布道师?小罗伯特·唐尼这次推出一部AI科普纪录片
- Servlet—07—Cookie; Seesion;
- Android笔记之模拟器
- 打包工具的配置教程见的多了,但它们的运行原理你知道吗?
- MyBatis创建SqlSession-怎么拿到一个SqlSessionTemplate?
- Spring的WebClient基本使用
- 2009年网页设计10大趋势
- 上海五校赛 丢史蒂芬妮
- SAP Customer Experience Extensibility gold rule
- c语言六角填数答案,【蓝桥杯】第五届-6-六角填数
- matlab求logistics映射 的le_高维映射 与 核方法(Kernel Methods)
- JVM内存及GC回收
- 由马斯克的Space X 火箭的主芯片程序编写语言说起
- OPNsense用户手册-强制网络门户
- SpringBoot防止大量请求攻击
- 利用web实现android的界面,利用WebView加载手机端网页实现APP封装
- 域名代购还需要关注到全方位宣传
- IOS NDDictionary使用中value遇到no summary如何判断为NULL
- SlickEdit编码设置
- mysql+java+springboot+前端 实现前后端数据的交互的后台