<?xml version="1.0" encoding="UTF-8" ?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/">
<channel rdf:about="http://www.pball.cn/pb/blog">
 <title>PowerBuilder文摘</title> 
  <link>http://www.pball.cn/pb/blog/index.php</link> 
  <description>我的网络收集</description> 
  <image rdf:resource="http://" /> 
<items>
<rdf:Seq>
<rdf:li resource="" /> 
<rdf:li resource="http://www.pball.cn/pb/blog/index.php" /> 
</rdf:Seq>
</items>
</channel>
<image rdf:about="http://">
<title>PowerBuilder文摘</title> 
<link></link> 
<url>http://</url> 
</image><item rdf:about='http://www.pball.cn/pb/blog/index.php?articleid=a_20100521_130632'>
<title>SAP收购Sybase</title> 
<link>http://www.pball.cn/pb/blog/index.php?articleid=a_20100521_130632</link> 
<description>
<![CDATA[ 
	<p>看到相关消息，上来发一篇吧，N久没有关注过Sybase了。。。</p><p><table border="0" cellspacing="0" cellpadding="0" width="100%"><tbody><tr><td id="box-vertical-left"></td><td id="box-content-container" valign="top"><table border="0" cellspacing="0" cellpadding="0" width="100%"><tbody><tr><td width="80%"><span id="box-content"><table cellspacing="0" cellpadding="0" width="100%"><tbody><tr><td><div class="htmlOnly"><p><link rel="stylesheet" type="text/css" href="http://www.sybase.com/css/HP_medallions_quicklinks-test.css" /></p><div id="HPMedallions"><h3>Sybase 董事长兼首席执行官程守宗先生致客户的公开信</h3><p><a id="&lid=ComputerwordlHonorsSybaseCustomers" title="Customerletter-Sybase_final_cn.pdf" href="http://www.sybase.com.cn/files/Legal_Docs/Customerletter-Sybase_final_cn.pdf" name="&lid=ComputerwordlHonorsSybaseCustomers" target="_blank" s_oidt="0" s_oid="http://www.sybase.com.cn/files/Legal_Docs/Customerletter-Sybase_final_cn.pdf">&gt; 详细内容</a>　　</p><h3>Sybase 董事长兼首席执行官程守宗先生致合作伙伴的公开信</h3><p><a id="&lid=ComputerwordlHonorsSybaseCustomers" title="partnerletter-Sybase_final_cn.pdf" href="http://www.sybase.com.cn/files/Legal_Docs/partnerletter-Sybase_final_cn.pdf" name="&lid=ComputerwordlHonorsSybaseCustomers" target="_blank">&gt; 详细内容</a>　　</p><h3>SAP将收购Sybase公司</h3><p><a id="&lid=NewDataImperativeBook" title="Learn more" href="http://www.sap.com/china/about/press/press.epx?pressid=13261" name="&lid=NewDataImperativeBook" target="_blank">&gt; 详细内容</a></p></div></div></td></tr></tbody></table></span></td></tr></tbody></table></td></tr></tbody></table></p>
	<br>   (<a href=http://www.pball.cn/pb/blog/index.php?articleid=a_20100521_130632 target=_blank> 网页浏览 </a>)
  ]]> 
</description>
</item><item rdf:about='http://www.pball.cn/pb/blog/index.php?articleid=a_20080118_113943'>
<title>用户反馈</title> 
<link>http://www.pball.cn/pb/blog/index.php?articleid=a_20080118_113943</link> 
<description>
<![CDATA[ 
	<p>很长时间没有再碰自己写的这个<a href="http://www.pball.cn/pb/blog/index.php?job=art&articleid=a_20061214_100104">小工具</a>了，一方面因为人变懒了，另一方面也因为目前很少用PB了，所以虽一直有升级的计划，却没有付诸行动。前几天突然收到2封来信，俺这颗沉寂的心又活动起来。时间是挤出来的，你们多PUSH我一点吧，呵呵。</p><p>1=====<br />您好！<br /> <br />         PB小助手的无用对象检索非常有用，但是实际测试时发现一些有用的DW对象也被列为无用，跟踪后发现如下问题：<br />         of_is_use_in_newadd函数中lstr_NewAdd.ObjCount的值并非该数组的最大值，导致漏查。截图见附件。本来应该检测203个对像的，结果只检测了6个。<br />         你看看有时间的话能否检查一下算法计数上是否有其他类似的遗漏问题，感谢你的无私奉献！<br /> <br />　　　　　　　　致<br />礼！</p><p>2====<br />您好！<br />      我经常使用这个小工具，感觉非常好，在查找无用对象时，能不能根据查找对象的列表，直接删除掉这些对象！！！<br />    还有为什么pb10的版本没有纳入到开源网站上？？<br /><br />  <br /><br />　　　　　　　　致<br />礼！<br /></p>
	<br>   (<a href=http://www.pball.cn/pb/blog/index.php?articleid=a_20080118_113943 target=_blank> 网页浏览 </a>)
  ]]> 
</description>
</item><item rdf:about='http://www.pball.cn/pb/blog/index.php?articleid=a_20080118_105745'>
<title>PB动态脚本解释器</title> 
<link>http://www.pball.cn/pb/blog/index.php?articleid=a_20080118_105745</link> 
<description>
<![CDATA[ 
	这篇文章看起来有点意思，或许可以在我的小助手里利用一下。<br /><br />摘自：<a href="http://blog.csdn.net/pbdesigner/archive/2007/03/31/1547706.aspx"><a href="http://blog.csdn.net/pbdesigner/archive/2007/03/31/1547706.aspx" target="_blank">http://blog.csdn.net/pbdesigner/archive/2007/03/31/1547706.aspx</a></a><br /><br />      当你看到VB、VFP等开发语言提供的强大的宏执行功能，是不是很羡慕呢？当你寻遍PB的帮助、关于PB开发的书籍或网站而不可得的时候，是不是感到有一丝的遗憾？如果你看到这篇文章，你应该感到振奋，因为你终于可以解决这个问题，而且解决问题的思路既是如此简单、代码既是如此简短。如果再加上你的智慧，应该比我的解决方法更漂亮。 <div><span>       </span>先让我们来了解一些基本知识。</div><div style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt"><span>一．</span>代码的载体</div><div style="TEXT-INDENT: 21pt">在PB中，只有三个地方可以存放代码，那就是函数、事件、属性。这里所指的函数包括有返回值的通常意义下的函数和无返回值的过程以及声明的WINAPI函数，所指的事件指在对象中定义的处理程序，所指的属性指PB系统属性之外的实例变量、共享变量、全局变量。函数和事件是可以用来调用执行的，属性则只能用来赋值和取值。通常我们是在函数或事件中编写代码。</div><div style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt"><span>二．</span>对象的创建</div><div style="TEXT-INDENT: 21pt">如果对象类型是已知的，可以使用CREATE objecttype 来创建对象，如果对象类型是动态的，可以使用CREATE USING objecttypestring来创建对象。</div><div style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt"><span>三．</span>对象函数的调用方式</div><div><span>       </span>如果调用一个已知类型的对象的函数或事件，通常采用静态模式，也可采用动态模式，如果调用一个动态创建的对象的函数或事件，则必须采用动态模式，否则编译出错。采用动态模式调用函数是在函数前加dynamic 关键字。读者可查阅PB帮助。</div><div style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt"><span>四．</span>库文件的搜索</div><div style="TEXT-INDENT: 21pt">PB中用于编程的对象是保存在PBL、PBD、DLL中的，如果想要使库文件中的对象在应用程序运行时有效，常用的方法是直接将该PBL编译进去或者说使该PBL在库搜索列表中。如果需要在运行状态下改变库文件搜索列表，PB提供了SetLibraryList和AddToLibraryList两个函数。SetLibraryList函数只能在应用对象的open事件脚本中使用，否则应用程序会崩溃，AddToLibraryList为PB9新增的函数，用于将新文件加入到库文件搜索列表中，这两个函数都是只能在编译环境下有效。</div><div style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt"><span>五．</span>PB库文件的创建与销毁</div><div style="TEXT-INDENT: 21pt">PB提供了LibraryCreate函数用于创建库文件，提供LibraryDelete、FileDelete函数用于删除库文件。</div><div style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt"><span>六．</span>PB实体的导入</div><div style="TEXT-INDENT: 21pt">PB提供了LibraryImport函数用于根据对象语法创建PB实体并导入到库文件中，但该函数目前只支持数据窗口对象类型的导入。不过，PB提供了相应的WINAPI函数支持其它类型实体的导入，这些相关的WINAPI包括在PBORCX0.DLL中（不同的PB版本有不同的文件名称，如PBORC90.DLL、PBORC80.DLL）。有关实体的导入的WINAPI包括PBORCA_SessionOpen、PBORCA_SessionClose、PBORCA_SessionSetLibraryList、PBORCA_SessionSetCurrentAppl、PBORCA_CompileEntryImport等，读者可以到Sybase网站找ORCA Guide相应文章寻求支持。</div><div style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt"><span>七．</span>PB实体的查找</div><div style="TEXT-INDENT: 21pt">使用FindClassDefinition或FindFunctionDefinition或LibraryDirectory可以在库文件中查找PB实体是否存在，使用FindClassDefinition或FindFunctionDefinition性能要好。</div><div style="TEXT-INDENT: 21pt">以下讲开发思路。</div><div style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt"><span>一．</span>创建临时库文件</div><div style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt"><span>1.<span style="FONT: 7pt 'Times New Roman'">       </span></span>取临时目录作为库文件的存放目录</div><div style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt"><span>2.<span style="FONT: 7pt 'Times New Roman'">       </span></span>取待创建的临时库文件名称，保证不与已有文件重名</div><div style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt"><span>3.<span style="FONT: 7pt 'Times New Roman'">       </span></span>使用LibraryCreate函数创建临时库文件</div><div style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt"><span>二．</span>构造用于导入库文件的临时PB实体语法</div><div style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt"><span>1． </span>取临时PB实体名称，保证不与库文件列表中已有PB实体重名</div><div style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt"><span>2． </span>构造临时PB实体语法，区分函数和过程</div><div style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt"><span>三．</span>将临时PB实体导入临时库文件</div><div style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt"><span>1． </span>取库文件列表和应用对象所在pbl</div><div style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt"><span>2． </span>将实际不存在的库文件从库文件列表中删除，目的是使调用PBORCA_SessionSetLibraryList成功</div><div style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt"><span>3． </span>调用PBORCA_CompileEntryImport将临时PB实体导入临时库文件</div><div style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt"><span>四．</span>将临时库文件加入到库文件搜索列表</div><div style="MARGIN-LEFT: 21pt">1．调用AddToLibraryList加入新文件到库文件搜索列表</div><div style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt"><span>五．</span>创建临时PB实体所对应的对象并调用其函数以执行动态脚本</div><div style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt"><span>1． </span>使用CREATE USING objecttypestring语句创建对象</div><div style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt"><span>2． </span>通过动态调用对象的of_exec函数执行动态脚本，区分返回值类型</div><div style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt"><span>六．</span>销毁所有临时对象</div><div style="MARGIN-LEFT: 21pt">1．调用LibraryDelete函数删除创建的临时库文件</div><div style="TEXT-INDENT: 21pt">以下讲我在开发时遇到的一些矛盾或问题。</div><div style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt"><span>一．</span>代码是逐行解释还是让PB编译器去解释</div><div style="TEXT-INDENT: 21pt">有些开发人员试图对动态脚本自行逐行解释，这是很困难的事情。一行代码如果脱离它的语境去执行，可能会产生错误的结果，即便你对PB所支持的函数全部做出解释，使用PB开发出来的对象、函数、事件等，你又如何去解释？这等同于你要花很大力气去编写一个PB编译器，除非你与PB编译器的开发团队合作，否则你很难获得成功。所以你必须想办法让PB编译器去解释。既然每行代码不能脱离其它代码而执行，那就创建一个函数或事件，让这个函数或事件包括你想写的所有代码。而函数或事件又不能脱离对象而存在，所以你必须想办法动态创建对象以及函数或事件，对象的声明必须依赖于库文件中的PB实体，由此推出关键是创建PB实体。</div><div style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt"><span>二．</span>如何创建PB实体</div><div style="TEXT-INDENT: 21pt">前面已讲过要使用PBORCX0.DLL中的WINAPI函数来创建并导入实体，这项技术并不难，在sybase的网站或随便狗狗（百度）一下就能出来一大把。</div><div style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt"><span>三．</span>创建的PB实体是存放在现有库文件中还是新文件中再导入</div><div style="TEXT-INDENT: 21pt">我最初的想法是放在现有库文件中，这样就不必花费时间在创建库文件和删除库文件的执行上，结果发现，创建是成功，但运行时PB就是不“认识”我创建的PB实体，一创建该实体的对象就报错，想来PB在程序启动时就读取库文件中有哪些实体形成列表，在没有改变库文件列表之前，其实体列表不会改变，这样对新建的实体就视而不见了。所以我不得不试着新建一个PBL，在新建的PBL中创建PB实体，然后使用AddToLibraryList将新建的PBL包括进来，这一试果然成功。</div><div style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt"><span>四．</span>使用数据窗口的Describe调用全局函数还是其它方式来取得返回值</div><div style="TEXT-INDENT: 21pt">大家都知道，使用数据窗口的Describe函数可以调用全局函数，但是它有很多的局限性，全局函数必须有简单类型的返回值，所有参数只能是简单数据类型而且不能通过参考传值。如果在需要调用的地方直接使用新建对象的函数将不受这些限制。</div><div style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt"><span>五．</span>如何进行垃圾对象的清理</div><div style="TEXT-INDENT: 21pt">既然每次执行动态脚本要创建PB实体，如果执行得多了，就有很多垃圾对象，所以应进行清理。可以通过LibraryDelete函数或FileDelete删除库文件。有意思的是，一旦创建PB实体，即便你删除了，使用FindClassDefinition或FindFunctionDefinition还是能够找到，但你想使用该实体创建对象则失败，这再次说明PB在程序启动时就读取库文件中有哪些实体形成列表，在没有改变库文件列表之前，其实体列表不会改变。</div><div style="TEXT-INDENT: 21pt">以下是所附代码的几点说明</div><div style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt"><span>一．</span>所附代码是在PB9环境下开发的，程序运行时必须有PBORC90.DLL，如果改成PB其它版本，请将nvo_pbcompiler中WINAPI函数所使用的动态库做相应修改。</div><div style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt"><span>二．</span>nvo_pbcompiler用于创建PB实体，这是PB动态脚本解释器的核心函数；f_execpbscript()用于执行一段PB脚本的样例代码函数，返回值类型为字符串，如果要使用到其它场合，读者可自行编写函数，思路类似；w_pbcompiler_test为一个用来执行PB脚本的样例界面窗口；其它函数有各自功能。</div><div style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt"><span>三．</span>如果想运行PB动态脚本编译器，请先将所有代码分对象导入库文件，然后编译，PB动态脚本编译器在PB开发环境下无效。</div><div style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt"><span>四．</span>为了程序方面的简化，有些所使用的全局函数请参考作者的其它文章。</div><div style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt"><span>五．</span>所附代码仅为脚本没有参数的情况下有效，如果你想代码有参数，只需要简单地对脚本语法作些改变就可，当然前台需要用户定义参数。</div><div style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt"><span>六．</span>本PB动态脚本解释器可执行所有有效的PB代码，例如访问全局变量、使用PB所有的系统函数、使用程序员开发的自定义函数、打开窗口、访问菜单、使用数据窗口等。</div><div style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt"><span>七．</span>通常将本PB动态脚本解释器嵌入到现有的使用PB开发出来的系统而不是单独使用，这样可以加载很多免编译的外挂程序。</div><div style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt"><span>八．</span>如果再拓宽它的应用范围，你甚至可以做到只需要一个框架程序，其它代码全部动态加载和执行，这样就只需一次编译，升级和维护就变得非常简单，不过你要考虑系统的可用性、系统性能和系统的稳定性等。</div>附完整源代码<div style="MARGIN-LEFT: 21pt">一．pbcompiler</div><div style="MARGIN-LEFT: 21pt">$PBExportHeader$pbcompiler.sra<br />$PBExportComments$PB动态脚本解释器应用对象</div><div style="MARGIN-LEFT: 21pt">forward<br />global type pbcompiler from application<br />end type<br />global transaction sqlca<br />global dynamicdescriptionarea sqlda<br />global dynamicstagingarea sqlsa<br />global error error<br />global message message<br />end forward</div><div style="MARGIN-LEFT: 21pt">global variables</div><div style="MARGIN-LEFT: 21pt">end variables<br />global type pbcompiler from application<br />string appname = &quot;pbcompiler&quot;<br />end type<br />global pbcompiler pbcompiler</div><div style="MARGIN-LEFT: 21pt">on pbcompiler.create<br />appname=&quot;pbcompiler&quot;<br />message=create message<br />sqlca=create transaction<br />sqlda=create dynamicdescriptionarea<br />sqlsa=create dynamicstagingarea<br />error=create error<br />end on</div><div style="MARGIN-LEFT: 21pt">on pbcompiler.destroy<br />destroy(sqlca)<br />destroy(sqlda)<br />destroy(sqlsa)<br />destroy(error)<br />destroy(message)<br />end on</div><div style="MARGIN-LEFT: 21pt">event open;open(w_pbcompiler_test)<br />end event</div><div style="MARGIN-LEFT: 21pt"></div><div style="MARGIN-LEFT: 21pt"></div><div style="MARGIN-LEFT: 21pt">二.f_execpbscript</div><div style="MARGIN-LEFT: 21pt">$PBExportHeader$f_execpbscript.srf<br />$PBExportComments$执行动态脚本的样例函数</div><div style="MARGIN-LEFT: 21pt">global type f_execpbscript from function_object<br />end type</div><div style="MARGIN-LEFT: 21pt">forward prototypes<br />global function string f_execpbscript (string as_returntype, string as_pbscript)<br />end prototypes</div><div style="MARGIN-LEFT: 21pt">global function string f_execpbscript (string as_returntype, string as_pbscript);/*******************************************************************<br />函数名称：f_execpbscript()<br />参数:     as_returntype string 返回值类型<br />          as_pbscript string 动态代码<br />返回值：  string 用户自定义或错误信息<br />功能描述：执行动态代码(只返回字符串)<br />创建人：  康剑民<br />创建日期：2007-02-12<br />版本号：  V1.0<br />*******************************************************************/<br />nvo_pbcompiler lnv_pbcompiler<br />nonvisualobject luo_pbcompiler<br />string ls_entryname,ls_libraryname<br />string ls_return<br />any la_return</div><div style="MARGIN-LEFT: 21pt">lnv_pbcompiler = create nvo_pbcompiler<br />//创建实体对象<br />if lnv_pbcompiler.of_createentry(as_returntype,as_pbscript,ls_libraryname,ls_entryname) = 1 then<br /> if not isnull(FindClassDefinition(ls_entryname) ) then<br />  luo_pbcompiler = create using ls_entryname<br />  choose case lower(as_returntype)<br />  case 'any','blob','boolean','char','character','date','datetime','dec','decimal','double','int','integer','long','real','string','time','uint','ulong','unsignedint','unsignedinteger','unsignedlong'<br />   la_return = luo_pbcompiler.dynamic of_exec()//执行动态代码<br />   ls_return = string(la_return)<br />  case '','none'<br />   luo_pbcompiler.dynamic of_exec()//执行动态代码<br />   ls_return = &quot;none&quot;<br />  case else<br />   luo_pbcompiler.dynamic of_exec()//执行动态代码<br />   ls_return = &quot;result is disabled&quot;<br />  end choose<br />  if isvalid(luo_pbcompiler) then destroy luo_pbcompiler<br /> else<br />  ls_return = &quot;error&quot;<br /> end if<br />else<br /> ls_return = &quot;error&quot;<br />end if<br />if isvalid(lnv_pbcompiler) then destroy lnv_pbcompiler</div><div style="MARGIN-LEFT: 21pt">LibraryDelete(ls_libraryname)</div><div style="MARGIN-LEFT: 21pt">return ls_return<br />end function</div><div style="MARGIN-LEFT: 21pt"></div><div style="MARGIN-LEFT: 21pt"></div><div style="MARGIN-LEFT: 21pt">三.f_parse</div><div style="MARGIN-LEFT: 21pt">$PBExportHeader$f_parse.srf<br />$PBExportComments$分解字符串到数组</div><div style="MARGIN-LEFT: 21pt">global type f_parse from function_object<br />end type</div><div style="MARGIN-LEFT: 21pt">forward prototypes<br />global function long f_parse (readonly string as_text, readonly string as_sep, ref string as_list[])<br />end prototypes</div><div style="MARGIN-LEFT: 21pt">global function long f_parse (readonly string as_text, readonly string as_sep, ref string as_list[]);/*******************************************************************<br />函数名称：f_parse()<br />参数:     as_text string 来源字符串<br />          as_sep string 分隔字符<br />    as_list[] ref string 分析后形成的字符串数组<br />返回值：  long 分析后形成的数组元素个数<br />功能描述：分析字符串到一个数组中<br />创建人：  康剑民<br />创建日期：2002-11-19<br />版本号：  V1.0<br />*******************************************************************/<br />long i,ll_pos<br />string ls_null[],ls_text</div><div style="MARGIN-LEFT: 21pt">ls_text = as_text<br />as_list = ls_null<br />i=0<br />ll_pos = posw(lower(ls_text),lower(as_sep))<br />do while ll_pos &gt; 0 <br /> i ++ <br /> as_list[i]=leftw(ls_text,ll_pos - 1)<br /> ls_text=midw(ls_text,ll_pos + lenw(as_sep),lenw(ls_text))<br /> ll_pos = posw(lower(ls_text),lower(as_sep)) <br />loop<br />as_list[i + 1] = ls_text</div><div style="MARGIN-LEFT: 21pt">return upperbound(as_list[])<br />end function</div><div style="MARGIN-LEFT: 21pt"></div><div style="MARGIN-LEFT: 21pt"></div><div style="MARGIN-LEFT: 21pt">四.f_replacetext</div><div style="MARGIN-LEFT: 21pt">$PBExportHeader$f_replacetext.srf<br />$PBExportComments$替换字符串</div><div style="MARGIN-LEFT: 21pt">global type f_replacetext from function_object<br />end type</div><div style="MARGIN-LEFT: 21pt">forward prototypes<br />global function string f_replacetext (readonly string as_source, readonly string as_oldtag, readonly string as_newtag, readonly long al_seq)<br />end prototypes</div><div style="MARGIN-LEFT: 21pt">global function string f_replacetext (readonly string as_source, readonly string as_oldtag, readonly string as_newtag, readonly long al_seq);/*******************************************************************<br />函数名称：f_replacetext()<br />参数:     as_source string 源字符串<br />          as_oldtag string 待替换特征字符串<br />    as_newtag string 替换后特征字符串<br />    al_seq long 第几个特征替换字符串需替换，0表示全部<br />返回值：  string 替换后字符串<br />功能描述：用一特征字符串替换指定字符串中的特征字符串,参数al_seq=0时表示全部替换<br />创建人：  康剑民<br />创建日期：2002-11-19<br />版本号：  V1.0<br />*******************************************************************/<br />long ll_start_pos=1,ll_len_old_tag,i = 0<br />string ls_left,ls_return='',ls_source=''</div><div style="MARGIN-LEFT: 21pt">ls_source = as_source<br />ll_len_old_tag = lenw(as_oldtag)<br />ll_start_pos = posw(lower(ls_source),lower(as_oldtag),1)<br />if al_seq = 0 then<br /> DO WHILE ll_start_pos &gt; 0<br />  ls_left = leftw(ls_source,ll_start_pos - 1) + as_newtag<br />  ls_return = ls_return + ls_left<br />  ls_source = midw(ls_source,ll_start_pos + lenw(as_oldtag),lenw(ls_source))<br />  ll_start_pos = posw(lower(ls_source),lower(as_oldtag),1)<br /> LOOP<br />elseif al_seq &gt; 0 then<br /> DO WHILE ll_start_pos &gt; 0<br />  i ++<br />  if al_seq = i then <br />   ls_left = leftw(ls_source,ll_start_pos - 1) + as_newtag<br />   ls_return = ls_return + ls_left<br />   ls_source = midw(ls_source,ll_start_pos + lenw(as_oldtag),lenw(ls_source))<br />   ll_start_pos = posw(lower(ls_source),lower(as_oldtag),1)<br />  end if<br /> loop<br />end if<br />ls_return = ls_return + ls_source</div><div style="MARGIN-LEFT: 21pt">return ls_return</div><div style="MARGIN-LEFT: 21pt"></div><div style="MARGIN-LEFT: 21pt">end function</div><div style="MARGIN-LEFT: 21pt"></div><div style="MARGIN-LEFT: 21pt"></div><div style="MARGIN-LEFT: 21pt">五.nvo_pbcompiler</div><div style="MARGIN-LEFT: 21pt">$PBExportHeader$nvo_pbcompiler.sru<br />$PBExportComments$PB动态脚本解释器</div><div style="MARGIN-LEFT: 21pt">forward<br />global type nvo_pbcompiler from nonvisualobject<br />end type<br />end forward</div><div style="MARGIN-LEFT: 21pt">global type nvo_pbcompiler from nonvisualobject<br />end type<br />global nvo_pbcompiler nvo_pbcompiler</div><div style="MARGIN-LEFT: 21pt">type prototypes<br />//打开一个会话<br />Function long SessionOpen () Library &quot;PBORC90.DLL&quot; Alias for &quot;PBORCA_SessionOpen&quot;<br />//关闭一个会话<br />Subroutine SessionClose ( long hORCASession ) Library &quot;PBORC90.DLL&quot; Alias for &quot;PBORCA_SessionClose&quot;<br />//设置当前会话的库清单<br />Function int SessionSetLibraryList ( long hORCASession, ref string pLibNames[], int iNumberOfLibs) Library &quot;PBORC90.DLL&quot; Alias for &quot;PBORCA_SessionSetLibraryList&quot;<br />//设置当前会话对应的应用<br />Function int SessionSetCurrentAppl ( long hORCASession, string lpszApplLibName, string lpszApplName ) Library &quot;PBORC90.DLL&quot; Alias for &quot;PBORCA_SessionSetCurrentAppl&quot;<br />//导入并编译实体<br />Function int CompileEntryImport ( long hORCASession, string lpszLibraryName, string lpszEntryName, long otEntryType, string lpszComments, string lpszEntrySyntax, long lEntrySyntaxBuffSize, long pCompErrorProc, long pUserData ) Library &quot;PBORC90.DLL&quot; Alias for &quot;PBORCA_CompileEntryImport&quot;<br />//取临时目录<br />Function long GetTempPath(long nBufferLength, ref string lpBuffer)  Library &quot;kernel32&quot; Alias for &quot;GetTempPathA&quot; <br />//获取一个已装载模板的完整路径名称<br />FUNCTION ulong GetModuleFileName(ulong hModule,ref string lpFileName,ulong nSize) LIBRARY &quot;kernel32.dll&quot; ALIAS FOR &quot;GetModuleFileNameA&quot;</div><div style="MARGIN-LEFT: 21pt">end prototypes</div><div style="MARGIN-LEFT: 21pt">type variables</div><div style="MARGIN-LEFT: 21pt">end variables<br />forward prototypes<br />public function string of_gettemppath ()<br />public function string of_getapppath ()<br />public function integer of_createentry (string as_returntype, string as_pbscript, ref string as_libraryname, ref string as_entryname)<br />end prototypes</div><div style="MARGIN-LEFT: 21pt">public function string of_gettemppath ();/*******************************************************************<br />函数名称：of_gettemppath()<br />参数:     无<br />返回值：  string 临时路径<br />功能描述：取临时路径<br />创建人：  康剑民<br />创建日期：2006-12-26<br />版本号：  V1.0<br />*******************************************************************/<br />string ls_path<br />ulong lu_size=256</div><div style="MARGIN-LEFT: 21pt">ls_path=space(256)<br />GetTempPath(lu_size,ls_path)<br />return trimw(ls_path)<br />end function</div><div style="MARGIN-LEFT: 21pt">public function string of_getapppath ();/*******************************************************************<br />函数名称：of_getapppath()<br />参数:     无<br />返回值：  string 应用程序路径<br />功能描述：取应用程序路径<br />创建人：  康剑民<br />创建日期：2002-11-22<br />版本号：  V1.0<br />*******************************************************************/<br />string ls_apppath</div><div style="MARGIN-LEFT: 21pt">ls_apppath=space(256)<br />GetModuleFileName(Handle(GetApplication()),ls_apppath,256)<br />ls_apppath=Reverse(ls_apppath)<br />ls_apppath=Reverse(midw(ls_apppath,posw(ls_apppath,'\',1)))</div><div style="MARGIN-LEFT: 21pt">return ls_apppath<br />end function</div><div style="MARGIN-LEFT: 21pt">public function integer of_createentry (string as_returntype, string as_pbscript, ref string as_libraryname, ref string as_entryname);/*******************************************************************<br />函数名称：of_createentry()<br />参数:     as_returntype string 返回值类型<br />          as_pbscript string 动态代码<br />    as_libraryname ref string 创建的库文件名称<br />    as_entryname ref string 创建的实体名称<br />返回值：  long 是否成功(1表示成功,-1表示失败)<br />功能描述：根据动态代码创建实体<br />创建人：  康剑民<br />创建日期：2007-02-12<br />版本号：  V1.0<br />*******************************************************************/<br />long ll_sid//会话编号<br />long ll_index//对象序号<br />string ls_librarylist[]//库文件列表<br />string ls_librarylist_tmp[]//库文件列表(临时)<br />string ls_temp_libraryname//临时库文件名称<br />string ls_temp_path//临时目录<br />string ls_syntax//实体语法<br />string ls_app_libraryname//应用程序所在库文件名称<br />integer li_result//结果<br />string ls_entryname//对象名称<br />classdefinition lcd_app//应用程序类定义对象<br />string ls_librarylist_files//库文件<br />integer i,j//临时变量</div><div style="MARGIN-LEFT: 21pt">//开发环境下直接退出<br />if handle(GetApplication()) &lt;= 0 then return -1<br />//取库文件列表<br />ls_librarylist_files = getlibrarylist ()<br />//取应用对象所在pbl<br />lcd_app = getapplication().classdefinition<br />ls_app_libraryname = lcd_app.libraryname</div><div style="MARGIN-LEFT: 21pt">ls_temp_path = this.of_gettemppath( )//取临时目录<br />//取待创建的临时库文件名称<br />ll_index = 1<br />ls_temp_libraryname = ls_temp_path + &quot;temp&quot;+string(ll_index) + &quot;.pbl&quot;<br />do while fileexists(ls_temp_libraryname) or posw(&quot;,&quot;+ls_librarylist_files+&quot;,&quot;,&quot;,&quot;+ls_temp_libraryname+&quot;,&quot;) &gt; 0<br /> ll_index ++<br /> ls_temp_libraryname = ls_temp_path + &quot;temp&quot;+string(ll_index) + &quot;.pbl&quot;<br />loop<br />//创建临时库文件<br />LibraryCreate(ls_temp_libraryname,&quot;临时库文件&quot;)</div><div style="MARGIN-LEFT: 21pt">f_parse(ls_librarylist_files,',',ls_librarylist)//分解字符串到数组<br />//判断库文件是否存在并形成新列表<br />j = 0<br />for i = 1 to upperbound(ls_librarylist)<br /> if fileexists(ls_librarylist[i]) then<br />  j ++<br />  ls_librarylist_tmp[j] = ls_librarylist[i]<br /> end if<br />next<br />ls_librarylist = ls_librarylist_tmp<br />ls_librarylist[upperbound(ls_librarylist)+1] = ls_temp_libraryname</div><div style="MARGIN-LEFT: 21pt">ll_sid = SessionOpen()//打开一个会话<br />//设置当前会话的库清单<br />li_result = SessionSetLibraryList (ll_sid, ls_librarylist, upperbound(ls_librarylist))<br />if li_result = 0 then     <br /> //设置当前会话对应的应用<br /> li_result = SessionSetCurrentAppl (ll_sid, ls_app_libraryname, getapplication().appname )<br />   if li_result = 0 then      <br />  //取实体名称(保证不重复)<br />  ll_index = 1<br />  do while not isnull(FindClassDefinition(&quot;nvo_&quot;+string(ll_index)))<br />   ll_index ++<br />  loop<br />  ls_entryname = &quot;nvo_&quot;+string(ll_index)<br />  //实体声明<br />  ls_syntax = &quot;$PBExportHeader$&quot;+ls_entryname+&quot;.sru&quot;+&quot;~r~n&quot;&amp;<br />    + &quot;forward&quot;+&quot;~r~n&quot;&amp;<br />    + &quot;global type &quot;+ls_entryname+&quot; from nonvisualobject&quot;+&quot;~r~n&quot;&amp;<br />    + &quot;end type&quot;+&quot;~r~n&quot;&amp;<br />    + &quot;end forward&quot;+&quot;~r~n&quot;&amp;<br />    + &quot;~r~n&quot;&amp;<br />    + &quot;global type &quot;+ls_entryname+&quot; from nonvisualobject&quot;+&quot;~r~n&quot;&amp;<br />    + &quot;end type&quot;+&quot;~r~n&quot;&amp;<br />    + &quot;global &quot;+ls_entryname+&quot; &quot;+ls_entryname+&quot;&quot;+&quot;~r~n&quot;&amp;<br />    + &quot;~r~n&quot;&amp;     <br />    + &quot;forward prototypes&quot;+&quot;~r~n&quot; <br />  //区分函数还是过程<br />  if trimw(lower(as_returntype)) = 'none' or trimw(lower(as_returntype)) = '' then<br />   ls_syntax = ls_syntax + &quot;public subroutine of_exec ()&quot;+&quot;~r~n&quot;&amp;<br />    + &quot;end prototypes&quot;+&quot;~r~n&quot;&amp;<br />    + &quot;~r~n&quot;&amp;<br />    + &quot;public subroutine of_exec ();&quot;+as_pbscript+&quot;~r~n&quot;&amp;<br />    + &quot;end subroutine&quot;<br />  else<br />   ls_syntax = ls_syntax + &quot;public function &quot; + as_returntype + &quot; of_exec ()&quot;+&quot;~r~n&quot;&amp;<br />    + &quot;end prototypes&quot;+&quot;~r~n&quot;&amp;<br />    + &quot;~r~n&quot;&amp;<br />    + &quot;public function &quot; + as_returntype + &quot; of_exec ();&quot;+as_pbscript+&quot;~r~n&quot;&amp;<br />    + &quot;end function&quot;<br />  end if<br />  //实体语法尾部<br />  ls_syntax = ls_syntax + &quot;~r~n&quot; + &quot;on &quot; + ls_entryname + &quot;.create&quot;+&quot;~r~n&quot;&amp;<br />   + &quot;call super::create&quot;+&quot;~r~n&quot;&amp;<br />   + &quot;TriggerEvent( this, ~&quot;constructor~&quot; )&quot;+&quot;~r~n&quot;&amp;<br />   + &quot;end on&quot;+&quot;~r~n&quot;&amp;<br />   + &quot;~r~n&quot;&amp;<br />   + &quot;on &quot; + ls_entryname + &quot;.destroy&quot;+&quot;~r~n&quot;&amp;<br />   + &quot;TriggerEvent( this, ~&quot;destructor~&quot; )&quot;+&quot;~r~n&quot;&amp;<br />   + &quot;call super::destroy&quot;+&quot;~r~n&quot;&amp;<br />   + &quot;end on&quot;<br />  //导入并编译实体<br />  li_result = CompileEntryImport (ll_sid, ls_temp_libraryname, ls_entryname, 6 , &quot;comment - new object&quot;, ls_syntax, len(ls_syntax), 0, 0 )<br />   end if<br />end if<br />SessionClose(ll_sid)//关闭一个会话</div><div style="MARGIN-LEFT: 21pt">as_libraryname = ls_temp_libraryname<br />as_entryname=ls_entryname</div><div style="MARGIN-LEFT: 21pt">//加入新文件到库文件搜索列表<br />AddToLibraryList(ls_temp_libraryname)</div><div style="MARGIN-LEFT: 21pt">if li_result = 0 then<br /> return 1<br />else<br /> return -1<br />end if<br />end function</div><div style="MARGIN-LEFT: 21pt">on nvo_pbcompiler.create<br />call super::create<br />TriggerEvent( this, &quot;constructor&quot; )<br />end on</div><div style="MARGIN-LEFT: 21pt">on nvo_pbcompiler.destroy<br />TriggerEvent( this, &quot;destructor&quot; )<br />call super::destroy<br />end on</div><div style="MARGIN-LEFT: 21pt"></div><div style="MARGIN-LEFT: 21pt"></div><div style="MARGIN-LEFT: 21pt">六.w_pbcompiler_test</div><div style="MARGIN-LEFT: 21pt">$PBExportHeader$w_pbcompiler_test.srw<br />$PBExportComments$PB动态脚本解释器测试窗口</div><div style="MARGIN-LEFT: 21pt">forward<br />global type w_pbcompiler_test from window<br />end type<br />type st_returnvalue from statictext within w_pbcompiler_test<br />end type<br />type st_returntype from statictext within w_pbcompiler_test<br />end type<br />type st_script from statictext within w_pbcompiler_test<br />end type<br />type sle_returnvalue from singlelineedit within w_pbcompiler_test<br />end type<br />type cb_exit from commandbutton within w_pbcompiler_test<br />end type<br />type sle_returntype from singlelineedit within w_pbcompiler_test<br />end type<br />type mle_script from multilineedit within w_pbcompiler_test<br />end type<br />type cb_ok from commandbutton within w_pbcompiler_test<br />end type<br />end forward</div><div style="MARGIN-LEFT: 21pt">global type w_pbcompiler_test from window<br />integer width = 1979<br />integer height = 1100<br />boolean titlebar = true<br />string title = &quot;PB脚本解释器(测试)&quot;<br />boolean controlmenu = true<br />boolean minbox = true<br />boolean maxbox = true<br />boolean resizable = true<br />long backcolor = 67108864<br />string icon = &quot;AppIcon!&quot;<br />boolean center = true<br />st_returnvalue st_returnvalue<br />st_returntype st_returntype<br />st_script st_script<br />sle_returnvalue sle_returnvalue<br />cb_exit cb_exit<br />sle_returntype sle_returntype<br />mle_script mle_script<br />cb_ok cb_ok<br />end type<br />global w_pbcompiler_test w_pbcompiler_test</div><div style="MARGIN-LEFT: 21pt">type prototypes</div><div style="MARGIN-LEFT: 21pt">end prototypes<br />type variables</div><div style="MARGIN-LEFT: 21pt">end variables<br />on w_pbcompiler_test.create<br />this.st_returnvalue=create st_returnvalue<br />this.st_returntype=create st_returntype<br />this.st_script=create st_script<br />this.sle_returnvalue=create sle_returnvalue<br />this.cb_exit=create cb_exit<br />this.sle_returntype=create sle_returntype<br />this.mle_script=create mle_script<br />this.cb_ok=create cb_ok<br />this.Control[]={ this.st_returnvalue,&amp;<br />this.st_returntype,&amp;<br />this.st_script,&amp;<br />this.sle_returnvalue,&amp;<br />this.cb_exit,&amp;<br />this.sle_returntype,&amp;<br />this.mle_script,&amp;<br />this.cb_ok }<br />end on</div><div style="MARGIN-LEFT: 21pt">on w_pbcompiler_test.destroy<br />destroy(this.st_returnvalue)<br />destroy(this.st_returntype)<br />destroy(this.st_script)<br />destroy(this.sle_returnvalue)<br />destroy(this.cb_exit)<br />destroy(this.sle_returntype)<br />destroy(this.mle_script)<br />destroy(this.cb_ok)<br />end on</div><div style="MARGIN-LEFT: 21pt">type st_returnvalue from statictext within w_pbcompiler_test<br />integer x = 9<br />integer y = 608<br />integer width = 297<br />integer height = 60<br />integer textsize = -9<br />integer weight = 400<br />fontcharset fontcharset = ansi!<br />fontpitch fontpitch = variable!<br />fontfamily fontfamily = swiss!<br />string facename = &quot;Arial&quot;<br />long textcolor = 33554432<br />long backcolor = 67108864<br />string text = &quot;返回值:&quot;<br />boolean focusrectangle = false<br />end type</div><div style="MARGIN-LEFT: 21pt">type st_returntype from statictext within w_pbcompiler_test<br />integer x = 9<br />integer y = 476<br />integer width = 297<br />integer height = 60<br />integer textsize = -9<br />integer weight = 400<br />fontcharset fontcharset = ansi!<br />fontpitch fontpitch = variable!<br />fontfamily fontfamily = swiss!<br />string facename = &quot;Arial&quot;<br />long textcolor = 33554432<br />long backcolor = 67108864<br />string text = &quot;返回值类型:&quot;<br />boolean focusrectangle = false<br />end type</div><div style="MARGIN-LEFT: 21pt">type st_script from statictext within w_pbcompiler_test<br />integer x = 9<br />integer y = 12<br />integer width = 206<br />integer height = 60<br />integer textsize = -9<br />integer weight = 400<br />fontcharset fontcharset = ansi!<br />fontpitch fontpitch = variable!<br />fontfamily fontfamily = swiss!<br />string facename = &quot;Arial&quot;<br />long textcolor = 33554432<br />long backcolor = 67108864<br />string text = &quot;PB脚本:&quot;<br />boolean focusrectangle = false<br />end type</div><div style="MARGIN-LEFT: 21pt">type sle_returnvalue from singlelineedit within w_pbcompiler_test<br />integer x = 334<br />integer y = 608<br />integer width = 1582<br />integer height = 104<br />integer taborder = 30<br />integer textsize = -9<br />integer weight = 400<br />fontcharset fontcharset = ansi!<br />fontpitch fontpitch = variable!<br />fontfamily fontfamily = swiss!<br />string facename = &quot;Arial&quot;<br />long textcolor = 33554432<br />borderstyle borderstyle = stylelowered!<br />end type</div><div style="MARGIN-LEFT: 21pt">type cb_exit from commandbutton within w_pbcompiler_test<br />integer x = 1664<br />integer y = 856<br />integer width = 242<br />integer height = 104<br />integer taborder = 50<br />integer textsize = -9<br />integer weight = 400<br />fontcharset fontcharset = ansi!<br />fontpitch fontpitch = variable!<br />fontfamily fontfamily = swiss!<br />string facename = &quot;Arial&quot;<br />string text = &quot;退出&quot;<br />end type</div><div style="MARGIN-LEFT: 21pt">event clicked;close(parent)<br />end event</div><div style="MARGIN-LEFT: 21pt">type sle_returntype from singlelineedit within w_pbcompiler_test<br />integer x = 334<br />integer y = 476<br />integer width = 1582<br />integer height = 104<br />integer taborder = 20<br />integer textsize = -9<br />integer weight = 400<br />fontcharset fontcharset = ansi!<br />fontpitch fontpitch = variable!<br />fontfamily fontfamily = swiss!<br />string facename = &quot;Arial&quot;<br />long textcolor = 33554432<br />borderstyle borderstyle = stylelowered!<br />end type</div><div style="MARGIN-LEFT: 21pt">type mle_script from multilineedit within w_pbcompiler_test<br />integer x = 334<br />integer y = 12<br />integer width = 1582<br />integer height = 432<br />integer taborder = 10<br />integer textsize = -9<br />integer weight = 400<br />fontcharset fontcharset = ansi!<br />fontpitch fontpitch = variable!<br />fontfamily fontfamily = swiss!<br />string facename = &quot;Arial&quot;<br />long textcolor = 33554432<br />boolean vscrollbar = true<br />boolean autovscroll = true<br />borderstyle borderstyle = stylelowered!<br />end type</div><div style="MARGIN-LEFT: 21pt">type cb_ok from commandbutton within w_pbcompiler_test<br />integer x = 1417<br />integer y = 856<br />integer width = 242<br />integer height = 104<br />integer taborder = 40<br />integer textsize = -9<br />integer weight = 400<br />fontcharset fontcharset = ansi!<br />fontpitch fontpitch = variable!<br />fontfamily fontfamily = swiss!<br />string facename = &quot;Arial&quot;<br />string text = &quot;执行&quot;<br />end type</div><div style="MARGIN-LEFT: 21pt">event clicked;sle_returnvalue.text = f_execpbscript(sle_returntype.text,mle_script.text)<br />end event</div>
	<br>   (<a href=http://www.pball.cn/pb/blog/index.php?articleid=a_20080118_105745 target=_blank> 网页浏览 </a>)
  ]]> 
</description>
</item><item rdf:about='http://www.pball.cn/pb/blog/index.php?articleid=a_20071211_140323'>
<title>Sybase开发者活动 12.22</title> 
<link>http://www.pball.cn/pb/blog/index.php?articleid=a_20071211_140323</link> 
<description>
<![CDATA[ 
	<p>又有活动啦，快报名呀~~~</p><p><a href="http://sybase.chinaunix.net/salon/"><a href="http://sybase.chinaunix.net/salon/" target="_blank">http://sybase.chinaunix.net/salon/</a></a><br /><br /><table cellspacing="10" cellpadding="0" width="100%" bgcolor="#e6e6cc" border="0"><tbody><tr><td valign="top" width="12%"><span class="STYLE2"><font color="#ff6600"><font size="2"><strong>日程安排</strong>：</font></font></span></td><td><span class="STYLE2"><strong><font color="#ff6600" size="2">2007年12月22日</font></strong></span></td></tr><tr><td valign="top"><font size="2"> </font></td><td width="88%"><table cellpadding="0" width="100%" bgcolor="#e6e6cc" border="0"><tbody><tr><td width="12%"><font size="2"><img height="11" src="http://sybase.chinaunix.net/salon/images/01.gif" width="11" /> 2:30pm<br /><img height="11" src="http://sybase.chinaunix.net/salon/images/01.gif" width="11" /> 3:00pm<br /><img height="11" src="http://sybase.chinaunix.net/salon/images/01.gif" width="11" /> 3:10pm<br /><img height="11" src="http://sybase.chinaunix.net/salon/images/01.gif" width="11" /> 4:10pm<br /><br />            <br />            <br /><img height="11" src="http://sybase.chinaunix.net/salon/images/01.gif" width="11" /> 5:10pm<br /><img height="11" src="http://sybase.chinaunix.net/salon/images/01.gif" width="11" /> 6:00pm<br /><img height="11" src="http://sybase.chinaunix.net/salon/images/01.gif" width="11" /> 7:00pm</font></td><td width="75%"><font size="2">签到<br />主持开场(自由畅饮并交流)<br />ASE维护常见问题分析/开发者问答(抽奖)<br />PowerBuilder的过去、现在和未来(抽奖)<br />PowerBuilder产品历史 <br />PowerBuilder 11.0的新功能<br />PowerBuilder未来的发展方向<br />实话实说移动商务(抽奖)<br />自助晚餐<br />结束(领取礼品) </font></td></tr></tbody></table></td></tr></tbody></table><br /></p>
	<br>   (<a href=http://www.pball.cn/pb/blog/index.php?articleid=a_20071211_140323 target=_blank> 网页浏览 </a>)
  ]]> 
</description>
</item><item rdf:about='http://www.pball.cn/pb/blog/index.php?articleid=a_20071106_184135'>
<title>2007 Sybase技术日</title> 
<link>http://www.pball.cn/pb/blog/index.php?articleid=a_20071106_184135</link> 
<description>
<![CDATA[ 
	<p>这也是邮件里的，去年有T恤领，今年是什么呢？</p><div align="center"><p class="style13" align="center">无限企业 无限客户</p><p class="style14" align="center"><strong>　2007 Sybase技术日</strong></p><p class="style9" align="left">　　在数据爆炸的今天，各大企业的CIO们面临比以往更难、更棘手的问题－－</p><p class="style9" align="left">　　不断剧增的数据、缓慢的运行速度、庞大的系统能耗、复杂的维护、高昂的成本、日益严重的信息孤岛、超越以往的运营风险</p><p class="style9" align="left">　　如何能够用更少的资源，处理更多的数据，获得更高的性能，更稳定驱动企业的关键应用，而且不受时空的限制呢？</p><p class="style9" align="left">　　<span class="style1" style15=""><strong>2007 Sybase技术日－2007 Sybase Tech Day</strong></span><span class="style15">，将为您层层解惑这些重重困扰您的问题。</span></p><p class="style9" align="left">　　秉承企业信息无限化（Unwired Enterprise）战略，Sybase将帮助您的企业建立值得信赖的数据基础架构，构建高性能、低成本的绿色信息环境，让企业应用不再受时空的限制，尽显竞争优势。</p><p class="style9" align="left">　　<span class="style2"><strong><u><span class="style17"><a class="style2" href="http://www.sybase.com.cn/gvswse/site/china/content.jsp?_doc_id=2431" target="_blank">欢迎点击注册</a></span></u></strong>，<strong class="style2">与会者将获赠精美纪念品！</strong></span></p><p class="style9" align="left">　　<strong>会议时间：</strong>2007年11月15日下午13:00-17:30</p><p class="style9" align="left">　　<strong>会议地点：</strong>北京香格里拉饭店新阁</p><p class="style9" align="left">　　<strong>会议地址：</strong>北京市海淀区紫竹院路6号</p><h1><span class="style2">关注详情，请点击下方页面！！！</span></h1></div><p><table cellspacing="0" cellpadding="0" width="593" border="0"><tbody><tr><td class="style8" width="590"><table cellspacing="0" cellpadding="0" width="590" border="0"><tbody><tr><td style="FONT-SIZE: 10px; COLOR: #666666; LINE-HEIGHT: 14px; FONT-FAMILY: verdana,arial,sans-serif" valign="top" bordercolor="#ece9d8" width="590"><div align="left"><div align="center"><a href="http://www.sybase.com.cn/gvswse/site/china/content.jsp?_doc_id=2432" target="_blank"><img height="833" src="http://img.en25.com/eloquaimages/clients/Sybase/%7B7eb1396f-f075-49cf-a91b-04c0663f365b%7D_Techday.jpg" width="618" border="0" /></a></div><p> </p><div align="left"><div align="left"></div></div></div></td></tr></tbody></table></td></tr></tbody></table></p>
	<br>   (<a href=http://www.pball.cn/pb/blog/index.php?articleid=a_20071106_184135 target=_blank> 网页浏览 </a>)
  ]]> 
</description>
</item><item rdf:about='http://www.pball.cn/pb/blog/index.php?articleid=a_20071106_183548'>
<title>Sybase 2007年第三季度运营成绩出色</title> 
<link>http://www.pball.cn/pb/blog/index.php?articleid=a_20071106_183548</link> 
<description>
<![CDATA[ 
	<p>不知道从哪天起开始收到Sybase-Express，抄一段给大家看看：</p><p style="LINE-HEIGHT: 150%; TEXT-ALIGN: center" align="center"><strong><span style="FONT-SIZE: 14pt; LINE-HEIGHT: 150%; FONT-FAMILY: Arial; mso-bidi-font-family: Arial">Sybase 2007</span></strong><strong><span lang="ZH-CN" style="FONT-SIZE: 14pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">年第三季度运营成绩出色</span></strong><strong><span style="FONT-SIZE: 14pt; LINE-HEIGHT: 150%; FONT-FAMILY: Arial; mso-bidi-font-family: Arial"><p /></span></strong></p><span style="FONT-SIZE: 11pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-bidi-language: AR-SA"><p style="LINE-HEIGHT: 150%"><span style="FONT-SIZE: 11pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW; mso-bidi-language: AR-SA">    Sybase</span><span lang="ZH-CN" style="FONT-SIZE: 11pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-bidi-language: AR-SA">近日发布了截至</span><span style="FONT-SIZE: 11pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW; mso-bidi-language: AR-SA">2007</span><span lang="ZH-CN" style="FONT-SIZE: 11pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-bidi-language: AR-SA">年</span><span style="FONT-SIZE: 11pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW; mso-bidi-language: AR-SA">9</span><span lang="ZH-CN" style="FONT-SIZE: 11pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-bidi-language: AR-SA">月</span><span style="FONT-SIZE: 11pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW; mso-bidi-language: AR-SA">30</span><span lang="ZH-CN" style="FONT-SIZE: 11pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-bidi-language: AR-SA">日的第三季度财务报告，报告显示第三季度的营业收入和每股收益（</span><span style="FONT-SIZE: 11pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW; mso-bidi-language: AR-SA">EPS</span><span lang="ZH-CN" style="FONT-SIZE: 11pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-bidi-language: AR-SA">）再次超过了</span><span style="FONT-SIZE: 11pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW; mso-bidi-language: AR-SA">First Call</span><span lang="ZH-CN" style="FONT-SIZE: 11pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-bidi-language: AR-SA">公布的预期值，</span><span lang="ZH-CN" style="FONT-SIZE: 11pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Wingdings; mso-bidi-language: AR-SA"> </span><span lang="ZH-CN" style="FONT-SIZE: 11pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-bidi-language: AR-SA">总收入同比增长</span><span style="FONT-SIZE: 11pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW; mso-bidi-language: AR-SA">22</span><span lang="ZH-CN" style="FONT-SIZE: 11pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-bidi-language: AR-SA">％，销售许可收入同比增长</span><span style="FONT-SIZE: 11pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW; mso-bidi-language: AR-SA">12</span><span lang="ZH-CN" style="FONT-SIZE: 11pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-bidi-language: AR-SA">％，按照通用会计准则（</span><span style="FONT-SIZE: 11pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW; mso-bidi-language: AR-SA">GAAP</span><span lang="ZH-CN" style="FONT-SIZE: 11pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-bidi-language: AR-SA">）计算的营业收入同比增长</span><span style="FONT-SIZE: 11pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW; mso-bidi-language: AR-SA">39</span><span lang="ZH-CN" style="FONT-SIZE: 11pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-bidi-language: AR-SA">％，</span><span style="FONT-SIZE: 11pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW; mso-bidi-language: AR-SA">Sybase</span><span lang="ZH-CN" style="FONT-SIZE: 11pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-bidi-language: AR-SA">的关键产品线</span><span style="FONT-SIZE: 11pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW; mso-bidi-language: AR-SA"> <span lang="ZH-TW"> </span></span><span lang="ZH-CN" style="FONT-SIZE: 11pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-bidi-language: AR-SA">数据管理、移动中间件及讯息服务业务与往年相比均有了显著的提升。基于此，</span><span style="FONT-SIZE: 11pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW; mso-bidi-language: AR-SA">Sybase</span><span lang="ZH-CN" style="FONT-SIZE: 11pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-bidi-language: AR-SA">提高了每股收益</span><span style="FONT-SIZE: 11pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW; mso-bidi-language: AR-SA">(EPS)</span><span lang="ZH-CN" style="FONT-SIZE: 11pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-bidi-language: AR-SA">和现金流指导数据。</span><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"><p /></span></p><p style="LINE-HEIGHT: 150%"><strong><span lang="ZH-CN" style="FONT-SIZE: 11pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-bidi-language: AR-SA">要点：</span></strong><strong><span style="FONT-SIZE: 11pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW; mso-bidi-language: AR-SA">    </span></strong><span style="FONT-SIZE: 11pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW; mso-bidi-language: AR-SA"><p /></span></p><ul type="disc"><li class="MsoNormal" style="MARGIN: 0in 0in 0pt; COLOR: black; LINE-HEIGHT: 150%; mso-list: l0 level1 lfo1; tab-stops: list .5in; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><span lang="ZH-CN" style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial">总收入同比增长</span><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW">22</span><span lang="ZH-CN" style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial">％，销售许可收入同比增长</span><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW">12</span><span lang="ZH-CN" style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial">％</span><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW"><p /></span> </li><li class="MsoNormal" style="MARGIN: 0in 0in 0pt; COLOR: black; LINE-HEIGHT: 150%; mso-list: l0 level1 lfo1; tab-stops: list .5in"><span lang="ZH-CN" style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial">数据库销售许可总收入同比增长</span><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW">18</span><span lang="ZH-CN" style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial">％</span><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW"><p /></span> </li><li class="MsoNormal" style="MARGIN: 0in 0in 0pt; COLOR: black; LINE-HEIGHT: 150%; mso-list: l0 level1 lfo1; tab-stops: list .5in"><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW">iAnywhere</span><span lang="ZH-CN" style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial">总收入同比增长</span><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW">10</span><span lang="ZH-CN" style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial">％，销售许可收入同比增长</span><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW">16</span><span lang="ZH-CN" style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial">％</span><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW"><p /></span> </li><li class="MsoNormal" style="MARGIN: 0in 0in 0pt; COLOR: black; LINE-HEIGHT: 150%; mso-list: l0 level1 lfo1; tab-stops: list .5in"><span lang="ZH-CN" style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial">按照非通用会计准则（</span><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW">non-GAAP</span><span lang="ZH-CN" style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial">）计算的营业收入同比增长</span><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW">40</span><span lang="ZH-CN" style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial">％，按照</span><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW">non-GAAP</span><span lang="ZH-CN" style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial">计算的营业毛利同比增长</span><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW">22</span><span lang="ZH-CN" style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial">％</span><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW"><p /></span> </li><li class="MsoNormal" style="MARGIN: 0in 0in 0pt; COLOR: black; LINE-HEIGHT: 150%; mso-list: l0 level1 lfo1; tab-stops: list .5in"><span lang="ZH-CN" style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial">按照通用会计准则（</span><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW">GAAP</span><span lang="ZH-CN" style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial">）计算的营业收入同比增长</span><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW">39</span><span lang="ZH-CN" style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial">％，按照</span><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW">GAAP</span><span lang="ZH-CN" style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial">计算的营业毛利同比增长</span><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW">17</span><span lang="ZH-CN" style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial">％</span><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW"><p /></span> </li><li class="MsoNormal" style="MARGIN: 0in 0in 0pt; COLOR: black; LINE-HEIGHT: 150%; mso-list: l0 level1 lfo1; tab-stops: list .5in"><span lang="ZH-CN" style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial">按照非通用会计准则（</span><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW">non-GAAP</span><span lang="ZH-CN" style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial">）计算的营业收入同比增长计算的完全摊薄每股收益（</span><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW">EPS</span><span lang="ZH-CN" style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial">）为</span><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW">0.47</span><span lang="ZH-CN" style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial">美元；按照通用会计准则</span><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW">GAAP</span><span lang="ZH-CN" style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial">计算的</span><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW">EPS</span><span lang="ZH-CN" style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial">为</span><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW">0.37</span><span lang="ZH-CN" style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial">美元 </span><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW"><p /></span></li><li class="MsoNormal" style="MARGIN: 0in 0in 0pt; COLOR: black; LINE-HEIGHT: 150%; mso-list: l0 level1 lfo1; tab-stops: list .5in"><span lang="ZH-CN" style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial">管理层将全年非通用会计准则（</span><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW">non-GAAP</span><span lang="ZH-CN" style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial">）</span><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW">EPS</span><span lang="ZH-CN" style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial">提高至</span><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW">1.64</span><span lang="ZH-CN" style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial">－</span><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW">1.66</span><span lang="ZH-CN" style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial">美元，将全年</span><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW">GAAP EPS</span><span lang="ZH-CN" style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial">提高至</span><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW">1.25</span><span lang="ZH-CN" style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial">－</span><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW">1.27</span><span lang="ZH-CN" style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial">美元</span><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW"><p /></span> </li><li class="MsoNormal" style="MARGIN: 0in 0in 0pt; COLOR: black; LINE-HEIGHT: 150%; mso-list: l0 level1 lfo1; tab-stops: list .5in"><span lang="ZH-CN" style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial">全年现金流指导数据提高到约</span><span style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial; mso-fareast-language: ZH-TW">2.1</span><span lang="ZH-CN" style="FONT-SIZE: 11pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: Arial">亿美元</span></li></ul></span>
	<br>   (<a href=http://www.pball.cn/pb/blog/index.php?articleid=a_20071106_183548 target=_blank> 网页浏览 </a>)
  ]]> 
</description>
</item><item rdf:about='http://www.pball.cn/pb/blog/index.php?articleid=a_20070919_143226'>
<title>PB真的快完了吗？</title> 
<link>http://www.pball.cn/pb/blog/index.php?articleid=a_20070919_143226</link> 
<description>
<![CDATA[ 
	好久不上陶清的网站，中午跑去一看：今日发贴才4个，在线也只有25人。真是今非昔比，凄凉得很呀。又突然看到这个帖子 - <strong>十大已亡或正在灭亡的电脑技术 PowerBuilder入选</strong><br /><a href="http://www.pdriver.com/bbs5/dispbbs.asp?boardID=14&ID=23714&page=1"><a href="http://www.pdriver.com/bbs5/dispbbs.asp?boardID=14&amp;ID=23714&amp;page=1" target="_blank">http://www.pdriver.com/bbs5/dispbbs.asp?boardID=14&amp;ID=23714&amp;page=1</a></a><br />然后还有个人回帖：让pb死的更快一点吧！该死!...<br /><br />无言。任何技术都有过时的时候，不过早晚而已。而我们在学习一门技术的时候，自然也同时承担了它未来被淘汰的风险。所以即使你不喜欢PB，也不必如此恶毒。或许你还曾经用她赚过些许银子呢，做人要厚道，即便是对一个软件，我们也有理由为她的离去而感到惋惜。
	<br>   (<a href=http://www.pball.cn/pb/blog/index.php?articleid=a_20070919_143226 target=_blank> 网页浏览 </a>)
  ]]> 
</description>
</item><item rdf:about='http://www.pball.cn/pb/blog/index.php?articleid=a_20070910_102955'>
<title>Sybase's TechWare 2007</title> 
<link>http://www.pball.cn/pb/blog/index.php?articleid=a_20070910_102955</link> 
<description>
<![CDATA[ 
	<p>每年Sybase都有一个叫TechWare的技术大会，不过好象只有在美国，所以大部分人都不知道。从人家网站上弄了点链接过来，有兴趣的可以看看这些Presentations，但我试了一下，好象比较慢，总是在Loading，呵呵。<br /></p><ul><li>Tuesday - <font style="COLOR: #3366ff" color="#00ccff"><a title="Unwired Enterprise - Opening Key note ..." href="http://s3.podiumsystems.com/sybase/techwave2007/keynote1.html" target="_blank">Unwired Enterprise</a></font> (John Chen)  </li><li>Wednesday - <font style="COLOR: #3366ff" color="#00ccff"><a title="Keynote - Next generation!" href="http://s3.podiumsystems.com/sybase/techwave2007/keynote2.html" target="_blank">Next Generation Platform</a></font> (Raj Nathan) </li><li>Thursday - <font style="COLOR: #3366ff" color="#00ccff"><a title="New Frontiers keynote #3 ..." href="http://s3.podiumsystems.com/sybase/techwave2007/keynote3.html" target="_blank">New Frontiers</a></font> (Raj Nathan)</li></ul><ul><li>Sybase Tool Experts - <a title="Application Development ..." style="COLOR: #3366ff" href="http://s3.podiumsystems.com/sybase/techwave2007/keynote4.html" target="_blank">Advancing the Boundaries of Development</a> (Raj Nathan) </li><li>Planery Session - <a title="Application Development futures ..." style="COLOR: #3366ff" href="http://s3.podiumsystems.com/sybase/techwave2007/pln01.html" target="_blank">How IT Developers will face the Future</a><span style="COLOR: #3366ff"> </span>(Jonathan Baker, et al) </li><li>Evangelists - <a title="PB 11 and .Net classes ..." style="COLOR: #3366ff" href="http://s3.podiumsystems.com/sybase/techwave2007/dev327.html" target="_blank">Using .Net Classes in PowerBuilder 11</a> (Dave Fish and Xue-Song Wu) </li><li>Technical Session - <a title="Best practices for Winform & Smart client .." href="http://s3.podiumsystems.com/sybase/techwave2007/dev318.html" target="_blank">Best Practices for PB 11 WinForm and Smart Client Applications</a> (Harry Zhang) 这个speaker是北京研发中心的</li><li>Technical Session - <a title="The DW in WebForm applications ..." href="http://s3.podiumsystems.com/sybase/techwave2007/dev325.html">The DataWindow in Webform Targets</a> (Frederick Koh) </li><li>Technical Session - <a title="SOA Creation in PB 11 ..." href="http://s3.podiumsystems.com/sybase/techwave2007/dev333.html" target="_blank">Service Creation</a> (Shiela Wood)</li></ul><p>还有这张图，左边那个是负责PB Development的Manager，新加坡那边的。<br /><img title="Me and Cao Lin (PB 11 Lead Engineer) at Techwave in the exhibit hall." height="288" alt="Cao Lin the lead Engineer on PB 11.net and I at the exibit hall." src="http://files.blog-city.com/files/M05/128508/p/f/chris_caolin.jpg" width="384" /><br /><br /><br /></p>
	<br>   (<a href=http://www.pball.cn/pb/blog/index.php?articleid=a_20070910_102955 target=_blank> 网页浏览 </a>)
  ]]> 
</description>
</item><item rdf:about='http://www.pball.cn/pb/blog/index.php?articleid=a_20070821_154507'>
<title>PowerBuilder 11 巡展</title> 
<link>http://www.pball.cn/pb/blog/index.php?articleid=a_20070821_154507</link> 
<description>
<![CDATA[ 
	<table cellspacing="0" cellpadding="5" width="87%" border="0"><tbody><tr><td valign="top" align="center" width="32%"><p class="style4"><font color="#cc0000" size="2"><strong>8月30日下午13:30-16:40</strong></font></p></td><td valign="top" align="center" width="12%"><p class="style4" align="center"><font color="#cc0000" size="2"><strong>上　海</strong></font></p></td><td valign="top" width="56%"><p><font size="2">新世界丽笙酒店　园景楼二楼宴会厅<br />上海南京西路88号（新世界百货旁）</font></p></td></tr><tr><td valign="top" align="center"><p class="style4"><font color="#cc0000" size="2"><strong>9月11日下午13:30-16:40</strong></font></p></td><td valign="top" align="center"><p class="style4" align="center"><font color="#cc0000" size="2"><strong>北　京</strong></font></p></td><td valign="top"><p><font size="2">新世纪饭店　二层中华厅</font></p></td></tr><tr><td valign="top" align="center"><p class="style4"><font color="#cc0000" size="2"><strong>9月13日下午13:30-16:40</strong></font></p></td><td valign="top" align="center"><p class="style4" align="center"><font color="#cc0000" size="2"><strong>广　州</strong></font></p></td><td valign="top"><p><font size="2">花园酒店　三楼菊花厅</font></p></td></tr></tbody></table><br />详情见：  <a href="http://www.sybase.com.cn/gvswse/site/china/content.jsp?_doc_id=2363"><a href="http://www.sybase.com.cn/gvswse/site/china/content.jsp?_doc_id=2363" target="_blank">http://www.sybase.com.cn/gvswse/site/china/content.jsp?_doc_id=2363</a></a> <br />早点注册，没准能领件衬衫什么的。
	<br>   (<a href=http://www.pball.cn/pb/blog/index.php?articleid=a_20070821_154507 target=_blank> 网页浏览 </a>)
  ]]> 
</description>
</item><item rdf:about='http://www.pball.cn/pb/blog/index.php?articleid=a_20070620_172428'>
<title>2006年增长最快的40家软件公司</title> 
<link>http://www.pball.cn/pb/blog/index.php?articleid=a_20070620_172428</link> 
<description>
<![CDATA[ 
	<div class="ssTitle">40 Fastest-Growing Software Companies</div><p>Rank 35 - Sybase</p><p><a href="http://www.cioinsight.com/slideshow_viewer/0,1205,l=&s=300&a=209412&po=6,00.asp?p=y"><img title="Sybase" height="116" alt="Sybase" src="http://common.ziffdavisinternet.com/util_get_image/17/0,1425,i=178584,00.jpg" width="150" border="0" /></a> </p><p>Full list on <a href="http://www.cioinsight.com/slideshow/0,1206,l=&s=&a=209412,00.asp"><a href="http://www.cioinsight.com/slideshow/0,1206,l=&amp;s=&amp;a=209412,00.asp" target="_blank">http://www.cioinsight.com/slideshow/0,1206,l=&amp;s=&amp;a=209412,00.asp</a></a></p>
	<br>   (<a href=http://www.pball.cn/pb/blog/index.php?articleid=a_20070620_172428 target=_blank> 网页浏览 </a>)
  ]]> 
</description>
</item><item rdf:about='http://www.pball.cn/pb/blog/index.php?articleid=a_20070620_171717'>
<title>PB11发布 JUNE 12, 2007 </title> 
<link>http://www.pball.cn/pb/blog/index.php?articleid=a_20070620_171717</link> 
<description>
<![CDATA[ 
	<p>详情见<a href="http://www.sybase.com/detail?id=1052603"><a href="http://www.sybase.com/detail?id=1052603" target="_blank">http://www.sybase.com/detail?id=1052603</a></a><br /><strong>Pricing and Availability</strong>    <br />Available now, new licenses for PowerBuilder 11 start at $2,995, with updates to older versions of PowerBuilder beginning at $1,495. For additional product information, or to place an order, please call 1-800-8-SYBASE, or visit: <a href="http://www.sybase.com/powerbuilder"><a href="http://www.sybase.com/powerbuilder" target="_blank">http://www.sybase.com/powerbuilder</a></a>. </p><p>不知道国内目前有没有买家, 反正陶清网站上的 <a href="http://www.pdriver.com/bbs5/dispbbs.asp?boardID=14&ID=22264&page=1">破解帖子</a> 人气狂高,呵呵.</p>
	<br>   (<a href=http://www.pball.cn/pb/blog/index.php?articleid=a_20070620_171717 target=_blank> 网页浏览 </a>)
  ]]> 
</description>
</item><item rdf:about='http://www.pball.cn/pb/blog/index.php?articleid=a_20070610_181028'>
<title>PB小助手3.5源码(for PB6)</title> 
<link>http://www.pball.cn/pb/blog/index.php?articleid=a_20070610_181028</link> 
<description>
<![CDATA[ 
	<p>经常有网友问PB小助手有没有for PB8的版本，考虑到大家的要求，所以我把PB6的源码发上来，有需要的自己去Migrate一下。注意这个版本和那个PB9的开源  <a href="http://sourceforge.net/projects/pbassistant/"></a><a href="http://sourceforge.net/projects/pbassistant/" target="_blank"><a href="http://sourceforge.net/projects/pbassistant/" target="_blank">http://sourceforge.net/projects/pbassistant/</a></a> 的程序文件不完全一样，因为当时为了上sourceforge加了英文界面，并且改了名称，但功能是一致的。</p><p><a href="up/1181470186.rar">PB小助手3.5源码(for PB6)下载</a></p>
	<br>   (<a href=http://www.pball.cn/pb/blog/index.php?articleid=a_20070610_181028 target=_blank> 网页浏览 </a>)
  ]]> 
</description>
</item><item rdf:about='http://www.pball.cn/pb/blog/index.php?articleid=a_20070608_163910'>
<title>PowerBuilder Roadmap &amp; WPF DataWindow</title> 
<link>http://www.pball.cn/pb/blog/index.php?articleid=a_20070608_163910</link> 
<description>
<![CDATA[ 
	<p>Copied from Sybase Newsgroup:<br /><br /><img src="http://files.blog-city.com//files/M05/128508/p/f/wpf_xaml_datawindow.jpg" /></p><p>WPF is a planned direction for PB 12. John Strano actually demonstrated a<br />working DataWindow at TechWave the other year at the key note address about<br />PB and its direction. John presented that demo to the Ottawa Sybase User<br />Group not too long ago. You can look at his WPF presentation from my Blog<br />site at:<br /><a href="http://files.blog-city.com//files/M05/128508/p/f/wpf_xaml_datawindow.jpg"><a href="http://files.blog-city.com//files/M05/128508/p/f/wpf_xaml_datawindow.jpg" target="_blank">http://files.blog-city.com//files/M05/128508/p/f/wpf_xaml_datawindow.jpg</a></a><br /><br /> This year, Dr Raj Nathan addressed the OSUG group. The presentation can be<br />downloaded at:<br /><a href="http://files.blog-city.com/files/M05/128508/b/appdevusergroupraj_v32.pps"><a href="http://files.blog-city.com/files/M05/128508/b/appdevusergroupraj_v32.pps" target="_blank">http://files.blog-city.com/files/M05/128508/b/appdevusergroupraj_v32.pps</a></a>.<br />This clearly shows the PowerBuilder direction in Sybase's current 4 phase<br />plan for PB.<br /><br /></p>
	<br>   (<a href=http://www.pball.cn/pb/blog/index.php?articleid=a_20070608_163910 target=_blank> 网页浏览 </a>)
  ]]> 
</description>
</item><item rdf:about='http://www.pball.cn/pb/blog/index.php?articleid=a_20070430_231308'>
<title>PB11 is coming</title> 
<link>http://www.pball.cn/pb/blog/index.php?articleid=a_20070430_231308</link> 
<description>
<![CDATA[ 
	<p>Really long time!  PB11终于快发布了。<br />还没看到官方消息，但这里说的应该也八九不离十。<a href="http://chrispollach.pbdjmagazine.com/osug__may_16.htm">May 16 - PB 11 Launch!</a><br />今天到了PBDJ的首页，居然那个什么<a title="read more" href="http://ajax.sys-con.com/read/281638.htm">&quot;AJAX Lacks a DataWindow&quot;</a>还在头条，简直不可思议！这更新速度，好象也跟我这个人博客差不多，这网站弄的。。。 <br /><br />Update 18/05/07:<br />&quot;Jim O'Neil [Sybase]&quot; &lt;<a href="mailto:joneil_@_sybase_dot_com">joneil_@_sybase_dot_com</a>&gt; wrote in message<br /><a href="news:r38n439o3guqfospvod42bbvl96j80eau1@4ax.com">news:r38n439o3guqfospvod42bbvl96j80eau1@4ax.com</a>...<br />&gt; Actually, we can now state without fear of reprisals &lt;g&gt; that the<br />&gt; release date of PowerBuilder is <strong>June 8th</strong>!  That includes Enterprise,<br />&gt; Professional AND Desktop.</p><p>Jim is a Principal Technical Support Engineer at Sybase, Inc. He has been with Sybase for over six years, concentrating on resolving customer issues with Sybase products including PowerBuilder, EAServer, and PowerJ. Prior to Sybase, Jim spent about 10 years working as a software engineer for two defense contracting firms. <br /></p>
	<br>   (<a href=http://www.pball.cn/pb/blog/index.php?articleid=a_20070430_231308 target=_blank> 网页浏览 </a>)
  ]]> 
</description>
</item><item rdf:about='http://www.pball.cn/pb/blog/index.php?articleid=a_20070103_162143'>
<title>Ajax需要DataWindow</title> 
<link>http://www.pball.cn/pb/blog/index.php?articleid=a_20070103_162143</link> 
<description>
<![CDATA[ 
	<p>看到这样一篇文章<a href="http://ajax.sys-con.com/read/281638.htm"><a href="http://ajax.sys-con.com/read/281638.htm" target="_blank">http://ajax.sys-con.com/read/281638.htm</a></a>，说IBM的<a href="http://www-03.ibm.com/developerworks/blogs/page/BobZurek">Bob Zurek</a>说Ajax就缺一个DataWindow！看来DataWindow还是名声在外的，不过或许也是因为他曾经与PowerSoft有些渊源的缘故。<br />平心而论，DataWindow确实强大易用，唯一的遗憾是不够时尚，这么些年了，还是一付90年代的老面孔，不能“与时俱进”，所以渐渐被人淡忘，这也是PB的老问题。</p><p>原话如下：</p><blockquote>&quot;AJAX frameworks currently lack a killer component like the DataWindow. Developers spend way to much time dealing with all the complexities that are easily handled by a component like the DataWindow. Over time, a rich DataWindow like component will emerge as part of an AJAX framework and I suspect that this will be the framework that everyone will want for simplifying data intensive AJAX applications.&quot; </blockquote>
	<br>   (<a href=http://www.pball.cn/pb/blog/index.php?articleid=a_20070103_162143 target=_blank> 网页浏览 </a>)
  ]]> 
</description>
</item><item rdf:about='http://www.pball.cn/pb/blog/index.php?articleid=a_20061214_100104'>
<title>PB小助手开源</title> 
<link>http://www.pball.cn/pb/blog/index.php?articleid=a_20061214_100104</link> 
<description>
<![CDATA[ 
	酝酿已久的开源终于完成，请访问 <a href="http://sourceforge.net/projects/pbassistant/"><a href="http://sourceforge.net/projects/pbassistant/" target="_blank">http://sourceforge.net/projects/pbassistant/</a></a> 获取免费版本及源码，感谢大家对PB助手的一贯支持，也请您继续关注本站，祝PB一路走好。<img src="http://www.pball.cn/pb/blog/img/emot/smile.gif" border="0" /> <br /><br />开源站上的是for PB9的，很多朋友问PB65的版本，在 这里<br /><a href="http://www.pball.cn/pb/blog/index.php?job=art&articleid=a_20070610_181028"><a href="http://www.pball.cn/pb/blog/index.php?job=art&amp;articleid=a_20070610_181028" target="_blank">http://www.pball.cn/pb/blog/index.php?job=art&amp;articleid=a_20070610_181028</a></a><br /><br />图片是老的<br /><img height="418" src="http://www.pball.cn/pb/images/PBFIND1.GIF" width="600" />
	<br>   (<a href=http://www.pball.cn/pb/blog/index.php?articleid=a_20061214_100104 target=_blank> 网页浏览 </a>)
  ]]> 
</description>
</item><item rdf:about='http://www.pball.cn/pb/blog/index.php?articleid=a_20061208_131948'>
<title>怀旧</title> 
<link>http://www.pball.cn/pb/blog/index.php?articleid=a_20061208_131948</link> 
<description>
<![CDATA[ 
	<p>在PowerBuilder的News group上发现这些古董级的相片，2.0 !!, 用过的同学举下手，呵呵 <img src="http://www.pball.cn/pb/blog/img/emot/laugh.gif" border="0" /><br />看来最开始的时候PowerSoft还是比较知道推广的重要性的，送个软盘还搭个鼠标垫。不晓得现在买，Sybase是不是送个T恤，水杯什么的……</p><p><span id="codest"><img src="http://www.pball.cn/pb/blog/up/1165554140.jpg" /></span></p><p><span></span></p><p><span><img src="http://www.pball.cn/pb/blog/up/1165554189.jpg" /></span></p>
	<br>   (<a href=http://www.pball.cn/pb/blog/index.php?articleid=a_20061208_131948 target=_blank> 网页浏览 </a>)
  ]]> 
</description>
</item><item rdf:about='http://www.pball.cn/pb/blog/index.php?articleid=a_20061128_140815'>
<title>PowerBuilder CodeXchange</title> 
<link>http://www.pball.cn/pb/blog/index.php?articleid=a_20061128_140815</link> 
<description>
<![CDATA[ 
	<a href="http://powerbuilder.codexchange.sybase.com"><a href="http://powerbuilder.codexchange.sybase.com" target="_blank">http://powerbuilder.codexchange.sybase.com</a></a> Sybase的PB开源站点（姑且这么叫吧，虽然PB很不适合开源），里面有不少洋人的例子，有兴趣的可以去看看，不过要先注册。
	<br>   (<a href=http://www.pball.cn/pb/blog/index.php?articleid=a_20061128_140815 target=_blank> 网页浏览 </a>)
  ]]> 
</description>
</item><item rdf:about='http://www.pball.cn/pb/blog/index.php?articleid=a_20061128_135051'>
<title>PB DataWindow 技巧大全</title> 
<link>http://www.pball.cn/pb/blog/index.php?articleid=a_20061128_135051</link> 
<description>
<![CDATA[ 
	<p>摘自 <a href="http://blog.csdn.net/yxf006/archive/2006/07/28/992237.aspx"><a href="http://blog.csdn.net/yxf006/archive/2006/07/28/992237.aspx" target="_blank">http://blog.csdn.net/yxf006/archive/2006/07/28/992237.aspx</a></a><br />为了方便阅读，大致整理了一下，希望以后能添加更多的进来。未经一一验证，不保证完全好用 ;) 不过大部分应该没有问题，因为很多都是最基本的技巧。</p><p>1 使DataWindow列只能追加不能修改 <br />如何使DataWindow中的数据只能追加新记录而不能修改，利用 Column 的 Protect 属性可以很方便的做到这一点，方法如下：<br />将每一列的 Protect 属性设置为：<br />If( IsRowNew(), 0, 1) ) <br />在 PowerScript 中可以动态修改 Protect 属性：<br />dw_1.Modify(&quot;column_name_here.Protect='1~tIf(IsRowNew(),0,1)'&quot;) <br />这样，DataWindow 中只有新追加的记录可修改，而其他记录是只读的。 </p><p>2 如何在DataWindow中实现列的自动折行<br />我们在PowerBuilder应用程序的开发过程中, 使用DataWindow时, 经常会遇<br />到某列的数据太长, 不能同时全部显示的情况. 若采用自动水平滚动, 操作起<br />来又不够简便. 下面介绍一种方法, 实现列数据多行显示, 即实现列数据的自<br />动折行.具体步骤如下:<br />1) 在DataWindow Painter中打开此DataWindow.<br />2) 在需设定自动折行的列上双击鼠标, 弹开此列的属性窗口.<br />3) 选择Position标签, 选中Autosize Height 多选框.<br />4) 选择Edit标签, 不选中Auto Horz Scroll多选框.<br />5) 单击OK按钮, 保存所做的修改.<br />6) 点中Detail Band (即写有Detail的灰色长带), 单击鼠标右键, 选择<br />Properties... 菜单项.<br />7) 选中Autosize Height多选框.<br />8) 单击OK按钮, 保存所做的修改.<br />9) 保存此DataWindow.<br />注意:<br />连在一起的汉字(中间没有标点或空格分隔), 系统将认为是一个单词, 不<br />会自动进行折行. <br /> <br />3 在数据窗口中实现动画<br />要实现动画，必须要有定时器，在数据窗口中已经有了一个定时器，双击数据窗口将弹出的对话框，在Timer Interval中定义大于零的值就有定时器（可以精确到毫秒），有了这个定时器就可以实现动画了。比如要改变某字段的背景颜色，可设 <br />ackgound.color=RGB(Integer(Right(string(now(),'hhmmssf'),1))*256/10,Integer(Right(string(now(),'hhmmssf'),1))*256/10,0) <br />　　当然，您不仅可以改变背景颜色，而且可以改变字体等等任何属性，使他可以动起来！ <br /> <br />4 使数据窗口中的被选中行具有更好的外观<br />大家都知道，在选择数据窗口中的某一行时，如果使用pb提供的选择函数SelectRow()，那么的外观真是不能恭维，单调而古板的蓝色背景，可能和您的漂亮而生动的应用程序格格不入。有没有办法改变呢？当然有啰，请听我慢慢道来。 <br />　　 改变某一行的背景比较简单，改变每一列的背景属性(backgroundcolor)即可，可要根据鼠标选择情况自动改变，并可以返回被选中的行可能还需要一定的技巧。下面分单行选择和多行选择分辨说明。 <br />单行选择 <br />　　单行选择比较简单，我们只要将所有字段的背景色的表达式改为：<br />if(GetRow()=CurrentRow(),RGB(255,126,0),RGB(0,0,0))<br />　　其中第一个颜色为被选中的颜色，第二个颜色未被选中的颜色。然后用GetRow()代替GetSelectedRow()函数来得到被选中的行。  <br />多行选择<br />　　多行选择比较复杂，如果单纯依靠改变数据窗口的属性没法实现，我们必须使用数据窗口属性和代码结合起来才能实现<br />　 首先，改变数据窗口的SQL语句，增加一个计算字段:0 as flag,Select 语句改为：<br />Select col1,col2 ,1 as flag from tablename where .....，<br />　　当返回数据窗口painter时，您就会发现多了一个字段flag,我们就是利用这个字段保存行被选中的信息。 <br />　　其次，修改各个字段的背景颜色属性，设置为：if(flag=1,RGB(255,126,0),RGB(255,255,255)) <br />　　第三：在数据窗口控件中，增加对clicked 事件的处理，代码如下：<br />if row&lt;1 then return // setredraw(false)<br />if this.o b j e c t.flag[row]=1 then //如果该行被选中，撤销选择，否则选中该行 <br />　this.Object.flag[row]=0<br />else <br />　this.Object.flag[row]=1<br />end if <br />setredraw(true) </p><p>您还可以定制本选中行的字体，文本属性等等。原理相同，不再赘述。 <br /> <br />5 将日期型字段初始化为当天的日期 <br />　 　使用 Column Specifications 对话框来设置数据的初始值是一个比较好又比较通用的方法。 为了将日期型字段初始化为当天的日期，只要设置初始化值为today,而不是today()即可。同样设置初始值为NUll,可以使用null,而不是 null()。 <br /> <br />6 在DataWindow中调整列顺序<br />在 Gird 风格的 DataWindow 中,列的排列顺序是按照你选择 Column 的顺序排列的,并且不能改变.要改变列的顺序则必须重新制作 DataWindow. <br />最近我发现一个办法可以改变列的顺序: 在 DataWindow 画板中打开要修改的 DataWindow,然后按 'Preview' 按钮切换到预览模式下,选择要移动的列标题并拖动到预定位置,然后返回 DataWindow 画板,存盘即可. <br /> <br />7 Retrieve时不清除原有Datawindow数据<br />当你调用Retrieve函数，PowerBuilder自动清除原有DataWindow然后Retrieve数据。在Datawindow RetrieveStart事件中，使用Return 2，这样PowerBuilder不会清除原有数据而是追加新数据。 <br /> <br />8 美化DataWindow的显示效果<br />使DataWindow 的单双行显示颜色不同，不仅仅可以使你的应用程序更显专业性，并使数据的可读性增强。先调出你需要改动的DataWindow，在Detail band按下右键选择Properties，选择Tab页中的Expressions，在color属性中输入下面内容：（注意是在Detail明细显示 段按右键，而不是在Column上) IF(MOD(GETROW(),2)=0,RGB(192, 192, 192), RGB(255, 255, 255)) 马上Preview一下，看一看效果如何。 <br /> <br />9 用Line建立漂亮的Grid DataWindow的技巧<br />虽然PowerBuilder有Grid风格的DataWindow，但不够灵活，如果想打印一张边框粗线条或双线，内框为细线条的表格直接使用Grid风 格的DataWindow就不能实现。因此许多人都用Tabular风格的DataWindow，然后自己用Line来实现Grid。 在调整线条位置是一个即伤脑筋又伤眼睛的事件，而一旦需要调整行高，所有工作都得重来，试一试用下面方法，会大大减轻你的工作量： 在vertical lines，改变它的属性，在Expressions Tab上，y1行上输入0，y2行上输入rowheight() - 1 在horizontal lines, 设置 y1 和 y2 = rowheight() - 5 这样PowerBuilder会自动调整线的坐标，你只需要设置横线的长度和x1,x2的坐标即可。 马上Preview一下，看一看效果！ 你再也不需要因为行的高度发生改变而重新调整线条位置。 <br /> <br />10 如何创建一个报表，如下形式 <br />Quantity Running Total <br />5,000 5,000 <br />2,500 7,500 <br />3,000 10,500 <br />12,000 22,500<br />　　对于Running Total列，我们可使用计算列：CumulativeSum（Quantity for all），即可达到逐渐递增求和的功能。</p><p>11 数据窗口的数据送缓冲区之前确认的四个步骤 判断数据类型是否正确。如不正确则触发ItemError事件。判断数据是否符合有效性规则。如不符合有效性规则，同样触发ItemError事件。 判断是否有数据被改动。判断数据是否通过ItemChanged事件，如果数据和ItemChanged相斥，将触发ItemError事件。</p><p>12 如何在DataWindow中用数据类型为Datetime的列为条件进行查找<br />　　1．当要查找的日期条件是一常数时使用如下表达式：<br />　　　ls_Find = &quot;datetime_col<br />　　 　= DateTime ('1/1/1999')&quot;<br />　　2．当要查找的日期条件是一个变量时使用如下的表达式：<br />　　　ls_Find = &quot;datetime_col = DateTime ('&quot; + ls_Date + &quot;')&quot; <br />　　3．当要查找的日期条件是一个DateTime数据类型时使用如下表达式： <br />　　　ls_Find = &quot;datetime_col = DateTime ('&quot; + String (ldt_DateTime) + &quot;')&quot;</p><p>13 设置数据窗口Boolean型属性的三种方法<br />　　PowerBuilder提供了三种方法设置数据窗口的布尔型属性，分别是True/False, 1/0, 'Yes'/'No'。例如: <br />dw_1.Object.address.Visible = 0 dw_1.Object.address.Visible = False dw_1.Object.address.Visible = 'No'<br />　　PowerBuilder在处理上以字符串的形式保存属性，而不考虑属性值是布尔型、长整型或是字符型。<br />为了进一步理解，可以导出一个数据窗口并查看它的原码，可以发现即使是列的颜色属性它也是使用带双引<br />号的数字来表达。</p><p>14 如何在DataWindow中快速删除多行<br />　　在开发过程中可能经常有要进行多行删除的操作，一般都使用循环语句进行操作：<br />FOR ll_RowOn = 1 TO dw_1.RowCount() dw_1.DeleteRow(ll_RowOn) NEXT<br />　　一个快速的删除方法是把要删除的行从主缓冲区中移到删除缓冲区中。例如，删除缓冲区中所有的行：<br />dw_1.RowsMove(dw_1, 1, dw_1.RowCount, Primary!, dw_1, 1, Delete!)<br />　　不过不要忘了过滤的行在不同的缓冲区中。</p><p>15 如何在DataWindow的SQL语法中不使用SELECT DISTINCT实现删除重复的行<br />　　起先对你要显示唯一值的列进行排序：&quot;city A&quot;，然后增加如下过滤字符串：&quot; city &lt; &gt; city [-1] or GetRow () = 1&quot;</p><p>16 如何在分组形式的DataWindow中分别显示各组的行号<br />　　当我们为Datawindow的每一行显示行号时，可以简单的放一个表达式为GetRow()计算列。但是对于分组的Datawindow，要分别显示各组的行号，则应使用表达式为<br />GetRow() - First(GetRow() for Group 1) + 1的计算列。</p><p>17 如何改变列的字体颜色，提醒用户此列已做修改<br />　　在列的Color属性中，输入如下表达式<br />IF (column_name &lt; &gt;column_name.Original, RGB(255, 0, 0), RGB(0, 0, 0))。<br />　　在这个条件中，如果此列已改变，则显示红色字体，否则显示黑色字体。这个表达式主要用column_name &lt; &gt; column_name.Original比较当前列的值和原始列的值是否相同来达到判断的目的。</p><p>18 在数据窗口中移走行,但不是去做过滤或删除操作 <br />　　RowsDiscard()函数可做到这一点,它在数据窗口中执行移除工作,但被移走的行它不可被删除或做任何修改性的保存。 <br /> <br />19 如何在多行显示的DataWindow 中的Footer Band中显示当前数据的首行和最后行的行号<br />　　我们先看两个计算列的表达式： IF (GetRow() = First(GetRow() FOR Page), 1, 0) // 1 为当前页的第一行<br />IF (GetRow() &lt; &gt; 1 AND GetRow() = Last(GetRow() FOR Page), 1, 0) // 1 为当前页的最后一行<br />　　由上面可知，在Footer Band中设置如下计算列表达式：<br />'Rows ' + String(First(GetRow() FOR Page)) + ' to ' + String(Last(GetRow() FOR Page)) + ' are displayed'。<br />即可达到这项功能。 <br /> <br />20 使可编辑的数据窗口只读 <br />有时，你可能需要将一个用于编程的数据窗口用作显示目的，可以有以下几种方法来实现这一要求：<br />1.建立两个数据窗口，一个用于编辑，一个用于显示<br />2.将数据窗口中的全部对象的taborder设置为0.<br />3.也可以将数据窗口中的列的protect属性设为On或Off,但你不能使用protect属性进行编辑操作<br />4.数据窗口有一个将datawindow设为只读的属性(readonly)，使用它最方便。 <br /> <br />21 数据窗口检查重复行<br />dw_1.SetSort (&quot;user_id A&quot;)<br />dw_1.Sort()<br />dw_1.SetFilter (&quot;user_id = user_id[-1]&quot;)<br />dw_1.Filter()<br />if dw_1.RowCount() &gt; 0 then<br />  Messagebox(&quot;注意&quot;, &quot;用户编码重复.&quot;)<br />end if<br />dw_1.SetFilter (&quot;&quot;)<br />dw_1.Filter() <br /> <br />22 如何在分组形式的DataWindow中分别显示各组的行号<br />---- 当我们为Datawindow的每一行显示行号时，可以简单的放一个表达式为GetRow()<br />---- 计算列。但是对于分组的Datawindow，要分别显示各组的行号，则应使用表达式为<br />GetRow() - First(GetRow() for Group 1) + 1的计算列。 <br /> <br />23 如何能让数据窗口的某几列在其他列横拉时固定不动<br />      //////////////////////////////////////////////////////////////// <br />//  功能说明：用于冻结左边的滚动栏 <br />//  变更记录: 变更或版本更新的时候 <br />//   <br />//////////////////////////////////////////////////////////////// <br />int i <br />if pane = 1 then <br />i = integer(this.o b j e c t.datawindow.horizontalscrollposition2) <br />if i &lt; 1 or isnull(i) then return <br />if scrollpos &gt; 0 then <br />this.o b j e c t.datawindow.horizontalScrollPosition = 0 <br />end if <br />else <br />i = integer(this.Object.DataWindow.HorizontalScrollSplit) <br />if i &lt; 1 or isnull(i) then return <br />if i &gt; scrollpos then <br />this.o b j e c t.datawindow.horizontalScrollPosition2 = i <br />end if <br />end if <br /> <br />24 在数据窗口中如果要使其中一列的属性为只读，也就是不允许用户修改，那么只需简单地将这一列的Table Order 设置成0就可。然而，在有些情况下<br />需要对这一列的某些行修改，而某些行不能修改，这就要用到这一列的protect属性了。打开列的属性中的Expressions，在protect中输入条件判别<br />式。例如：允许用户修改新增加的记录，而检索出来的记录则不允许修改。条件判别式可以写成如下：<br />if(isRowNew(),0,1)  <br />在 PowerScript 中可以动态修改 Protect 属性：<br />dw_1.Modify(&quot;column_name_here.Protect='1~tIf(IsRowNew(),0,1)'&quot;) <br />这样，DataWindow 中只有新追加的记录可修改，而其他记录是只读的。 <br /> <br />25 控制DATAWINDOW里每页显示的行数<br />1、在Datawindow中增加一个计算域，起名为：ceil_page,此计算域必须放在Detail段中，<br />Expression中输入 ceiling(getrow()/25) 25表示每页打印25行，也可以是一个参数。<br />2、分组,选择菜单Rows\Create Group,选择ceil_page<br />按ceil_page分组，并选中New Page On Group Break(意思是新组开始时换页)。<br />3、将此计算域设为隐藏(在属性页中的expression页中在visible属性中写0)。<br />4、补空行：<br />在窗口的open事件中写如下代码： <br />long li_count,li_i <br />li_count=dw_1.retrieve() <br />if mod(li_count,25)&lt;&gt;0 then<br />for li_i=1 to 25 - mod(li_count,25) <br />dw_1.insertrow(0) <br />next <br />end if <br /> <br />26 数据窗口的closeQuery事件:提示保存数据<br />dw_1.AcceptText()<br />IF dw_1.ModifiedCount() + dw_1.DeletedCount() &gt; 0 THEN<br />CHOOSE CASE MessageBox(&quot;操作提示&quot;,&quot;数据已经发生变化,是否保存?&quot;,Question!,YesNoCancel!,1)<br />CASE 1<br />cb_save.TriggerEvent(clicked!)<br />CASE 2<br />Return 0//不做任何操作直接关闭窗口<br />CASE 3<br />Return 1//不会运行Close Event,维持原来的情况<br />END CHOOSE<br />END IF </p><p>27 Getchild函数主要被用来得到一个数据窗口的子数据窗口<br />该函数在两种情况下可以使用，1、取出数据窗口对象的下拉式数据窗口；<br />                            2、取出复合风格（composite）数据窗口对象里所嵌入的子数据窗口对象。<br />语法：integer dwcontrol.GetChild (string name, REF DataWindowChild<br />     dwchildvariable ) </p><p>例子1  这段程序取出一个composite数据窗口对象的两个子数据窗口，并对他们进行过滤，和排序的操作。</p><p>/*dw_dy是连接一个composite数据窗口对象的一个数据窗口控件。dw_1、dw_2分别是嵌套的数据窗口的NAME*/</p><p>String ls_filter<br />DataWindowChild dwc_czrw,dwc_czx//定义子数据窗口变量<br />dw_dy.Settranso b j e c t(sqlca)<br />dw_dy.Retrieve()<br />dw_dy.GetChild(&quot;dw_2&quot;,dwc_czrw)<br />dw_dy.Getchild(&quot;dw_1&quot;,dwc_czx)<br />ls_filter = &quot;czrw_bh = '&quot;+dw_3.GetItemString(dw_3.GetRow(),&quot;czrw_bh&quot;)+&quot;'&quot;//过滤条件<br />dwc_czrw.SetFilter(ls_filter)<br />dwc_czrw.Filter()<br />ls_filter = &quot;czx_rwbh = '&quot;+dw_3.GetItemString(dw_3.GetRow(),&quot;czrw_bh&quot;)+&quot;'&quot;<br />dwc_czx.SetSort(&quot;czx_sx A&quot;)<br />dwc_czx.Sort()<br />dwc_czx.SetFilter(ls_filter)<br />dwc_czx.filter()<br />当然也可以通过数据共享(ShareData)等方式操作子数据窗口中的数据。<br />访问复合数据窗口对象.方法 ：dw_dy.o b j e c t.dw_1.o b j e c t.对象<br />例子2   下拉数据窗口动态过滤<br />  在数据窗口dw_1的ItemFocusChanged事件中写入如下脚本：<br />Integer rtncode<br />String ls_nowFld,ls_deptid,ls_sql<br />DataWindowChild fld_child<br />rtncode = dw_1.GetChild(&quot;Unit_id&quot;,fld_child) //获得Unit_id字段名下拉数据窗口的句柄<br />If rtncode = -1 Then MessageBox(&quot;错误!&quot;, &quot;不是下拉数据窗口!&quot;)<br />fld_child.SetTransObject(SQLCA) //设置事务对象<br />ls_sql = Lower(fld_child.GetSQLSelect())// 获得DDDW的SQL语句<br />// 去除Sql 语句中的Where条件子句， 如原Sql 语句中须有Where条件子句，此处则需进行较<br />//复杂的处理，应视具体情况而定。<br />if Pos(ls_sql, &quot; where &quot;)&gt;0 then ls_sql = Left(ls_sql,Pos(ls_sql, &quot; where &quot;))<br />//重新设置Sql 语句中的Where条件子句<br />ls_deptid=dw_1.Object.dept_id[GetRow()] //取得当前dept_id选定值<br />ls_sql = ls_sql + &quot; Where dept_id = '&quot; +Trim(ls_deptid)+&quot;'&quot;<br />//重新设置Sql 语句<br />fld_child.SetSQLSelect(ls_sql)<br />fld_child.Retrieve()//取得满足条件的数据 <br /> <br />28 从数据窗口中获取数据<br />   单条：假设我们要读取dept_id字段的第一笔数据，可以用下列方式表示∶li_id = dw_1.o b j e c t.dept_id[1]<br /> 假设我们要读取第一行中第二个字段的数据，可以用下列方式表示∶ls_name = dw_1.o b j e c t.DATA[1,2]<br /> 假设我们要读取dept_id字段的所有数据，可以用下列方式表示∶li_array = dw_1.o b j e c t.dept_id.CURRENT<br /> 假设我们要读取过滤缓冲区 (filter buffer) 内dept_id字段的第一笔数据，可以用下列方式表示∶li_id = dw_1.o b j e c t.dept_id.Filter<br />[1]<br /> 假设我们要读取从第二笔数据的第一个字段到第三笔数据的二个字段之间的数据，表示∶lstr_array = dw_1.o b j e c t.DATA[2,1,3,2]<br /> 假设我们要读取整个第二笔的数据，可以用下列方式表示∶lstr_dept = dw_1.o b j e c t.DATA[2]<br />       使用GetItemX ( )函数  x为string number等  <br />  lstr_name = dw_1.getitemstring (li_count , &quot;emp_name&quot;)  li_count为哪一条<br />  多条：string ls_name[ ]<br />       ls_name = dw_ 1.o b j e c t.emp_name.current<br />数据的读取   一般格式∶数据窗口控件.Retrieve ( )  返回个数 ，-1为错误<br />增加数据    数据窗口控件.InsertRow (行数)   参数为0加到最后<br />数据的删除        数据窗口控件.Deleterow (行数)<br />数据的过滤l   数据窗口控件.SetFilter (条件字符串).    <br />  数据窗口控件.Filter ( ) 用法∶将主要缓冲区 (Primary Buffer) 内不符合过滤条件的数据移到过滤缓冲区 (Filter Buffer) <br />内。<br />             例子：string ls_exp   ls_exp = &quot;dept_id = 100&quot;   dw_1.SetFilter (ls_exp)      dw_1.Filter ( )<br />排序    dw_1.SetSort (&quot;dept_id&quot;)     dw_1.Sort ( )<br />将数据从所有的缓冲区 (Buffer) 中清除    dw_1.ReSet ( )<br />计算数据数目。例如∶dw_1.Rowcount ( )  类似： .DeletedCount ( ) .ModifiedCount ( ) .FilteredCount ( )<br />数据窗口的滚动  数据窗口控件.ScrollToRow (行数) <br /> <br />29 数据窗口属性改变：<br />   描述数据窗口对象本身颜色，可以表示如下∶long ll_color    ll_color = dw_emplist.Describe (&quot;DataWindow.Color&quot;)<br />    描述数据窗口对象内标题 dept_id_t 的颜色，可以表示如下∶long ll_color   ll_color = dw_emplist.Describe (&quot;dept_id_t.Color&quot;)<br />    修改数据窗口对象本身颜色，可以表示如下:dw_emplist.Modify (&quot;DataWindow.Color = 255&quot;)<br />    修改数据窗口对象内标题 dept_id 的颜色，可以表示如下∶dw_emplist.Modify (&quot;dept_id_t.Color = 255&quot;)<br />    假设当我们希望在程序运行阶段才给予下行条件∶薪水超过 50000 时显示红色，低于 50000 时显示黑色。程序的写法如下∶<br />       ls_modstring = &quot;Salary.Color = '0~tIf (Salary &gt; 50000，255，0) '&quot;<br />       dw_1.modify (ls_modstring) <br /> <br />30 得到当前鼠标所指对象所在的带区<br /> string str_band<br /> str_band=GetBandAtPointer() //得到当前鼠标所指对象所在的带区<br /> str_band=left(str_band,(pos(str_band,'~t') - 1))//得到&quot;header&quot;、&quot;detail&quot;等<br />        if str_band&lt;&gt;'header' then return //单击非头区，退出<br />31 得到鼠标指向的列对象名<br /> str_o b j e c t=GetObjectAtPointer() //得到当前鼠标所指对象名<br /> str_o b j e c t=left(str_o b j e c t,(pos(str_o b j e c t,'~t') - 1))<br />        //得到列对象名(默认为列名_t为列标题)<br /> str_column=left(str_o b j e c t,(len(str_title) - 2))<br /> //判断该名称是否为列名字<br /> if this.describe(str_column+&quot;.band&quot;)='!' then return //非是列名，即列标题不是按正常规律起名的。<br />                                                              <br />32 得到当前行、列，总行、列  //this 针对数据窗口而言<br />        li_col      = this.GetColumn()<br />        li_ColCount = long(describe(this,&quot;datawindow.column.count&quot;))<br />        ll_row    = this.GetRow()<br />   ll_RowCount = this.RowCount()<br />       //设置当前行、列 <br />       scrolltorow(this,ll_Row)<br />       setrow(this,ll_Row)<br />       setcolumn(this,li_col) <br />       this.SetFocus()</p><p>33 得到所有列标题<br /> ll_colnum = Long(dw_1.o b j e c t.datawindow.column.count)<br />        for i = 1 to ll_colnum<br />  //得到标题头的名字<br />  ls_colname = dw_1.describe('#' + string(i) + &quot;.name&quot;) + &quot;_t&quot;<br />           ls_value = dw_1.describe(ls_colname + &quot;.text&quot;)<br /> next</p><p>34 如何用代码取得数据窗口汇总带计算列的值?　　<br />   String ls_value<br /> ls_value = dw_1.Describe(&quot;Evaluate(&quot;'compute_1',1)&quot;)<br /> 如果是数值型，要转换。 <br /> <br />35 取得单击的列标题、列名、数据库字段名<br />string ls_dwo<br />long ll_pos<br />string ls_type<br />string ls_title<br />string ls_column<br />string ls_dbname<br />if Not KeyDown(KeyControl!) then  return<br />ls_dwo = dwo.Name<br />if trim(ls_dwo) = '' or isnull(ls_dwo) then return<br />ls_type = This.describe(ls_dwo + '.type')<br />if ls_type = 'column' then<br /> ls_title =  This.describe(ls_dwo + '_t.text')//标题<br /> ls_column = This.describe(ls_dwo + '.Name')  //数据窗口列名<br /> ls_dbname = This.describe(ls_dwo + '.dbname') //数据库中字段名<br /> messagebox('信息',    '标 题 文 本   ：' + ls_title + &amp;<br />       '~r~n数据窗口列名  ：' + ls_column + &amp;<br />       '~r~n数据库中字段名：' + ls_dbname )<br />end if</p><p>36 窗口为w_gcde内，放入一个DW_1，如何得到dw_1内的某列值yuonghu_id列的内容<br />方法： <br />long lng_column_count <br />   integer i <br />   string str_column[]         //列名 <br />   string str_column_text[]　　//text的名字 <br />　　//得到数据窗口的总列数 <br />　　lng_column_count = long(dw_1.Describe(&quot;DataWindow.Column.Count&quot;)) <br />　　//循环依次读取 <br />　　for i = 1 to lng_column_count <br />   　　str_column[i] = dw_1.Describe(&quot;#&quot;＋string(i)＋&quot;.name&quot;) <br />　　    str_column_text[i] = dw_1.Describe(str_column[i] ＋ &quot;_t.text&quot;) <br />　　next </p><p>37 在DDDW中实现当前高亮行随鼠标移动<br />DataWindowChild ldwc_Child<br />String ls_Pointer<br />Long ll_Row</p><p>GetChild( &quot;dept_id&quot;, ldwc_Child ) // Replace the column name &quot;dept_id&quot; as you needed</p><p>IF hwndchild = Handle( ldwc_child ) THEN<br />    if notificationcode = 2311 then //DDDW的mousemove事件<br />        //得到鼠标所在行<br />        ls_Pointer = ldwc_Child.GetObjectAtPointer()<br />        ll_Row=Long( Mid( ls_Pointer, Pos( ls_Pointer, &quot;~t&quot; ) + 1 ))<br />        //移到鼠标所在行<br />        IF ldwc_Child.GetRow() &lt;&gt; ll_Row AND ll_Row &gt; 0 THEN<br />            ldwc_Child.ScrollToRow( ll_Row )<br />        END IF<br />    end if<br />END IF <br /> <br />38 实现打印完一个DataWindow后不换页<br />首先将datawindow的print输出到一个打印文件中，把其他的print也输入这个prn，然后,打印这个打印文件就行了。<br />如：<br />datawindow_control1.object.datawindow.print.filename=&quot;c:\printfilepath\exam_1.prn&quot;<br />datawindow_control2.object.datawindow.print.filename=&quot;c:\printfilepath\exam_1.prn&quot;<br />dw_1.print()<br />dw_2.print()<br />run(&quot;print //d:\\printservename\sharename &quot;c:\printfilepath\exam_1.prn&quot;)<br />//d:\\printservename\sharename打印机名</p><p> <br /> </p>
	<br>   (<a href=http://www.pball.cn/pb/blog/index.php?articleid=a_20061128_135051 target=_blank> 网页浏览 </a>)
  ]]> 
</description>
</item><item rdf:about='http://www.pball.cn/pb/blog/index.php?articleid=a_20061121_092635'>
<title>无法升级到PowerBuilder10.x的原因及解决方法</title> 
<link>http://www.pball.cn/pb/blog/index.php?articleid=a_20061121_092635</link> 
<description>
<![CDATA[ 
	<p align="left">我自己也碰到这种问题，一直怀疑是中文字符问题，如果真是下面说的这个原因的话，那应该是PB10的一个大Bug，因为PFC在国外应用很广泛，难道没人向Sybase提过？<br /><br />摘自 <a href="http://blog.csdn.net/shuchengma/archive/2006/11/17/1390055.aspx"><a href="http://blog.csdn.net/shuchengma/archive/2006/11/17/1390055.aspx" target="_blank">http://blog.csdn.net/shuchengma/archive/2006/11/17/1390055.aspx</a></a></p><div style="CLEAR: both"></div><script></script><div class="post"><div class="postTitle">PowerBuilder7、8、9程序无法升级到PowerBuilder10.x的原因及解决方法</div><div class="postText"><p>PB7/8/9升级到PB10 的问题主要是: 源码中包含了特殊ASCII码字符导致，PB对象的源码无法被PB10顺利导入，导入时出错，而PB10没有任何解决方法给出。经过分析发现，当导入的源码中包含扩展区的ASCII码时，PB10导入出错。</p><p>例如，我们在升级基于PB9的PFC库的时候，发现无法升级到PB10。经过分析发现，原始的PFC库中大概有200个对象的注释中，包含了版权符号(c) (ASCII码是A9)，PB编辑环境里只能显示一个问号。还有几个是ASCII码为A0、91、92的符号。这些符号在PB编辑环境里有时显示乱码。</p><p>升级步骤：<br />1、用Pwrgn#.exe（#代表7/8/9/10/105，分别对应不同版本的PB程序）批量导出所有的PB对象后，<br />用WinHex软件搜索包含十六进制A9、A0、91、92ASCII码的文件，然后将这几个字符替换为空格(ASCII码为20)<br />2、改完后，用Pwrgn#.exe重新导入所有对象。<br />3、用PB10或10.5重新移植PB程序。就可以尝试升级了。</p><p>用此方法，顺利将PB9的PFC库升级到PB10。<br />   </p></div></div>
	<br>   (<a href=http://www.pball.cn/pb/blog/index.php?articleid=a_20061121_092635 target=_blank> 网页浏览 </a>)
  ]]> 
</description>
</item></rdf:RDF>
