PB数据窗口中OLE的实现
丁铖
OLE(Object Linking and Embedding),即对象链接与嵌入简称,是在Windows环境下实现不同Windows实用程序之间共享数据和程序功能的一种方法。在PB的应用中实现OLE,则PB作为OLE
Container,在其中调用OLE Server,利用OLE Server提供的功能来显示和操纵OLE对象。
PB的数据窗口(DataWindow)支持OLE20。在其中可建立Blob(Binary Large
Object二进制大型对象)或image类型的字段,这种字段的数据为一OLE对象。由于数据窗口支持OLE20,因此在使用时需确保所用的OLE
Server,也要支持OLE20对象。用户或程序可以激活该OLE字段,并且可以向OLE
Server发送简单的命令,在PB的数据窗口中,可以建立OLE字段。一个OLE字段可以完成如下功能:
·在数据库中存储OLE对象,比如Excel电子表格或Word for Windows的文本文件。
·把OLE对象从数据库中提取到数据窗口。
·使用OLE Server,比如Excel或Word for Windows来修改数据。
·将修改过的数据存入数据库。
下文将结合一个例子解释如何完成上述功能。在数据库中,建一个表,该表有一个image类型的字段,用于存放Windows
Paintbrush编辑的bmp图,PB可在数据窗口中提取该表的记录,并把image字段中的bmp图显示在窗口中,然后通过在数据窗口中双点(Double
Click)该图,自动打开Paintbrush并调用bmp图,用户可对它进行一些修改和保存修改结果。
具体实现步骤如下:
一、建立OLE字段
在本例中,建立一个表Paint,内含2个字段,一个字段名为ID,另一个字段名称作File。进入PB的Database画笔来建此表。ID字段取type为intege,不许为空;File字段type为Image,可为空,并选ID为主键。注:File字段的数据类型即所谓Blob类型,但不同DBMS中取的名字不同,如watcom
SQL称为long birary,而SQL Server为Image或Text。
二、设置Autocommit
在使用SYBASE SQL Server数据库时,含有OLE字段的DataWindow所使用的Transaction
Object(事务对象)中的Autocommit项必须置为TRUE,在设计DataWindow前,可通过Preference画笔,选择Database图标,将其中的Autocommit项赋值为1。
三、设计数据窗口
在DataWinow画笔中,打开建好的Paint表,但此时只选择ID字段进行显示,而先不要选择File字段(我们将在设计窗口中再添加此字段)。DataWinow的设计窗口,从Object菜单中选择OLE
Database Blob项,然后在设计窗口的适当位置点鼠标左键,此时Database
Birary/Text Large Object对话窗显示出来。逐项填写对话窗:
在Name项,填入适当名字,此项可选,但起了名字后,可在程序中引用。
在Client Class中填入DataWinow,可选。
在ClientName中填入当前Data Window的名字,可选。
在Table中选择Paint表。
在Large Binary/Text Columns中,选择File字段。
在Key Clause中,选id=:id,该项用于构造where子句,即where id=:id,用于定位相应记录。
在File template中,填入一个bmp文件名,或通过Browse键来查找一个文件,比如选择arcade.bmp。
在OLE Class,Description(Only Class is Used)中,通过下拉菜单选择Paintbrush。
在Client Name Expression:中,填入某一字符串表达式,该表达式将OLE
Server运行时,显示在其Title处,如填入″BMP File″+String(id)。
按OK键。
此时,PB关闭该对话窗,并回到DataWindow的设计窗口,OLE字段以一个小方框的形式显示出来。一般情况下,运行该DataWindow时,上述小方框不显示出来。因此,为了识别该OLE字段在DataWindow中的位置,可以在该小方框中摆放一个可识的东西,如一个椭圆。因此在DataWindow显示时,只要双点该椭圆,即可激活OLE
Server。
四、预浏览(Preview)OLE对象
在DataWindow的设计窗口下,点按Preveiw图标,然后点按Insert图标,在Paint表中添加一行,填入id,然后双点椭圆,此时Paintbrush被激活。同时打开arcade.bmp,做一些修改,然后从Paintbrush的File菜单中选择Update项,来更新你的修改,此时OLE
Server将修改信息送回DataWindow,然后通过选择File菜单中的Close项关闭Paintbrush,并回到DataWindow,此时在你的DataWindow中OLE字段所在处显示出了Paintbrush所画的图标。按Upd
DB图标,将OLE数据存入数据库中。以后,从库中查出Paint表中的记录时,可以通过双点OLE对象来操作,方法同上。