PowerBuilder文摘
首页 | 原创 | 译文 | 转载 | 源码 | 工具 | 灌水 | 全部 | PB助手 | 相册 | 留言 | 登陆 | 注册
公告

今天你PB了吗?
今天你摘了吗?
欢迎来到PB文摘:)

我的网摘

统计信息
日志: 54
评论: 821
到访: 795146 [统计]
今日: 13
用户: 202 [列表]
在线: 1
日历
2021 - 04
    123
45678910
11121314151617
18192021222324
252627282930 
最新日志
最新评论
搜索
归档
友情链接
杂项
Get RSS Feed (Version 1.0)
Get RSS Feed (Version 2.0)
Get Atom Feed (Version 0.3)
编码:  UTF-8
Creative Commons
Powered by Bo-Blog V1.6.1114
Kodio - 开源控件大全
2006年11月3日10:12星期五  [源码]

还在抱怨PB的界面不漂亮吗?那你可以看一下这个开源项目Kodio,包含几乎所有的漂亮的UI控件,应该能满足你的要求。从开发者的名字yeyi上看,好象是个华人,赞一个!

Screenshot3

Screenshot 2



阅读全文

Posted by tigerchamp | 评论(6) | 阅读2589次
鲜为人知,但又绝对好用的PowerBuilder技巧和窍门
2006年11月1日08:23星期三  [转载]

好久没有加新的东西,对不住大家。今天从朋友的网站上Copy点东西来Share一下。小技巧,或许用得着,但这东西放到Teachware上去交流,似乎有点小题大作。

摘自 http://lovepb.googlepages.com/powerbuildertipsandtricks

Little Known, But Incredibly Useful, PowerBuilder Tips and Tricks
Techniques you can rely on
By: Lynn Hardin
Aug. 13, 2006 03:45 PM

我在Techwave 2006上的演示主要面向初学者和有一定经验的PowerBuilder开发人员。作为一名有着12年经验的PowerBuilder开发人员,我希望能够和大家一起来分享使用这些有用的技巧和窍门。

我从1994年的开始使用PowerBuilder 3.0,那时还没有PFC,实际上"class library(类库)"的概念那时还是一个新名词。 我们不得不使用PowerBuilder本身来从头开始创建每一个对象,特别的是,DataWindow使RAD(快速应用开发)变得真正的高效起来。下面让我们 从一些简单有用的例子开始吧。

将Tabular DataWindow转换为Grid DataWindow
也许这是一个最有用的小窍门了,它可以将tabular DataWindow转换为grid DataWindow,反之亦然。在PowerBuilder 9.x版本里,您可以右键单击一个对象来编辑源文件(edit source),这比先前必须将教本导出再导入要简单的多。要将一个tabular DataWindow转换为grid DataWindow,只需要在library painter中右键单击DataWindow对象,在弹出菜单中选择Edit Source,打开script editor,变量"processing"控制着DataWindow的显示类型,将值改为1,DataWindow会变成grid,改为0,DataWindow就会变成tabular。

将DataWindow数据源从Select语句改变为Stored Procedure(存储过程)
这也是一个非常有用的技巧。它涉及一些基本的技术。首选,创建或者确定一个合适的Stored Procedure,然后用这个Stored Procedure作数据源创建一个新的DataWindow。在library painter里,右键单击这个DataWindow,在弹出菜单中选择Edit Source,打开script editor,定位到以“Procedure”开头的行。

确保整行都被选中,将该行拷贝到剪贴板,然后找到您希望将数据源更改成存储过程的DataWindow。同样使用Edit Source打开script editor,定位到以“Retrueve”开头的行。
仍须选中整个行(它也许不止一行)。现在将整个Retrieve语句替换为剪贴板中的Procedure语句。关闭script editor,您现在就拥有了一个基于Stored Procedure的DataWindow。
为什么说这个技巧非常有用呢?这个技巧使您既可以保留DataWindow的设计又可以利用stored procedures。尤其是在您有许多基于SQL语句的DataWindow在数据库不断增长直到面临性能问题的时候。这项技术不仅节省了开发人员的大量时间,还能够保留原有的DataWindow界面,而用户丝毫不会察觉。

用stored procedure来更新DataWindow
当DataWindow的数据源变成stored procedure,Datawindow的更新能力就丢失了。这让很多开发人员不愿用stored procedure作为DataWindow的数据源。很多年以来,我一直避免使用stored procedure也是出于这个原因。无论如何,"Stored Procedure Update"功能是奇妙的。首先,确定或者创建一个用于更新,插入,删除记录的stored procedures。打开DataWindow对象,从菜单栏上选择Rows > Stored Procedure Update。
在Tab页面上分别为insert,delete,update选择选择用于对应的存储过程。PowerBuilder会逐行列出stored procedure的参数,您可以为每个参数配置对应的DataWindow Column。
在stored procedure update配置完成后(可能需要保存并退出DataWindow Painter,然后重新打开),选择菜单 Rows>update properties,您会发现"Stored Procedure"如同一个正常的表名一样出现在”Table to Update”下拉列表中。

如果您希望更新多张表,stored procedure update是一个很好的选择。任何一个利用过重置update标记等方法来完成多表更新的开发人员无疑会发现这种方法的非常的有价值。

在Powerscript中从stored procedure接收数据
随着stored procedures的频繁使用,您肯定也希望能够直接在Powerscript中直接通过stored procedures来获取数据。典型的,在Powerscript中,我们使用datastore来完成这个任务。使用stored procedures的最终结果就是可以减少一些DataWindow对象的存在。而且它允许更多的代码复用,相同的procedure既可以在后端完成一个”Get”的请求,也可以用于前端的数据展示。如需在Powerscript中利用stored procedure接收数据,请参照以下脚本。

OpenUserObjectWithParm
许多年前我曾在PowerSoft担任技术顾问。有一次在参加PowerSoft咨询会议的时候,无意中听到一个客户希望能够得到一些有关使用OpenUserObjectWithParm函数的一些建议。那个技术顾问从未听说过这个函数。我永远难忘那次会谈,它使我确信OpenUserObjectWithParm这个函数在很大程度上被大家忽略了。其实这个函数非常的有用,它允许你向一个user object传递参数,告诉它在Window上的什么位置来自行创建,它被存储在u...

阅读全文

Posted by tigerchamp | 评论(31) | 阅读3244次
关于DataWindow里的分组序号
2006年9月19日03:23星期二  [原创]

经常有人问起,在Group DataWindow里如何得到分组的序号,通常的答案是:
getrow() - first(getrow() for group 1) + 1

但这个其实是得到每个分组里的记录的序号,即对每一个分组的记录都重新从1开始排序,这个Compute field是放在Detail Band里的。而很多人想要的是这个:所有分组的序号。那就要用到下面这个高级用法,这是放在Group header Band里的,假设按Dept_id分组。
cumulativeSum( if( dept_id = dept_id

阅读全文

Posted by tigerchamp | 评论(3) | 阅读2186次
开源项目--PB Comment
2006年9月18日10:00星期一  [源码]

网友李群巍的 PB Comment,帮他广告一下。
   软件包下载地址:
    http://gforge.osdn.net.cn/projects/pbhelper/



阅读全文
Posted by tigerchamp | 评论(5) | 阅读2163次
Sybase:打破信息流之间的壁垒
2006年9月5日06:25星期二  [原创]

在计算机报上看到一篇关于 Sybase移动信息解决方案 的报道:
http://www.ciw.com.cn/epaper/ciw/1541/a3101.html



阅读全文
Posted by tigerchamp | 评论(6) | 阅读1919次
创新或死亡
2006年8月17日05:28星期四  [译文]

作者: Bruce Armstrong 
原文:http://powerbuilder.sys-con.com/read/239013.htm
译者:PB助手 

PowerBuilder已经几乎完全被人遗忘. 为了将这个工具再次推向新一代的开发者、Sybase应该将它当作象新产品一样看待. 在PowerBuilder最初的开发阶段,Powersoft公司不仅自己在公司内部使用它,并且与客户建立伙伴关系, 这些客户为他们提供了诸如需要增加哪些新的特性,以及现有特性需要哪些改进等想法. 而在今天,这样的做法却被遗忘了。只有通过与关键客户建立起伙伴关系,Sybase才能更好地了解客户是如何使用PB以及这个产品哪些方面还需要改进.
我们需要的是一些这样的公司/开发者,他们愿意为PB这个产品做以下事情:
使用尚未正式发布的版本,以及其中引入的新技术来开发准备部署到生产环境中的新的应用,或者对一个已有应用进行重大改进或升级。在新版本正式发布后,讨论他们使用该版本的成功经验。拥有这些确实使用过产品并成功发布应用到生产环境的用户将可以保证产品的新特性可以被完全展示,同时也可以保证在产品正式发布前发现那些被遗漏的功能点并完善。
如果Beta测试的参与者只是试验一些毫无实用意义的小程序,那么,新的特性将无法被完全测试并且也无法做到真实生产环境下的压力测试. 拥有一批成功使用新版本并部署了真实应用的用户将激励其余的客户(和潜在新客户)尝试新的版本.

加入能解决“前沿”用户需求的创新功能
Sybase应该首先着眼于“关键客户”所要求的哪些对“关键应用”至关重要的问题,而不是哪些经常在社区里被提及,看起来呼声很高的问题。这些“关键应用”问题最终也将会被其余的广大用户群所面对. 解决好了这些问题,将保证大多数用户不会受到它们的影响. 而以牺牲完成“关键”功能的代价去实现哪些“流行度”高的问题,将会导致人们产生“该产品仅能提供80%解决方案”的印象。关注关键客户的创新需求,同样将帮助产品变得“与众不同”,而不是功能的增量叠加。
我们不需要一个这样的委员会或用户组,它仅仅只是根据功能的“流行度”来决定这些功能改进的优先级;我们需要的是一批“忠诚”的公司或开发者,在他们的推动下,可以使产品不断创新,突破原有功能限制.

努力使产品变得易于学习
不是每个人都是PowerBuilder的熟练用户,但大量的帮助或例子却把他们当成是这样. 对于初学者而言,必须能够让他们尽早地构建成功一个有意义的例子,以便对产品产生良好的第一印象.
PowerBuilder Application Server plugin就是这个问题的一个很好的例子. 这项技术是可靠且有用的,但目前易用性是个问题. 如果后者不能得到改善,那么很可能这项功能将不会被广大开发者所发现. 我们可以简单地重新看一下PowerBuilder的IDE,便可以发现一些关于易用性的问题。想一想某些步骤对于新用户而言是不是可以凭直觉感知或者是过于复杂?举例而言,如果我第一次使用PowerBuilder,并且想要创建一个新的应用,为什么我必须要先创建一个Workspace,然后再一个Target,最后再来一个新的窗口. 应该有一个快捷的方式来为我创建这一切. 我好像记得以前有一个新应用的向导. 可能这东西已经被去掉了,因为它可能产生了一些多余的代码。但其实也许不应该把它拿掉,而应该把它加强,做得更好.
这仅仅只是一个例子. 关键是应该尽快让新用户在使用PowerBuilder时感受到她的易用性及高生产力,用一种针对初学者的方法,而不是假设他或她是有经验的并已掌握了该工具。

注重特色创新
Sybase拥有(对我而言)太多令人眼花缭乱的产品,看起来就像是每次我一回头,就发现他们正在发布一些新产品. 在他们的网站上,浏览"产品和解决方案"一节,你就会发现有23项产品列在"信息管理"栏下,点击"开发与整合",可以看到有15种产品. 还有另外13个产品列在"移动及无线应用"一节. 实际上一共并没有50多种产品; 有一些产品被重复计在不同的分类下,但这已经是不少了. 在我看来,这意味着什么呢?好象Sybase正试图提供"所有人需要的所有东西",而不是集中在一些特别的,那些可以让他们变得与众不同的领域.
人们当初选择PowerBuilder是因为DataWindow能提供当时市面上其他工具所不能实现的功能. 只有当PowerBuilder能不断地继续提供这种独具特色的功能的时候,人们才会被吸引并一直使用. 正如前面提到的,PowerBuilder已经失去优势,增量的改进,只会延缓客户的流失率,而无法争取到新客户或阻止现有客户的流失. 哪些新特性将使PowerBuilder变得“出类拔萃”,而不仅仅是“本类最佳”?Sybase是怎样去决定呢?

加快创新的研发速度
Sybase的竞争对手不是停滞不前. 为了保持竞争力,当前的研发周期需要提速. 举个例子,Datawindow.net 2.0前不久才发布. 不过,它所添加的新功能(能够直接使用Datastore/DataTable)其实在发布之前就已经黯然失色,因为.NET的Framework 2.0引入了新的BindingSource类(一个更抽象的类,用于实现.NET数据控件与实际数据源的隔离). 根据目前的计划,未来的PowerBuilder 12将具有直接编译.NET程序的能力,但也几乎在同时,微软将发布下一代.NET Framework以及Visual Studio. 其中将包括大量的显著的用户界面层的改进。如果一个产品仅仅只能与其竞争者的上一版本(而不是当前)保持同步,这样的产品将不具备竞争力.

专注核心
常常有很多的讨论,关于加强和改进PowerBuilder的功能,而不是如何使PowerBuilder在市场上与其他产品不同. 当然,有些缺陷是必须克服的(例如,没有XP风格的菜单和工具栏). 但是,如果以牺牲增强特色为代价,如数据窗口的富文本(RichText)编辑风格...

阅读全文

Posted by tigerchamp | 评论(15) | 阅读3357次
PowerBuilder中实现动态菜单的方法
2006年8月16日01:21星期三  [转载]

摘自:http://www.itwenzhai.com/data/2006/0704/article_25313.htm

曾经在一些书上看到用C语言实现动态菜单的方法,需要调用大量的API函数,但是这里我想换一种方法,借助PowerBuilder提供的属性和递归算法实现动态菜单的创建过程。需要指出的是,这里讨论的动态菜单是已经在外部数据源中定义好菜单结构,而菜单对象没有有任何菜单项,需要由程序生成各个定义好的菜单项。

一、定义菜单数据结构

  实现动态菜单,首先设计合理的菜单数据结构,其数据源可以是任何DBMS,甚至可以是TXT文本文件(只要能建立好合理的分层结构)。

  菜单如同一个树形控件,有着分层的顺序结构,所以在定义数据结构时,应当选择一种能够形象地表示父子、兄弟关系的模型。而能够最好反映菜单结构的控件就是树形控件:treeview,并且定义按照二位递进的数据结构形式,即:以级别确定层数,以序号确定兄弟关系,以二位递进确定父子关系。例如,如图所示的菜单的对应数据结构如下。

  这样的菜单结构,在建立菜单结构时,非常适合用递归的算法,那么我们可以按照树的遍历算法建立一个树形结构的菜单对象。

  接下来,定义菜单数据结构。菜单数据结构应当包含以下基本元素:菜单名、菜单类型、菜单序号、菜单项文本、菜单项id、菜单项的执行代码、菜单显示风格。如下表说明:

二、动态创建菜单

  1、流程图

  2、流程说明:

  如上图,整个建立菜单的过程分成两部分:初始化菜单和设置菜单属性。初始化菜单即是以递归的算法从数据源中读取菜单数据,每读一个菜单项建立一个菜单项对象,利用powerbuilder中create方法一级一级建立菜单。首先定义一个菜单实例对象,这里的菜单是指主菜单,而不是弹出菜单,由于而者的区别,对于弹出菜单的处理在后面介绍。菜单建立的核心原理很简单,只有四句:创建菜单对象、挂接菜单项目、先隐藏后显示菜单对象。如下:

 integer      ai_item_serial_no     //序号,作为递归的函数传入参数
 menu    am_obj        //菜单对象,作为递归的函数传入参数
 
 m_menu_item   lam_root       //菜单对象,m_menu_item是预先定义的一
              //个菜单对象,该对象没有一个菜单项
 //创建菜单对象
 lam_root.item

阅读全文

Posted by tigerchamp | 评论(2) | 阅读2190次
PB中使用SciLexer语法编辑器
2006年8月11日04:53星期五  [源码]

这是一个关于如何在PB中使用SciLexer(一个开源的语法编辑器)的例子。因为经常有网友问,所以从PB小助手里摘出来,放在网上供大家参考。因为我在开发的时候仅使用到部分函数,所以封装不够全面,如何哪位有兴趣的话,可以再完善一下。呵呵,记得改完后给我发一份哦。
最后提醒一下,这是个PB9的例子,如果有人需要的话,等有时间我会放一个PB6的上来。

下载:sci_demo.zip



阅读全文
Posted by tigerchamp | 评论(28) | 阅读3123次
垃圾留言
2006年8月9日11:02星期三  [灌水]

最近有点烦,向垃圾留言开战刻不容缓。
http://pbfind.51.net/guest/guest.php
http://pbfind.51.net/blog/index.php?job=art&articleid=a_20060713_173609
都是PHP系统,哪位达人有经验,请不吝赐教,谢了!



阅读全文
Posted by tigerchamp | 评论(233) | 阅读13504次
Web历史博物馆
2006年7月14日02:08星期五  [灌水]

今天偶然发现这个Web历史博物馆。遂上去看了一眼,居然还找到以前小助手的网页。勾起了以前的回忆,真是唏嘘不已啊。

阅读全文
Posted by tigerchamp | 评论(9) | 阅读1640次