CSDN这个账号是我今年6月1号注册的,也就前几天的事,以前在学校虽说也上技术论坛,不过那都是路过看看,打打酱油。今年出来实习啦,公司是用pb开发的,在此之前我都不知道还有pb这门开发工具。没办法硬着头皮上,准备自己买本书慢慢啃,跑去市中心(广州市天河体育中心)看看,谁知道竟然没有pb方面的书,只好网购了。初步接触pb发现和vb很像,真不是一般的像,需要写代码的地方特别少。特别在公司开发的时候,只需要继承一个公司写好的窗口,只要在open,new,del,add,mod,retrieve,print这几方面写代码就可以了。工作很轻松,也就做做报表,维护,接口。工资也不是很高,也就3000左右。
在我看来,pb可分为四大块:
1:数据窗口,这不必多说了,pb就是靠他吃饭的
2:pb的函数不少,不过掌握了常用的一百多个就够日常开发用了
3:事件触发的时机,在这方面,网上的很多前辈,提供了两个办法,一是debug,二是写messagebox
4:pfc类库,个人认为这个是很重要的,他大大的加快了开发速度,
一般大型系统的开发都要用到,而且都是进行二次开发的
ps:其实主要还没在csdn发过贴,发一贴试试,
下面是学习pb以来,自己积累的pb函数,
可能不是很全面,也不是很准确,不过还是分享一下,希望不要误人子弟,^_^
--pb常用函数 create by amu on 20120529
1.弹出窗口
messagebox('系统提示','数据错误',question!,yesno!2)
2.设置焦点
对象名.setfocus
3.触发事件
对象名.triggerevent() 另postevent也是触发功能,用法一样,不过却不是立即触发
4.关闭窗口
close(parent\windowname)
5.默认数据库链接变量:sqlca
dw_name.settransobject(sqlca)链接数据库
sqlca.sqlcode = 0 有数据\\ = 100 无数据
6.链接数据库
connect;一般用于程序open的时候,跟在数据库链接代码后面
7.打开窗口
open(windowname)
8.关闭应用
halt close
9.从ini配置文件中提取string数据
profilestring('文件名,可以包含路径','主要字节','在主要字节下的关键字','如果找不到数据则返回的数据')
10.断开链接
disconnect;一般用于程序close的时候
11.是否修改过 --数据窗口函数
isrowmodified()
12.是否新增的 --数据窗口函数
isrownew()
13.数据窗口中的if函数 --数据窗口函数
if(true\false,'为true时返回的值','为false时返回的值',)
如:if(isrownew(),'新',if(isrowmodified(),'改','旧'))
14.插入空行
dw_name.insertrow(0)
通常配合插入行使用的是滚动行
dw_name.scrolltorow(dw_name.insertrow(0)) \\滚动到插入行
15.从数据窗口中提取数据
dw_name.getitem\\string\date\......(row,'数据来源控件名')
16.设置数据窗口的数据
dw_name.setitem(row,'要设置的控件名','要设置进去的数据')
17.窗口与窗口之间的传值,主窗口
openwithparm(子窗口,'传给子窗口的值')
接收子窗口返回的值 = message.stringparm
18.窗口与窗口之间的传值,子窗口
closewithreturn(主窗口,'返回给主窗口的值')
19.转换大小写
lower(string)转换为小写的;upper(string)转换为大写的;
20.为数据窗口设置事物对象
dw_name.settransobject(sqlca\也可以是自己定义的)
21.清零数据
dw_name.reset()
22.检索数据
dw_name.retrieve(里面可以有参数变量不过要与数据窗口中定义的类型与顺序一样)
注:retrieve之前要settransobject()和reset()一下datawindow
23.过滤数据
dw_name.setfilter(string类型\\"name = '"+ls_name+"'")
dw_name.filter()
注:取消过滤为dw_name.setfilter("1=1")
24.数据排序
dw_name.setsort(string类型\\"name a\d" :其中a为升序,的d为降序)
dw_name.sort()
25.数据分组
dw_name.groupcalc()重新分组一般都是在filter()或sort()后面,以确保分组的正确性
26.防止刷新,提高效率
dw_name.setredraw(false)
dw_name.reset()\retrieve()\filter()\sort()\groupcalc():中间是数据操作
dw_name.setredraw(true)
27.校验数据
dw_name.accepttext() = 1为通过检验 <>1为不通过
一般写在要对数据窗口进行操作取数的时候,写在这些动作前面
28.修改的行数
dw_name.modifiedcount()
29.删除的行数
dw_name.deletedcount()
如果deletedcount()+modifiedcount() > 0 则表明数据窗口有操作
30.统计行数
dw_name.rowcount()
31.保存数据
if dw_name.update()=1 then \\= 1为成功
commit using sqlca; --提交数据
else
rollback using sqlca; --回滚数据
end if
32.选择行
dw_name.selectrow(row,true\false)
33.已选择行
dw_name.isselected(用循环语句检查每一行是否被选择li_row)
实例:
integer li_currow
boolean lb_result
li_currow = dw_name.getrow()
lb_result = dw_name.isselected(li_currow)
if lb_result then
dw_name.selectrow(li_currow,false)
else
dw_name.selectrow(li_currow,true)
end if
34.当前行