软件定制 成功研发:ERP系统,OA系统,CRM系统,进销存,外贸进销存销售系统,项目管理系统 

 
 

首   页  |  成功案例  |  关于我们  |  软件产品  |  软件定制  |  编程知识  |  行业知识  |  WEB开发  |  联系我们

 
     
在PB中实现全文检索  
 

  <pclass\"a14\">PowerBuilder(以下简称PB)是程序员常用的开发工具之一,PB的DataWindow为编程人员提供了一个方便直观的数据处理工具,但对一些特殊文档的处理,用PB自身去实现十分困难,若能利用Wd强大的文档处理功能却能达到意想不到的效果。下面笔者介绍如何在PB中调用Wd以实现对Wd文档的全文搜索。</p>
<pclass\"a14\">从VBA到PowerScript<imgalt\"\"align\"right\"src\"http://www2.ccw.com.cn/02/0249/d/pic/d16_1t1.jpg\"/></p>
<pclass\"a14\">PB与Wd结合的基础是微软的自动化技术(OLEAutomation),通过OLE将数据从PB传至Wd,再借助Wd本身具有的VBA功能可完成许多复杂的任务。通过OLE技术实现PB对Wd的控制,必须先将VBA语句转换为PB所能识别的Powerscript语句。此处有个简单的办法可以获得正确的VBA语句:</p>
<pclass\"a14\">打开Wd工具菜单中宏子菜单的录制宏命令,命名后保存,然后返回至Wd主窗口,此时可以在主窗口的左上角看到宏的悬浮菜单,接着进行所需要的操作(如键入字符串、改变字体颜色、插入书签、查找特定字符串等操作),关闭宏。接下来再到工具菜单中的宏子菜单中选择VisualBasic编辑器,进入宏编辑器,此时可以看到刚才所有操作的VBA代码。</p>
<pclass\"a14\">注:如果想详细地了解VBA语法,可以参考Wd本身提供的帮助文件(Office目录下2052文件中的VBAWRD9.HLP文件)。</p>
<pclass\"a14\">接下来需要将VBA语句转换为PB支持的Powerscript语句,VBA中既有语句又有函数,而且,语句和函数使用的语法格式是不同的,但在PowerBuilder中却有相同的语法格式。例如:我们可以在宏编辑器中看到如下代码:</p>
<pclass\"a14\">SubMacro1()</p>
<pclass\"a14\">Selection.Infmation(wdWithInTable)</p>
<pclass\"a14\">Selection.MoverightUnit:wdCharacter,Count:5</p>
<pclass\"a14\">ion.TypeBackspace</p>
<pclass\"a14\">EndSub</p>
<pclass\"a14\">我们可以在VBAWRD9.HLP中找到MoveRight()的定义:</p>
<pclass\"a14\">Selection.Moveright(Unit,Count,Extend)</p>
<pclass\"a14\">UnitoptionalVariant:wdCell,wdCharacter,wdWdwdSentence.DefaultwdCharacter.</p>
<pclass\"a14\">Countoptional:.NumberofUnitstomove.Default1.</p>
<pclass\"a14\">Extendoptional:wdMovewdExtend</p>
<pclass\"a14\">下面给出了PB对应的语法格式:</p>
<pclass\"a14\">//PB语法格式</p>
<pclass\"a14\">ole_object.ion.Infmation[12]</p>
<pclass\"a14\">ole_object.ion.Moveright(1,5,1)</p>
<pclass\"a14\">ole_object.ion.TypeBackspace()</p>
<pclass\"a14\">由于技术方面的原因,像wdCell、wdCharacter、wdWd、wdSentence这些枚举类型的常量值,PB并不知,所以必须将其转换为PB可知的常量,这可以通过以下简单的方式来实现:</p>
<pclass\"a14\">在宏编辑器中输入如下代码:</p>
<pclass\"a14\">SubMacro1()</p>
<pclass\"a14\">&rsquo;用同样的方法我们可以获得所有常量的真实值</p>
<pclass\"a14\">Msgbox(wdCell)</p>
<pclass\"a14\">EndSub</p>
<pclass\"a14\">得到了这些常量的真实值,我们就可以在PB中把这些真实值传递给服务器的函数,以实现OLE的自动化控制。</p>
<pclass\"a14\">全文检索示例</p>
<pclass\"a14\">下面给出了一个完整的例子,该实例实现了对Wd文档的全文搜索,并替换指定的字符串。部分关键代码如下。</p>
<pclass\"a14\">首先我们假定某数据库中含有表t_oledoc,表结构大致如下:<imgalt\"\"align\"right\"src\"http://www2.ccw.com.cn/02/0249/d/pic/d16_1t2.jpg\"/></p>
<pclass\"a14\">下面的代码完成全文搜索,并将特定文字替换:</p>
<pclass\"a14\">//建立PB与OLE服务器(Wd)的连接,唤醒OLE服务器</p>
<pclass\"a14\">BLOBblb_tmp</p>
<pclass\"a14\">SetNull(blb_tmp)</p>
<pclass\"a14\">SELECTBLOBt_oledoc.c_docomntINTO:blb_tmp</p>
<pclass\"a14\">FROMt_oledoc</p>
<pclass\"a14\">WHEREt_oledoc.c_id:id</p>
<pclass\"a14\">//id为用户输入的变量</p>
<pclass\"a14\">USINGSQLCA;</p>
<pclass\"a14\">//ole_1为OLE控件,将其放置于某一窗口</p>
<pclass\"a14\">IfNotIsNull(blb_tmp)Then</p>
<pclass\"a14\">ole_1.ObjectDatablb_tmp</p>
<pclass\"a14\">EndIf</p>
<pclass\"a14\">//Wd中Find对象的Excute()方法:</p>
<pclass\"a14\">//expression.Execute(FindText,MatchCase,MatchWholeWd,MatchWildcards,MatchSoundsLike,MatchAllWdFms,Fward,Wrap,Fmat,ReplaceWith,Replace,MatchKashida,MatchDiacritics,MatchAlefHamza,MatchControl)</p>
<pclass\"a14\">FindTextvar_findtxt</p>
<pclass\"a14\">//var_findtxt为外部输入的要搜索的值</p>
<pclass\"a14\">MatchCasetrue</p>
<pclass\"a14\">MatchWholeWdtrue</p>
<pclass\"a14\">MatchWildcardsfalse</p>
<pclass\"a14\">MatchSoundsLikefalse</p>
<pclass\"a14\">MatchAllWdFmsfalse</p>
<pclass\"a14\">Fwardtrue</p>
<pclass\"a14\">Wrap1</p>
<pclass\"a14\">//可通过前面介绍的方法获得枚举常量的值</p>
<pclass\"a14\">Fmatfalse</p>
<pclass\"a14\">ReplaceWithvar_reptxt</p>
<pclass\"a14\">//var_reptxt为外部输入的要替换成的值</p>
<pclass\"a14\">Replace2</p>
<pclass\"a14\">MatchKashidafalse</p>
<pclass\"a14\">MatchDiacriticsfalse</p>
<pclass\"a14\">MatchAlefHamzafalse</p>
<pclass\"a14\">MatchControlfalse</p>
<pclass\"a14\">//执行Excute()函数</p>
<pclass\"a14\">ole_1.object.Selection.find.Execute(FindText,MatchCase,MatchWholeWd,MatchWildcards,MatchSoundsLike,MatchAllWdFms,Fward,Wrap,Fmat,ReplaceWith,Replace,MatchKashida,MatchDiacritics,MatchAlefHamza,MatchControl)</p>
<pclass\"a14\">借助上面介绍的方法,我们可以通过在PB中调用Wd的方法实现对存放于数据库中Blob字段里的文档的全文搜索。同样,与OLE控件对应的不可视对象Oleobject,我们可以将其运用到Jaguar组件中,并利用其开发Web应用。</p>



 

知识库

 








首 页 | 成功案例 | 关于我们 | 软件产品 | 软件定制 | 代理合作 | 售后服务 | 在线演示 | 联系我们

业务QQ:在线客服  技术QQ:在线技术支持 MSN:
Copyright (C) 深圳市凯路网络技术有限公司
粤ICP[07018848]号
软件知识 行业最新信息 编程技巧等尽在这里