1、我的数据库应用程序中用到了SQL DMO操作,编译完成后发现只能在装有Sql Server的机器上运行,在没有安装sql server的机器上运行出现如下错误"无效的类字符串",求解决办法。
出错语句fSqlserver := CreateOleObject('SQLDMO.Sqlserver');//fSQLserver为预定义变量     fSqlServer : Variant;
2、到网上查有如下资料
首先搜索一下看看SQLDMO.dll文件在哪,然后在Delphi的project菜单中选择”Import Type Library”导入类型库,在弹出对话框的列表中选择”Microsoft SQLDMO Object...”,如果没有用”Add”加入,然后在Class Names列表中把TApplication,TDataBase,TTable,TRemoteServer类名改掉,以免和Delphi中已有类冲突,比如改成TApplicationX,TDataBaseX,TTableX,TRemoteServerX,然后点击Install安装。Delphi首先生成.Pas文件SQLDMO_TLB.pas(放在Imports目录中,这个过程要好几分钟,需耐心等候),然后安装,在弹出的dclusr50.dpk安装包对话框,选择Compile编译,出现一大堆错误,如: 
[Error] SQLDMO_TLB.pas(18475): Identifier redeclared: ’_Table’ 
[Error] SQLDMO_TLB.pas(33493): ’;’ expected but ’.’ found 
[Error] SQLDMO_TLB.pas(33502): Undeclared identifier: ’ServerData’ 
.......................... 
其余的错误都可以不管,找到所有这样的错误:Identifier redeclared: ’_Table’或Identifier redeclared: ’_DataBase’等,把其中的_Table或_DataBase都改成_TableX或_DataBaseX(即前面你自己改的类型),全部改完之后,再编译,其它的错误也不见了,编译通过,生成的SQLDMO_TLB.pas文件就可以使用了,不过注意:最好不要把它加到工程单元中,以免和_Application类冲突,也不要和Delphi已有的ADODB.pas或DB.pas等放在一起,以免引起_Table,_DataBase冲突,最好是SQL-DMO编程单独放在一个单元,做成函数调用。 我按步骤一步一步做,问题是最后生成的SQLDMO_TLB.pas文件中找不到TApplication类,(虽然在import的时候已经把TApplication改成TApplicationX,但是也找不到TApplicationX的声明)自己写的程序中如果uses了SQLDMO_TLB.pas单元,application会发生冲突,实在不解,希望懂的高手能帮兄弟一把,谢谢!

解决方案 »

  1.   

    三. DMO的安装
    其实DMO主要就是一个DLL文件而已: SQLDMO.DLL。具体位置在C:\Program Files\Microsoft SQL Server\80\Tools\Binn目录里, 在同一目录里还有个帮助文件Sqldmo80.hlp. 如果你在程序里不能使用DMO, 找到这个DLL文件,注册一下,就可以了。你找到的答案,与解决你的问题无关,重要的是注册SQLDMO.DLL到没有安装Sql Server的机器上
      

  2.   

    继续请教如何在INNO Setup中写注册sqldmo.dll的脚本。