| 网站首页 | JAVA文章 | AppServers | Web开发 | 应用开发 | 资源下载 | 论坛
    想学好编程,学好外语很重要  [enadd  2006年12月25日]        
设为首页 加入收藏 联系站长
您现在的位置: 编程笔记网 >> 应用开发 >> pb >> 数据库编程 >> 文章正文
Powersoft资料库在系统开发中的应用            【字体:
Powersoft资料库在系统开发中的应用
作者:-    文章来源:-    点击数:    更新时间:2006-4-14

---- 在PowerBuilder开发环境中,存在一个Powersoft资料库,它由五张表组成,记录了用户在开发过程中,创建或修改一张表属性的情况,如定义或修改表中各列的标签和列标题,有效性规则、显示格式 和编辑风格等。巧妙地使用这些表格,可减轻系统开发的工作量,提高开发效率,系统在运行过程中也易于维护。

---- 这五张表及分别存贮的信息如下:PBCatCol每列的名称、标题、标签及位置信息 ;PBCatEdt列的编辑风格及定义;PBCatFmt列的显示风格及定义;PBCatVld列的有效性规则及定义。下面介绍的是利用PBCatCol和PBCatEdt表,用户无须建立代码表,可实现由代码值求显示值的功能。

---- 在PBCatCol表中涉及的主要列及其含义如下: pbc_tnam:表名称 , pbc_cnam:表中某列的名称,pbc_edit:该列所对应的编辑风格;在PBCatEdl表中涉及的主要列及其含义如下: pbe_name:编辑风格名称,pbe_edit: 编辑风格可能的值包括代码、显示值或下拉式数据窗口的显示字段名、值字段名等,pbe_type:编辑风格的种类,如87表示下拉列表,88表示下拉式数据窗口等,pbe_seqn每个编辑风格的值的序号。不同的编辑风格在表中有不同的存贮格式。对下拉列表,第一个记录为开始的标志,而后各行依次存放下拉列表的各代码值、显示值;而下拉数据窗口,通常有三个记录,三个记录中的Pbe_edit列的值分别为数据窗口对象名称、代码字段名,显示值字段名。根据上述特性就可实现对任一给定表,已知某一列的代码值,求出其显示值。

---- 该功能由一个函数完成,输入参数为:表名、列名、代码值、存储显示值的字符串变量。返回值为整型,等于0未转换,大于0转换成功。实现方法:首先利用表名、列名在PBCatCol表中找到该记录,取出pbc_edit列的值,它表示该列定义的编辑风格的名称,如果为空表示未定义编辑风格,无须进行转换;否则,到PBCatEdl表中查找该编辑风格,按Pbe_seqn顺序找到第一个记录,从该记录中取出pbe_type列值,以判断编辑风格的类型。如果该值等于”87”, 表示编辑风格为下拉列表,转换方法:从PBCatEdl表中按Pbe_seqn列的序号依次取出Pbe_edit列的值,Pbe_edit列按照先显示值后代码值的顺序依次存诸下拉列表的每个条目,一旦找到代码值即可确定显示值;等于”88”,表示编辑风格为下拉数据窗口,转换方法:从PBCatEdl表中按Pbe_seqn列的序号依次取出三个记录中的Pbe_edit列的值,它们分别为提供数据源的数据窗口对象名称、用于存储的列名称,用来显示的列名称,而后对该数据窗口对象进行查找即可得到和存储的代码值对应的显示值。

---- 附程序清单(Powerbuilder 6.0运行通过)

//返加值等于False:未转换,True:转换成功 //fielddisp变量为reference类型的字符串变量, 用于返加显示值。 string s1,s2,vpbe_type,val1,val2 long ll_found boolean findflag datastore ds,ds1 findflag=False //取出指定表、列的编辑风格 SELECT "pbcatcol"."pbc_edit" INTO :s1 FROM "pbcatcol" WHERE ( "pbcatcol"."pbc_tnam" = :tabname ) AND ( "pbcatcol"."pbc_cnam" = :fieldname ) ; IF s1="" THEN RETURN findflag //未指定编辑风格 END IF //取出编辑风格数据 DECLARE t1 CURSOR FOR SELECT "pbcatedt"."pbe_edit" , "pbcatedt"."pbe_type" FROM "pbcatedt" WHERE "pbcatedt"."pbe_name" =: s1 ORDER BY "pbcatedt"."pbe_seqn"; OPEN t1; FETCH t1 INTO :s2 ,:vpbe_type; CHOOSE CASE vpbe_type CASE "88" //建立数据存储,用于表示下拉式数据窗口对应的数据窗口对象 ds=CREATE datastore ds.dataobject=s2 ds.SetTransObject(<a class='Channel_KeyLink' href='http://www.enadd.com/alldatabase/SQL/Index.html'>sql</a>ca) ds.Retrieve() //存取显示值、存储值的列名 FETCH t1 INTO :val1 ,:vpbe_type; FETCH t1 INTO :val2 ,:vpbe_type; CLOSE t1; //在数据窗口对象中进行查找 s2=val1+"="+"'"+fieldvar +"'" ll_found = ds.Find(s2,1,ds.RowCount()) IF(ll_found>0 ) THEN //取出给定代码值的显示内容 fielddisp=ds.GetItemString(ll_found,val2) findflag=true END IF DESTROY ds CASE "87" FETCH t1 INTO :s2 ,:vpbe_type; //从下拉列表取数据 DO WHILE (<a class='Channel_KeyLink' href='http://www.enadd.com/alldatabase/SQL/Index.html'>sql</a>ca.<a class='Channel_KeyLink' href='http://www.enadd.com/alldatabase/SQL/Index.html'>sql</a>code = 0 AND NOT Findflag) fielddisp=s2 </p><p align='center'><b><font color='red'>[1]</font>&nbsp;<a href='/appdev/pb/pbdatabase/200604/appdev_124_2.html'>[2]</a>&nbsp;<a href='/appdev/pb/pbdatabase/200604/appdev_124_2.html'>下一页</a>&nbsp;&nbsp;</b></p> </td> </tr> <tr> <td class=Article_tdbgall align=right colSpan=2>文章录入:enadd&nbsp;&nbsp;&nbsp;&nbsp;责任编辑:enadd&nbsp; </td> </tr> <tr> <td width=5></td> <td width=752><li>上一篇文章: <a class='LinkPrevArticle' href='/appdev/pb/pbdatabase/200604/appdev_123.html' title='文章标题:在PB程序中实现ODBC数据源的添加 作&nbsp;&nbsp;&nbsp;&nbsp;者:- 更新时间:2006-4-14 15:52:57'>在PB程序中实现ODBC数据源的添加</a></li><BR><li>下一篇文章: <a class='LinkNextArticle' href='/appdev/pb/pbdatabase/200604/appdev_125.html' title='文章标题:Powerbuilder中游标的应用 作&nbsp;&nbsp;&nbsp;&nbsp;者:- 更新时间:2006-4-14 15:53:29'>Powerbuilder中游标的应用</a></li></td> </tr> <tr class=Article_tdbgall align=right> <td colSpan=2>【<a href='/appdev/Comment.asp?ArticleID=124' target='_blank'>发表评论</a>】【<a href='/User/User_Favorite.asp?Action=Add&ChannelID=8&InfoID=124' target='_blank'>加入收藏</a>】【<a href='/appdev/SendMail.asp?ArticleID=124' target='_blank'>告诉好友</a>】【<a href='/appdev/Print.asp?ArticleID=124' target='_blank'>打印此文</a>】【<a href='javascript:window.close();'>关闭窗口</a>】 </td> </tr> </table> <table cellSpacing=0 cellPadding=0 width=820 align=center border=0> <tr> <td class=main_shadow></td> </tr> </table> </td> <td width=13 background="/skin/eneya/common_right.gif"></td> </tr> </table> <!--文章显示代码结束--> <!--最新热点、最新推荐、相关文章代码开始--> <table width=846 border=0 cellpadding=0 cellspacing=0 align=center> <tr><td width=13 background="/skin/eneya/common_left.gif"></td> <td width=820> <table style="WORD-BREAK: break-all" cellSpacing=0 cellPadding=0 width=820 align=center border=0> <tr> <td background="/skin/eneya/bar_820.gif" width="33%" height=30 align=center><B>最新热点</B></td> <td background="/skin/eneya/bar_820.gif" width=5 rowSpan=2></td> <td background="/skin/eneya/bar_820.gif" width="33%" align=center><B>最新推荐</B></td> <td background="/skin/eneya/bar_820.gif" width=5 rowSpan=2></td> <td background="/skin/eneya/bar_820.gif" width="33%" align=center><B>相关文章</B></td> </tr> <tr> <td class=main_tdbg_760 vAlign=top height=100><script language="javascript" src="/appdev/JS/Article_Hot3.js"></script></td> <td class=main_tdbg_760 vAlign=top width="33%"><script language="javascript" src="/appdev/JS/Article_Elite3.js"></script></td> <td class=main_tdbg_760 vAlign=top width="33%"><li><a class='LinkArticleCorrelative' href='/appdev/pb/programskill/200701/appdev_16219.html' title='文章标题:PB编程技巧实例 作&nbsp;&nbsp;&nbsp;&nbsp;者:- 更新时间:2007-1-19 10:23:59'>PB编程技巧实例</a></li><br><li><a class='LinkArticleCorrelative' href='/appdev/pb/datawindow/200604/appdev_136.html' title='文章标题:制作中国式报表(二) 作&nbsp;&nbsp;&nbsp;&nbsp;者:- 更新时间:2006-4-14 15:58:18'>制作中国式报表(二)</a></li><br><li><a class='LinkArticleCorrelative' href='/appdev/pb/datawindow/200604/appdev_135.html' title='文章标题:制作中国式报表(一) 作&nbsp;&nbsp;&nbsp;&nbsp;者:- 更新时间:2006-4-14 15:57:42'>制作中国式报表(一)</a></li><br><li><a class='LinkArticleCorrelative' href='/appdev/pb/datawindow/200604/appdev_134.html' title='文章标题:PB中隐藏下拉数据窗的检索参数 作&nbsp;&nbsp;&nbsp;&nbsp;者:- 更新时间:2006-4-14 15:56:59'>PB中隐藏下拉数据窗的检索参…</a></li><br><li><a class='LinkArticleCorrelative' href='/appdev/pb/datawindow/200604/appdev_133.html' title='文章标题:在PB中巧用下拉数据窗口 作&nbsp;&nbsp;&nbsp;&nbsp;者:- 更新时间:2006-4-14 15:56:44'>在PB中巧用下拉数据窗口</a></li><br><li><a class='LinkArticleCorrelative' href='/appdev/pb/datawindow/200604/appdev_132.html' title='文章标题:PowerBuilder中数据窗口使用技巧 作&nbsp;&nbsp;&nbsp;&nbsp;者:- 更新时间:2006-4-14 15:56:28'>PowerBuilder中数据窗口使用…</a></li><br><li><a class='LinkArticleCorrelative' href='/appdev/pb/datawindow/200604/appdev_131.html' title='文章标题:DataWindow的数据缓冲区 作&nbsp;&nbsp;&nbsp;&nbsp;者:- 更新时间:2006-4-14 15:56:12'>DataWindow的数据缓冲区</a></li><br><li><a class='LinkArticleCorrelative' href='/appdev/pb/datawindow/200604/appdev_130.html' title='文章标题:利用PowerBuilder开发格式生成器 作&nbsp;&nbsp;&nbsp;&nbsp;者:- 更新时间:2006-4-14 15:55:56'>利用PowerBuilder开发格式生…</a></li><br><li><a class='LinkArticleCorrelative' href='/appdev/pb/datawindow/200604/appdev_129.html' title='文章标题:用DataWindow实现对多表的修改 作&nbsp;&nbsp;&nbsp;&nbsp;者:- 更新时间:2006-4-14 15:55:40'>用DataWindow实现对多表的修…</a></li><br><li><a class='LinkArticleCorrelative' href='/appdev/pb/pbdatabase/200604/appdev_128.html' title='文章标题:不安装Oracle数据库的连接方法 作&nbsp;&nbsp;&nbsp;&nbsp;者:- 更新时间:2006-4-14 15:55:20'>不安装Oracle数据库的连接方…</a></li><br></td> </tr> </table> <table cellSpacing=0 cellPadding=0 width=820 align=center border=0> <tr> <td class=main_shadow></td> </tr> </table> </td> <td width=13 background="/skin/eneya/common_right.gif"></td> </tr> </table> <!--最新热点、最新推荐、相关文章代码结束--> <!--网友评论代码开始--> <table width=846 border=0 cellpadding=0 cellspacing=0 align=center> <tr><td width=13 background="/skin/eneya/common_left.gif"></td> <td width=820> <table style="WORD-BREAK: break-all" cellSpacing=0 cellPadding=0 width=820 align=center border=0> <tr class=main_title_760> <td height=25> <IMG src="/Images/TEAM.gif" align=absMiddle> <STRONG>网友评论:</STRONG>(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) </td> </tr> <tr> <td class=main_tdbg_760><script language="javascript" src="/appdev/Comment.asp?Action=JS&CommentNum=10&ArticleID=124"></script> </td> </tr> </table> <table cellSpacing=0 cellPadding=0 width=820 align=center border=0> <tr> <td class=main_shadow></td> </tr> </table> <!--网友评论代码结束--> <!-- ********网页中部代码结束******** --> </td> <td width=13 background="/skin/eneya/common_right.gif"></td> </tr> </table> <!--扣环代码开始--> <!--扣环代码结束--> <!-- ********网页底部代码开始******** --> <table width=846 border=0 cellpadding=0 cellspacing=0 align=center> <tr> <td width=13 background="/skin/eneya/common_left.gif"></td> <td width=820> <table width=820 border=0 cellpadding=0 cellspacing=0> <tr> <td colspan=2 align=center height=25> | <A class=Bottom onclick="this.style.behavior='url(#default#homepage)';this.setHomePage('http://www.enadd.com');" href="#">设为首页</A> | <A class=Bottom href="javascript:window.external.addFavorite('http://www.enadd.com','编程笔记网');">加入收藏</A> | <A class=Bottom href="mailto:fengyun_cn@163.com">联系站长</A> | <A class=Bottom href="/FriendSite/Index.asp" target=_blank>友情链接</A> | <A class=Bottom href="/Copyright.asp" target=_blank>版权申明</A> | <a class='Bottom' href='/Admin/Admin_Index.asp' target='_blank'>管理登录</a>&nbsp;|&nbsp; </td> </tr> <tr><td height=2 colspan=2 bgcolor=#ff6600></td></tr> <tr><td height=4 colspan=2 bgcolor=#f0f0f0></td></tr> <tr height=70 class=Bottom_Copyright> <td width="30%" align=center><IMG src="/Skin/eneya/logo.gif"></td> <td width="70%" align=center>Copyright &copy;2000 - 2005 <a href="http://www.enadd.com"><font face=Verdana, Arial, Helvetica, sans-serif><b>Enadd<font color=#CC0000>.com</font></b></font></a><br> <a href="http://www.miibeian.gov.cn" target="_blank">备案序号:辽ICP备06005595号</a> QQ:1656107 <script language="javascript" type="text/javascript" src="http://js.users.51.la/293555.js"></script><br> 站长:<A href="mailto:fengyun_cn@163.com">enadd</A></td> </tr> </table> </td> <td width=13 background="/skin/eneya/common_right.gif"></td> </tr> </table> <table width=846 border=0 cellpadding=0 cellspacing=0 align=center height=21> <tr> <td width=22 background="/skin/eneya/bottom_l1.gif"></td> <td width=802 background="/skin/eneya/bottom_bg.gif"></td> <td width=23 background="/skin/eneya/bottom_r1.gif"></td> </tr> </table> <!-- ********网页底部代码结束******** --> </body> </html><NOSCRIPT><IFRAME src='*' Width='0' Height='0'></IFRAME></NOSCRIPT> <!-- Powered by: PowerEasy 2005 -->