关于SQLDMO的使用[转]

   sqldmo.dll是一个com,安装SQLServer后位于Program Files\Microsoft SQL Server\80\Tools\Binn文件夹下,关于sqldmo能做什么的问题,不是本文讨论的重点,这里只说明如何使用该com,现在开始。第一步,导入sqldmo,生成类型说明文件。 打开Delphi,Project菜单->Import Type Library...,在列表框中找到"Microsoft SQLDMO Object Library(Version 8.0)"(你的版本可能和我的不一样),可以看到Class names列表框中显示出相应的类,由于很多类名与vcl本身的类名冲突(比如TApplication,TTable等),需要修改类的名称,不过不改也没关系,这里假设没改,点击按钮"Create Unit",进入漫长的等待过程。由于生成的文件比较大(6万多行的代码,2.46M),这个过程很容易被误认为死机,稍候片刻。第二步,修改Type Library文件。经过漫长的等待,终于得到了来之不易的SQLDMO_TLB.pas,然而,当我们Compile的时候却发现这个单元无法编译,提示大意为ID重复定义,这个简单,把第二个ID改成xID,编译通过。 第三步,使用。在使用过程中,我发现在很多情况下,SQLDMO_TLB.pas中的类是不能用的,出现av错误。比如Restore,必须这样使用: CreateOleObject('SQLDMO.Restore');SQLDMO提供的一些事件,在.net和vb环境下得到了非常好的语法支持,同样的问题,在Delphi中却异常麻烦,我们不得不维护IConnectionPointContainer,难道vb中一行代码就能解决的问题 Delphi中就没有简单的方法吗?有!而且同样简单!答案就是EventSinkImp,可以到http: //www.techvanguards.com免费下载。安装也很简单,一路Yes就ok了。 EventSinkImp的实现是基于IConnectionPointContainer的,或者说,本来很麻烦的事由EventSinkImp代劳了。它的使用界面与Import Type Library类似,这里就不多说了。Import以后,得到SQLDMOEvents.pas和SQLDMO_TLB.pas两个文件。Compile 通过,Install出错。好事多磨^-^ 根据错误提示,可以发现TTable、TDataBase与系统中已有的类冲突,改成TSQLTable和TSQLDataBase。 EventSinkImp的使用很简单,根据帮助,在使用前,Connect一下就能顺利挂接事件。在使用SQLDMOEvents.pas和SQLDMO_TLB.pas的单元中,如果出现类冲突,比如TApplication,记得在类前面加上单元名称,比如Forms.Application就可以了写下这些希望后来者有所借鉴,如果有其他更好的方法,欢迎告之,谢!(完)

最好不要把它加到工程单元中,以免和_Application类冲突,也不要和Delphi已有的ADODB.pas或DB.pas等放在一起,以免引起_Table,_DataBase冲突,最好是SQL-DMO编程单独放在一个单元,做成函数调用
posted @ 2009-07-27 12:47  Handll  阅读(248)  评论(0编辑  收藏  举报