软件定制 西安软件公司 研发产品:语音呼叫系统 ERP系统,OA系统,CRM系统,进销存,外贸进销存销售系统 

 
 

首   页   |  关于我们  |  软件产品  |  软件定制  |  编程知识  |  行业知识  |  网站建设  |  联系我们  |  售后服务

 
     
在PB中实现全文检索  
 

  

PowerBuilder(以下简称PB)是程序员常用的开发工具之一,PB的DataWindow为编程人员提供了一个方便直观的数据处理工具,但对一些特殊文档的处理,用PB自身去实现十分困难,若能利用Word强大的文档处理功能却能达到意想不到的效果。下面笔者介绍如何在PB中调用Word以实现对Word文档的全文搜索。

从VBA到PowerScript \"\"

PB与Word结合的基础是微软的自动化技术(OLE Automation),通过OLE将数据从PB传至Word,再借助Word本身具有的VBA功能可完成许多复杂的任务。通过OLE技术实现PB对Word的控制,必须先将VBA语句转换为PB所能识别的Powerscript语句。此处有个简单的办法可以获得正确的VBA语句:

打开Word工具菜单中宏子菜单的录制宏命令,命名后保存,然后返回至Word主窗口,此时可以在主窗口的左上角看到宏的悬浮菜单,接着进行所需要的操作(如键入字符串、改变字体颜色、插入书签、查找特定字符串等操作),关闭宏。接下来再到工具菜单中的宏子菜单中选择 Visual Basic编辑器,进入宏编辑器,此时可以看到刚才所有操作的VBA代码。

注: 如果想详细地了解VBA语法,可以参考Word本身提供的帮助文件(Office 目录下2052文件中的VBAWRD9.HLP文件)。

接下来需要将VBA语句转换为PB支持的Powerscript语句,VBA中既有语句又有函数,而且,语句和函数使用的语法格式是不同的,但在PowerBuilder 中却有相同的语法格式。例如:我们可以在宏编辑器中看到如下代码:

Sub Macro1()

Selection.Information(wdWithInTable)

Selection.Moveright Unit:=wdCharacter, Count:=5

selection.TypeBackspace

End Sub

我们可以在VBAWRD9.HLP中找到MoveRight()的定义:

Selection.Moveright(Unit, Count, Extend)

Unit optional Variant: wdCell, wdCharacter, wdWord or wdSentence. Default = wdCharacter.

Count optional: . Number of Units to move. Default = 1.

Extend optional: wdMove or wdExtend

下面给出了PB对应的语法格式:

// PB语法格式

ole_object.selection.Information[12]

ole_object.selection.Moveright(1,5,1)

ole_object.selection.TypeBackspace()

由于技术方面的原因,像wdCell、wdCharacter、wdWord、 wdSentence这些枚举类型的常量值,PB并不知,所以必须将其转换为PB可知的常量,这可以通过以下简单的方式来实现:

在宏编辑器中输入如下代码:

Sub Macro1()

’用同样的方法我们可以获得所有常量的真实值

Msgbox(wdCell)

End Sub

得到了这些常量的真实值,我们就可以在PB中把这些真实值传递给服务器的函数,以实现OLE的自动化控制。

全文检索示例

下面给出了一个完整的例子,该实例实现了对Word文档的全文搜索,并替换指定的字符串。部分关键代码如下。

首先我们假定某数据库中含有表t_oledoc,表结构大致如下: \"\"

下面的代码完成全文搜索,并将特定文字替换:

//建立PB与OLE 服务器(Word)的连接,唤醒OLE服务器

BLOB blb_tmp

SetNull(blb_tmp)

SELECTBLOB t_oledoc.c_docomnt INTO :blb_tmp

FROM t_oledoc

WHERE t_oledoc.c_id =:id

//id 为用户输入的变量

USING SQLCA;

// ole_1 为OLE控件,将其放置于某一窗口

If Not IsNull(blb_tmp) Then

ole_1.ObjectData = blb_tmp

End If

//Word中Find对象的Excute()方法:

//expression.Execute(FindText, MatchCase, MatchWholeWord,MatchWildcards,MatchSoundsLike,MatchAllWordForms, Forward, Wrap, Format, ReplaceWith, Replace, MatchKashida, MatchDiacritics, MatchAlefHamza, MatchControl)

FindText = var_findtxt

//var_findtxt 为外部输入的要搜索的值

MatchCase = true

MatchWholeWord = true

MatchWildcards = false

MatchSoundsLike = false

MatchAllWordForms = false

Forward = true

Wrap = 1

//可通过前面介绍的方法获得枚举常量的值

Format = false

ReplaceWith = var_reptxt

//var_reptxt 为外部输入的要替换成的值

Replace = 2

MatchKashida = false

MatchDiacritics = false

MatchAlefHamza = false

MatchControl = false

//执行Excute()函数

ole_1.object.Selection.find.Execute(FindText, MatchCase, MatchWholeWord, MatchWildcards, MatchSoundsLike, MatchAllWordForms, Forward, Wrap, Format,ReplaceWith,Replace,MatchKashida,MatchDiacritics,MatchAlefHamza,MatchControl)

借助上面介绍的方法,我们可以通过在PB中调用Word的方法实现对存放于数据库中Blob字段里的文档的全文搜索。同样,与OLE控件对应的不可视对象Oleobject,我们可以将其运用到Jaguar组件中,并利用其开发Web应用。



 

知识库

 








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

         Copyright (C) 西安网科网络科技有限公司   陕ICP备09020140号   业务QQ:在线客服 技术QQ:在线技术支持
西安软件公司 软件定制 成功研发产品:语音呼叫系统 OA系统  CRM系统  企业ERP  外贸销售管理 进销存管理 项目管理系统