• OLE自动化是不同应用程序之间进行通讯的一个标准。
  • OLE自动化的工作方式是:通讯被动方(OLE服务器)应用程序向通讯主动方(OLE客户机)应用程序提供一个以上可供其调用的OLE自动化对象类型,OLE客户机通过引用这些对象实现对OLE服务器的调用,然后通过设置对象的属性和使用对象的方法操纵OLE服务器应用程序,完成两者之间的通讯。
  • Powerbuilder7.0是一个完全支持OLE自动化的应用程序开发工具。使用POWERBUILDER7.0,既可以编制做为OLE服务器的应用程序,也可以编制作为OLE客户机的应用程序。Word2000是一个不完全支持OLE自动化的应用软件,它只能作为OLE服务器供其它应用程序调用。本文将以一个POWERBUILDER7.0应用程序通过OLE自动化操纵Word2000的实例,具体描述在POWERBUILDER7.0中操纵OLE服务器应用程序的方法。

在POWERBUILDER7.0代码中调用OLE服务器的方法如下
(1) 声明一个对象变量:
OLEObject wordapp
(2)使用Create语句创建该对象,其语法如下:
wordApp = Create OLEObject
(3)根据自己使用OLE服务器的对象类型,利用ConnectToNewObject(string aparam)函数建立连接,根据返回参数判断OLE服务器连接是否成功,参数aparam表示所连接的服务器类型,对于office2000套件中的应用程序提供如下几种常用的服务器标识:
“Word.Application”
“Word.Document”
“Excel.Application”
“Excel.Worksheet”
对于word分两种,一种是创建面向应用程序的服务器对象"Word.Application",另一个是创建单个文档的服务器对象"Word.Document",二者的区别在于使用的范围不同,本文我们创建面向应用程序的服务器对象,代码实现如下:
int ret
// 连接" word.application "服务器,同时判断连接是否成功
ret = wordApp.ConnectToNewObject( “word.application” )
if ret < 0 then
MessageBox(“信息提示”,“你的WORD无法正常运行,请重新安装!”)
return
end if

(4)通过设置对象的属性和使用对象的方法,实现对OLE服务器的操纵。
对象类型采用Word宏语言WordBasic的大多数语句和函数作为它的方法。也就是说,一旦在POWERBUILDER7.0中创建了一个Word服务器对象,就可以通过该对象使用大多数WordBasic语句或函数,从而可以近乎完美地操纵Word或Word文档。例 如,下列语句在POWERBUILDER7.0代码中使用WordBasic的FileNewDefault语句创建一个Word新文档:
wordApp.Application.FileNewDefault(file_name)
(5)调用结束后,使用关键字的destroy,释放该变量占用的资源。如:
destroy wordapp

实例
本例将使用POWERBUILDER7.0编写一个简单的数据库应用程序。该程序从数据库中取出数据,然后通过OLE自动化将这些数据输入至Word,并按照Word的排版格式编排成一个表格。例中使用的数据库是POWERBUILDER7.0自含的EAS Demo DB V3.db数据库,数据检索结果取自examples数据表。本例稍加改动,即可作为数据库应用程序的报表生成功能模块使用。

首先,创建一个名为pbtoword的应用,在该应用中的open事件中添加数据库连接代码如下:
SQLCA.DBMS = “ODBC”
SQLCA.Database = “EAS Demo DB V3”
SQLCA.AutoCommit = False
SQLCA.DBParm = “ConnectString=‘DSN=EAS Demo DB V3;UID=dba;PWD=sql’”
connect;
创建窗口w_main,设置其标题title 属性为“word_OLE自动化演示程序”。然后在该窗体中加入三个控件:数据窗口dw_1,“开始数据填写”按钮cb_start,“程序结束”按钮cb_end并设置有关属性,完成上述工作后,点击窗口预览运行菜单,屏幕布局应如下图示。

接着需要编写POWERBUILDER7.0代码来实现与Word的连接。本实例的代码清单如下(注:代码中wordapp使用得语句WordBasic宏语言的语句,这些语句的使用方法请参阅WordBasic宏语言有关资料,或直接再word中查看visual basic编辑环境中的对象浏览器):
(1)在w_main的open事件中加入数据窗口的数据连接代码:
dw_1.settransobject(sqlca)
dw_1.retrieve()
(2)命令按钮 cb_start 鼠标单击事件代码,该事件使用WordBasic宏语言在Word2000中制作一个表格,并将当前数据数据窗口中的数据依次插入表格单元。
constant integer ppLayoutBlank = 12
OLEObject wordapp
wordapp = CREATE OLEObject

int ret
// 连接" word.application "服务器,同时判断连接是否成功
ret = wordApp.ConnectToNewObject( “word.application” )
if ret < 0 then
MessageBox(“信息提示”,“你的WORD无法正常运行,请重新安装!”)
return
end if
word.application.ScreenUpdating()
wordapp.Visible = True //使得word2000的使用过程可见

long ll_colnum,ll_rownum
constant long wdWord9TableBehavior = 1
constant long wdAutoFitFixed = 0
constant long wdCell = 12
string ls_value

//得到数据窗口数据的列数与行数(行数应该是数据行数 + 1)
ll_colnum = Long(dw_1.object.datawindow.column.count)
ll_rownum = dw_1.rowcount() + 1

wordapp.Documents.Add(“C:/WINDOWS/Application Data/Microsoft/Templates/Normal.dot”,False,0)
wordapp.ActiveDocument.Tables.Add(wordapp.Selection.Range, ll_rownum, ll_colnum,wdWord9TableBehavior,wdAutoFitFixed)

string ls_colname
integer i,j
for i = 1 to ll_colnum
//得到标题头的名字
ls_colname = dw_1.describe(’#’ + string(i) + “.name”) + “_t”
ls_value = dw_1.describe(ls_colname + “.text”)
wordapp.Selection.TypeText(trim(ls_value))
wordapp.Selection.MoveRight(wdCell)
next

dw_1.setredraw(false)
wordapp.Selection.MoveLeft(wdCell)
for i = 2 to ll_rownum
for j = 1 to ll_colnum
dw_1.scrolltorow(i - 1)
dw_1.setcolumn(j)
ls_value = dw_1.gettext()
wordapp.Selection.MoveRight(wdCell)
wordapp.Selection.TypeText(ls_value)
next
next
dw_1.setredraw(true)

constant long wdFormatDocument = 0
//保存新建的文档
wordapp.ActiveDocument.SaveAs(“sample.doc”, 0,False,"",True,"",False,False,False, False,False)

//打印该word文档
wordApp.Application.printout()

//断开OLE连接,释放wordapp对象
destroy wordapp
(3)命令按钮 cb_end 鼠标单击事件代码
close(parent)

几点说明
①在本程序运行之前,Word2000必须已经成功安装,否则系统将产生一个POWERBUILDER7.0可捕获的错误。读者可以在代码中加入错误处理代码以处理这些错误。
②若本程序运行时Word尚未运行,OLE自动化将试图启动它。因此程序代码中不必包括一条分开的指令来启动Word。若Word是由POWERBUILDER7.0应用程序启动的,那么程序结束时Word2000将自动关闭;否则,Word将继续运行。
③本实例使用的大部分WordBasic语句都与Word2000文档的插入点有关,如果在本程序运行过程中人为地移动了插入点,则有可能导致表格的混乱和错误。为了避免这种情况发生,本程序在执行插入操作之前使用ScreenUpdating语句将Word屏幕更新关闭,使用户在执行插入操作时不能移动插入点。

从上述实例可以看到,通过OLE自动化,使我们在开发新的应用程序时可以“借用”现成的应用程序的部分或全部功能,从而大大地减轻开发的工作量,缩短开发周期,使开发工作事半功倍。这就是OLE自动化带给开发人员的好处。

原文链接:https://blog.csdn.net/iko2008/article/details/5342464

pb数据窗口控件OLE相关推荐

  1. 使用DataGridView数据窗口控件,构建用户快速输入体验

    使用DataGridView数据窗口控件,构建用户快速输入体验 在"随风飘散" 博客里面,介绍了一个不错的DataGridView数据窗口控件<DataGridView数据窗 ...

  2. 数据窗口控件的函数Describe()

    Describe()  功能:返回数据窗口控件结构方面的指定信息包括DataWindow   对象以及数据窗口  对象中其他对象的属性取值数据窗口中的每个列每个标题等等都是对象各自都有一  组描述其特 ...

  3. pb数据窗口一些技取

    标识当前行 〓标识当前行也就是给当前行加上醒目的标记,以便用户更清楚当前要对哪一行数据进行操作,尤其当用户的操作中间有停顿时,继续进行操作就特别需要知道哪个是当前行.这里的当前行不要狭隘地理解成仅仅是 ...

  4. 简介子窗口控件(api)

    子窗口控件 壹佰软件开发小组  整理编译   回忆第七章的CHECKER程序.这些程序显示了矩形网格.当您在一个矩形中按下鼠标按键时,该程序就画一个x:如果您再按一次鼠标按键,那么x就消失.虽然这个程 ...

  5. PB 数据窗口数据导入Excel, 如果存在则追加,不存在则创建。

    PB 数据窗口数据导入Excel, 如果存在则追加,不存在则创建. [转] OLEOBJECT ExcelServer,Excelbooks long ll_count ,ll_loop,ll_i,l ...

  6. WPF 委托和事件实现子窗口回调函数, 实时刷新主窗口控件

    注册窗口事件, 实时刷新主窗口控件 通常用于子窗口修改数据后实时刷新主窗口的ListView控件的场景 这个demo实现的功能是子窗口的TextBox中的数据实时显示到主窗口的Label 运行效果: ...

  7. QT 基础知识一(QT安装、创建项目、常用窗口控件使用、信号与槽机制讲解)

    QT概念 Qt:Qt是一个跨平台的C++框架(C++库),Qt除了支持界面设计(GUI编程),还封装了与网络编程.多线程.数据库连接.视频音频等相关的功能. ctrl 撤销(返回上一步) 市面常见的G ...

  8. win32 20子窗口控件的代码

    汇编代码: ;>>>>>>>>>>>>>>>>>>>>>>>& ...

  9. PYQT5(13)-基本窗口控件-拖曳与剪贴板

    Drag与Drop 为用户提供的拖曳功能很直观,在很多桌面应用程序中,复制或移动对象都可以通过拖曳来完成. 基于MIME类型(Multipurpose Internet Mail Extension, ...

最新文章

  1. 插件式设计的架构模型与实例
  2. webpack使用教程 翻译自阮一峰(机翻)
  3. 2019 年 8 月编程语言排行榜,Java涨幅不行!
  4. Failed to instantiate [org.springframework.test.context.web.ServletTestExecute
  5. 火狐(FireFox)
  6. 解析并符号 读取dll_风电场用风功率采集测风塔数据报文格式解析浅谈
  7. python flv转mp4_ffmpeg将多个flv文件合成为mp4(python版)
  8. HTTP之长连接与短连接(C++ Qt框架实现)
  9. Angular项目中核心模块core Module只加载一次的实现
  10. 华为机试HJ52:计算字符串的距离(动态规划)
  11. Vivado中电路结构的网表描述
  12. Android项目实战(三十四):蓝牙4.0 BLE 多设备连接
  13. abc大神的官改最新版本固件下载
  14. 拼多多微信登录服务器请求失败,拼多多管理后台登不上怎么回事?有何功能?...
  15. 2019下半年软件设计师下午题
  16. 2022年道路运输企业安全生产管理人员报名考试及道路运输企业安全生产管理人员模拟试题
  17. java解四元一次方程
  18. eclipse下载安装、配置tomcat、Maven、lombok
  19. 强制使用ie浏览器使用最高版本
  20. 【Prometheus】Alertmanager告警全方位讲解

热门文章

  1. linux分屏方式显示2015,Linux下的分屏显示
  2. LDAP 注入与防御
  3. phpstorm 打开网页502网关错误phpstudy配置虚拟主机
  4. cmd 批量删除文件、文件夹
  5. Mysql 日期大小比较
  6. 模型参数量(Params)/模型大小 Pytorch统计模型参数量
  7. LPG绘画软件测试自学,排放测量(自学内容)
  8. Pixel 2 XL保姆级刷机教程(Magisk+LSPosed)
  9. Abusing SUDO Advance for Linux Privilege Escalation
  10. FL Studio中Plucked!合成器的使用方法