
PB
吴半止
我想,我想变成八爪鱼
展开
-
sharedata卡死、程序崩溃
最近给公司处理老版本中发现的bug,某个sharedata代码,数据量一大总是崩溃,且不报错。测试了几种可能,最后跟踪sql发现一个隐藏比较深的问题。举例:dw_1.sharedata(dw_2)如果dw_1或dw_2中,有些字段的edit面板中的dddw属性,里面的dddw对象dw中本身还有某些字段有dddw,存在设置错误,比如dddw不对或者value和display不对。一般需要跟踪SQL来发现,再加一点直觉。...原创 2021-03-24 09:41:34 · 352 阅读 · 0 评论 -
PB powerbuilder 数据库窗口的 scrolltorow 无效的说明(转)
PB 数据库窗口设计时,会常用到scrolltorow ,即跳转到指定的行。而经常有人抱怨,该函数无效。其罪魁祸首就是setrow这个函数,如果在scrolltorow函数前面使用了setrow,并且参数row值相同,那么scrolltorow是看不到效果的。因为如果当scrolltorow跳转的行是当前行,数据库窗口不会scroll,而setrow恰好是把指定行设置为当前行。建议:先scrolltorow,再setrow。另外,scrolltorow到的行是不会高亮显示的,如果需要,.转载 2020-06-10 10:32:28 · 958 阅读 · 0 评论 -
PB9对自定义SQL语句的检测很奇怪
结论在PB9中,alter + update 组合语句需要注意分开写,两者之间加 go 也不行举例:create + insert 组合语句:SQLserver2008数据库执行成功PB9执行成功//语句一ls_sql = "create table T_student (~r~n" +& "[id] [tinyint] IDENTITY(1,1) NOT NULL,~r~n" +& "[stu_id] .原创 2020-06-04 10:48:36 · 306 阅读 · 0 评论 -
PB中CreateDirectory、Fileopen不成功返回-1
例:li_re = CreateDirectory( ls_dir )注意点: ls_dir中,间隔号是“\“反斜杠,而不是除号 “/”; 可以为绝对路径,也可以为相对路径,建议绝对路径; 最容易忽略的一点,一次只能向下建立一层目录AAA(D:\AAA),不能连续建立一层以上目录(D:\AAA\BBB),只能先建立AAA后再建立BBB。 ...原创 2020-03-31 17:42:13 · 1342 阅读 · 0 评论 -
PB datawindow 数据窗口列项突破char字符串长度为255的限制
很多时候我们需要对从数据库中取出长字符串,但是PB里datawindow默认最大只能取255个字符,哪怕直接修改editsource也不能突破255限制。经过探索,亲测以下方法可行。1、首先,数据库表(标量值函数也可以)T_chcker中,某字段cmemo的长度需要超过255,例如设为varchar(2000),如下图:图1.数据库字段长度2、数据源连接属性里的Synt...原创 2019-11-13 09:32:48 · 1807 阅读 · 0 评论 -
powerbuilder IDE的智能提示或补全
顶部菜单栏--> Design--> Options...--> AutoScript原创 2017-07-07 11:47:59 · 2832 阅读 · 0 评论 -
dw.find,如果参数endrow 小于 startrow,会出现倒序查询
//dw.find,如果参数endrow小于startrow,会出现倒序查询stringls_cvencode,ls_cinvcodelongll_row,rtn,ll_rowcountdoubleld_pricell_row=1ll_rowcount=dw_2.rowcount()do ll_row=dw...原创 2017-06-28 19:43:31 · 628 阅读 · 0 评论 -
PB导出图片到指定目录
//PB导出图片到指定目录integer li_FileNumstring ls_imgID, ls_pathblob blob_imglong ll_rowcount, row, ll_serialinteger li_resultli_result = GetFolder( "图片存放路径", ls_path )dw_imgs.settransobject(sqlca)ll_原创 2017-06-28 18:29:10 · 1641 阅读 · 1 评论 -
PB关于字符串按照一定输入格式、规则检测(正则表达式)
在PB中使用正则表达式:matchw(string str,string pattern)比如:验证某个邮箱格式是否正确 代码exp:string ls_matchstring ls_email_addressls_match = "^[A-Z,a-z,0-9,'_']+@[A-Z,a-z,0-9]+\.com?$" //正则表达式规则ls_emai原创 2017-06-28 18:21:23 · 4167 阅读 · 1 评论 -
dw删除某行 和 撤销删除某行
//假删除long ll_rowll_row = dw_2.getrow()if ll_row 0 then dw_2.rowsmove(ll_row,ll_row,primary!,dw_2,1,delete!)end if//撤销删除long ll_currowll_currow = dw_2.getrow()if ll_currow = 0 then原创 2017-06-28 18:10:44 · 1484 阅读 · 0 评论 -
PB改好一个版本快速复制到别的版本PBL上去
通过它,可以把一个pbl下的多个对象复制到另一个版本的pbl下。原创 2017-06-28 18:01:42 · 1972 阅读 · 0 评论 -
PB如何禁止拖动带title标题的response窗口
有时候,在PB工程中会有这样的场景:新弹出的窗口是response类型,很大几乎覆盖原来窗口,但是期望它不能被移动。在这个窗口下新建一个事件如下图,以及代码:IF hittestcode = 2 THEN RETURN 1注:hittestcode的值所代表含义如下: 标题:2 最小化:8 最大化/恢复:9 关闭:20 图标:3 左原创 2017-06-28 17:55:16 · 1125 阅读 · 0 评论 -
在dw的itemchanged事件里面,修改当前参数data
原则上,在datawindow的itemchanged这个事件中对这三个自带参数:dwo、row、data,是不能修改的,但是我们可以用post的方式对其进行修改,曲线救国,如下情形:这里的wf_add_inv(row,data,dwo_name)函数放在dw的itemchanged事件中,并接受了其三个参数:dwo、row、data,dw_2.post原创 2017-06-28 19:45:54 · 1707 阅读 · 0 评论 -
PB使用系统的计算器(其他的小程序也类似)
//PB使用系统的计算器(其他的小程序也类似)string ls_fileExists, ls_fileExists2boolean ls_Exists, ls_Exists2ls_fileExists='c:\windows\calc.exe'ls_fileExists2 = 'C:\Windows\system32\calc.exe'ls_Exists=fileExists(ls_f原创 2017-06-30 18:26:58 · 1323 阅读 · 0 评论 -
对datawindow里的dddw里的子datawindow过滤
对dw_1里的 edit属性为 dddw 字段里的子dw过滤,增加 child.setsqlselect(ls_oldsql) 是为了避免如果下次还有查询,免得把上次的查询条件带过来datawindowchild childstring ls_oldsqlif dw_1.getchild("ht_ly_depcode",child) = 1 then child.settra原创 2017-07-07 11:24:51 · 530 阅读 · 0 评论 -
PB开发过程中如何search查中文字符内容
这个checkbox勾上就可以search查找中文字符了原创 2017-07-07 11:37:52 · 2374 阅读 · 0 评论 -
PB中dw合并相同内容的行
效果如下图:========================================================================1、在这里调出该设置2、把需要合并的列加入进去。注意这里加进去的三个列的逻辑关系,一个列与上下行内容不同就会带着另外两个列开新行...原创 2017-07-07 11:56:08 · 1441 阅读 · 0 评论 -
动态创建dw的时候运行失败及列名选择
动态创建dw的时候,务必先把SQL语句通过新建一个dw模拟一下,看看生成的列名是不是有特殊的情况,比如动态创建dw的sql语句类似为:select ...cinvcode from (select ... from ...)aleft join inventory,当表别名a在数据库中没有的时候,做:ls_cinvcode = dw.object.cinvcode[row]...原创 2017-07-07 12:05:12 · 341 阅读 · 0 评论 -
关于数据库里的值是0.05,通过dw取出来是0.049999的尾差问题
如果数据库表里的字段属性是float,那么PB连接数据库表的时候,float会转成number,这时候对dw取数(dw.getitemdecimal或者dw.object.iprice[row]),会得到有尾差的数如:数据库的表 test 里的字段 iprice 的属性是float,值0.05dw.retrieve()ld_price =原创 2017-07-07 12:15:29 · 912 阅读 · 0 评论 -
sharedata简介和实例 dw_1.sharedata(dw_2)
若:dw_1.sharedata(dw_2)dw_2.sharedata(dw_3)所有对其中一个dw的内容修改(如setitem、filter)将会影响到别的两个dw;但是如果是对sql source修改(如调用全局函数gf_add_where来增加条件)则只能在dw_1上修改才有效,以最早的dw_1为主的。1、dw_2.sharedata(dw_3)--原创 2016-09-11 17:54:42 · 3395 阅读 · 0 评论 -
两个dw之间复制某一行数据
两个dw之间复制某一行数据方法一:rowscopy(),只限于列名、顺序、列数都相同的两个dw方法二:当遇到列名、顺序、列数不全部相同的两个dw唉这个就麻烦了,需要2个dw,分别为dw_1、dw_2,且dw_2中必定包含dw_1中所有列。上代码://-------------------------------------------------------------------------原创 2016-04-18 17:00:00 · 1194 阅读 · 0 评论 -
PB程序中如何测试网络连接是否中断?(实现Ping命令)
使用connect using sqlca连接数据库,如果和服务器网络不通,会等待很长时间(大约30~60秒) 通过Windows自带的icmp.dll,可以对服务器进行Ping,在很短时间内即可判断网络是否连通。我将网上的一个例子封装为类n_cst_ping,来简化调用过程。forward global type n_cst_ping from nonvisualobject end t转载 2017-02-28 12:42:31 · 3196 阅读 · 0 评论 -
函数、事件全紫色、紫白色、全白色是啥意思
紫色:祖先窗口有内容紫白色:本窗口和祖先窗口都有内容白色:祖先对象无内容,本窗口(对象)有内容前面没有这个图标的才是没有代码的原创 2016-04-19 09:53:16 · 793 阅读 · 0 评论 -
datawindow在调试的时候retrieve不出来的原因
这种情况大概有2个常见原因:1、可能是连接的数据库有问题2、可能是datawindow的retrieve参数和数据库中的参数类型不同原创 2016-04-18 17:17:29 · 638 阅读 · 0 评论 -
自定义对象的属性增加
只要在自定义对象的声明实例变量处添加 变量 就能 自动地 在属性栏出现(下图):并且,什么类型变量自动对应什么编辑格式(int对应单行数字编辑框,string对应单行文本编辑框,boolean对应单选框)原创 2016-04-18 16:43:17 · 349 阅读 · 0 评论 -
如何快捷查看有关datawindow以及其下控件的属性
有时候我们在获取(Describe)或者修改(Modify)一个控件或对象的某个属性,比如visible属性,但是我们忘了怎么写,那我们就可以借用Datawindow Syntax这个工具来看:底下还有Exp例句参考哦~原创 2016-04-18 16:39:43 · 522 阅读 · 0 评论 -
欢迎使用优快云-markdown编辑器
数据库字段内容有NULL或空,在PB中判断时如何处理代码块PB代码://显示已审核 if li_i1 = 1 then ls_filter1 = ls_filter1+" (cchecker <> '' and (not isnull(cChecker) )) or " end if //显示未审核 if li_i2 = 1 then ls_filter1 = ls_filter1+原创 2016-04-18 16:32:59 · 220 阅读 · 0 评论 -
rollback写在messagebox
//rollback写在messagebox前面,避免未按下‘确定’按钮时的数据库锁死 rollback using sqlca; MessageBox("SQL error", SQLCA.SQLErrText+'~r~n'+'这封邮件'+"(采购订单号"+ls_cvouchid+")"+'发送成功,但是在数据库中标记失败!'+'~r~n'+'请检查数据库连接是否正确 或者 导入原创 2016-04-18 16:28:05 · 259 阅读 · 0 评论 -
在工程里寻找各种对象(如:右键菜单pop1,在menus里面寻找)
要充分利用PB的File——>Open…原创 2016-04-18 16:24:42 · 300 阅读 · 0 评论 -
数据窗口对象里面列的格式复制
有时候,我们需要把一个dw中的一些对象的显示格式做一个统一,比如几行列的格式:要把红色的那列的格式(字体、背景色、边框)变得和前面蓝色的那一列一样,只需要:1、按住ctrl键,先选中蓝色那列,然后选中红色那列;2、再依次点击工具栏处的,即可原创 2016-04-18 16:22:59 · 382 阅读 · 0 评论 -
在messagebox()里回车换行
messagebox("","1" + char(13) +"2") //char(13)即messagebox()里的回车,或者能用'~r~n' 一定要引号引起来messagebox("","1" + '~r~n' +"2")原创 2016-04-18 16:17:49 · 5468 阅读 · 0 评论 -
PB发布程序需要的运行库文件
或者把下列文件拷贝到发布的.exe文件同一个目录下原创 2016-04-18 16:16:27 · 1592 阅读 · 0 评论 -
事件 带参数 和 不带参数 的执行代码
事件 带参数 和 不带参数 的执行代码比如,uo_search.postevent(clicked!) ,此时的clicked()事件,若有参数则必须传入参数,同时也会按需求返回数值然而,uo_search.postevent(“clicked”) , 此时的clicked()事件,直接执行事件里面的代码,无需带参数原创 2016-04-18 17:14:11 · 548 阅读 · 0 评论 -
pb中的连等应用
pb中的连等应用这段代码……一时间脑子搭牢了怎么也看不懂,请教师傅点拨,他话还没说完说完就豁然开朗了。豪蠢啊我T_Tuo_add.enabled = gf_setauth(is_auth_new) = 1//其实是‘uo_add.enabled’等于后面gf_setauth(is_auth_new) = 1的表达式的值是否为true或者false原创 2016-04-18 17:12:05 · 290 阅读 · 0 评论 -
PB字符串处理函数
Fill()功能建立一个由指定字符串填充的指定长度的字符串。语法Fill ( chars, n )参数chars:string类型,指定用于重复填充的字符串n:long类型,指定由该函数返回的字符串的长度返回值String。函数执行成功时返回n个字符的字符串,该字符串以参数chars中的字符串重复填充而成。如果参数chars中的字符个数多于n个,那么使用chars字符串的前转载 2016-04-18 18:25:45 · 7707 阅读 · 0 评论 -
dw在retrieve的时候就截取字符串
在dw的sql source里面,可以直接运用:SELECT LEFT(cname,CHARINDEX('#',cname)) as seedFROM KA_USER CHARINDEX是和pos差不多的函数,用于SQL数据库如:cname字段内容为:abcde#fgCHARINDEX('#',cname)返回6(字符原创 2016-04-18 18:22:25 · 522 阅读 · 0 评论 -
dw某一列 能合并重复行,形成 总——分 的样式
原创 2016-04-18 18:17:10 · 449 阅读 · 0 评论 -
对象文件已过期,必须转换为当前版本
full building 一下。。。原创 2016-04-18 18:11:28 · 558 阅读 · 0 评论 -
在dw的itemchanged事件里面,修改当前参数data
原则上,在datawindow的itemchanged这个事件中对这三个自带参数:dwo、row、data,是不能修改的,但是我们可以用post的方式对其进行修改,曲线救国,如下情形:这里的wf_add_inv(row,data,dwo_name)函数放在dw的itemchanged事件中,并接受了其三个自带参数:dwo、row、data。当我们要修改第row行某一列的值时,可以用:原创 2016-04-18 18:01:51 · 1040 阅读 · 0 评论 -
对datawindow里的dddw里的子datawindow过滤
对dw_1里的 edit属性为 dddw 字段里的子dw过滤,增加 child.setsqlselect(ls_oldsql) 是为了避免如果下次还有查询,免得把上次的查询条件带过来datawindowchild childstring ls_oldsql//原料领用部门if dw_1.getchild("ht_ly_depcode",child) = 1 then child.sett原创 2016-04-18 17:53:41 · 843 阅读 · 0 评论