C.1向工程添加自动化对象.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C.1向工程添加自动化对象.doc

 PAGE 544 Delphi 6应用开发指南 附录C 将程序转变为自动化服务器  PAGE 545 附录C 将程序转变为自动化服务器 自动化是COM的一个方面,您可以利用它从程序中获得额外的收益。本附录示范了一些基本的步骤来选取一个程序(这里是第19章的SQLBuilder),然后向工程添加自动化对象,将程序转换为自动化服务器。之所以选择SQLBuilder,是因为自动化客户可利用SQLBuilder服务器来针对任何数据集生成SQL。 请记住,在运行自动化服务器之前,还需要有自动化客户,即任何请求创建COM对象实例的程序。可创建COM对象实例的工具非常多,包括报表工具、VBA(大部分在Microsoft Office中),以及大部分的Wintel编程语言。 C.1 向工程添加自动化对象 这里不再涉及第19章的SQLBuilder程序的细节,该工程的源代码和编译后的版本都在本书的光盘上。该程序使用了TSession类型的全局变量来从ODBC和BDE注册文件获取数据库名字的列表。当用户选定某个数据库名时,将以同样的方式获取该数据库中可用的表名。用户选取一个表时,将从TDataSet.Fields集合读入字段定义并显示在TValueListEditor对象中,该对象是网格形状的、基于TStrings的控件。在字段值已知的情况下,可利用Format函数对定义了参数的SQL语句进行简单的字符串替换。就是这样。 如果您已经读过本书前面的部分,那么您已经掌握了这些技巧,因此我们不再涉及SQLBuilder工程的更多细节。从这里开始,我们将进行一些必要的步骤,向该工程添加自动化对象。 C.1.1 使用自动化对象向导 现在打开原来的SQLBuilder工程,开始向它添加自动化对象。打开工程后,在Delphi中单击File | New | Other菜单项。然后在New Items对话框中选择ActiveX属性页,并选择其中的Automation Object图标(如图C.1所示)。这里使用的CoClass名为Builder,并采用了缺省的实例化和线程模型(关于实例化和线程模型的特定细节,请参考第15章)。单击OK生成类型库并触发类型库编辑器。 我们将使用类型库编辑器来定义自动化服务器的接口,并更新类型库和包含TBuilder类的Pascal源文件,该类是服务器的包裹类。 C.1.2 在类型库编辑器中定义接口 在向导中单击OK后,将定义一个包裹类,该类继承??TAutoObject类,并实现了IBuilder接口。在光盘上,相应的文件名是UBuilder.pas。当结束自动化接口定义后,类型库编辑器(见图C.2)中的Refresh按钮将把声明和定义添加到Pascal包裹类的单元。 图C.1 自动化对象向导小应用程序 图C.2 类型库编辑器以及TBuilder类的定义 对于该自动化对象,我们将定义一些方法和特性,以便设置数据库名和表名,获取数据库名和表名的列表,以及字段和SQL文本的管理等。按下列步骤,可以在类型库编辑器中定义接口。 在类型库编辑器中,单击New Property工具栏按钮(或右键单击IBuilder接口,从接口的上下文菜单中选择该菜单项,参考图C.2)添加DatabaseName特性。 在Attributes属性页上(在图C.2中也可以看到),将Name修改为DatabaseName,将类型修改为BSTR,对读写定义二者都进行同样的修改。 对TableName特性重复步骤2。这两个特性将用于修改选定的数据库名和表名。 添加两个方法(单击Methods工具栏按钮),将其命名为GetTableNames和GetDatabaseNames。TStrings对象可返回分隔好的文本,因此我们可以利用TStrings的Text特性将所有的列表项作为一个字符串传递。 在Parameters属性页上将Type设置为BSTR*,这是指向BSTR,即宽字符串的指针,并将Modifier修改为[out,retval]。BSTR*指针用于返回类型。现在我们只用一个方法调用就可以得到所有的数据库名和方法名。 重复步骤5,定义GetFieldsList和GetSQLText方法。它们在自动化服务器中都存储为TStrings,因此声明步骤与5相同(看一下SQLBuilder工程,可以发现字段在TValueListEditor中,而SQL文本在TMemo对象中。两个控件都有TStrings特性)。 将SetFieldsList在Parameters属性页上定义为[in] BSTR。该方法可用于更新对字段和值的列表的修改。 添加一个可用于读写的QueryType特性,它使用整数来修改查询类型,在服务器中用TRadioGroup来表示

文档评论(0)

170****0532 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8015033021000003

1亿VIP精品文档

相关文档