在客户机上重编了一下客户端,再运行报错:
"Project Test.exe raised exception class EOleError with
message 'Type information missing for class TDataClient'.
Process stoppen.Use Step or Run to continue."
我照着书和以前的贴子试了很多遍,就是不行。
Up Up UP

解决方案 »

  1.   

    好像在设计期不支持怎样,不知Delphi6怎样。你还是先在服务器上写好全部程序在发布到客户端吧。
      

  2.   

    可我现在服务器上写好后,设计期TDBGrid中有数据,但一运行就没数据了。
      

  3.   

    Borland公司的MIDAS让我们能用Delphi构建强大的多层分布式数据库系统,MIDAS提供了很多种的客户程序和中间层的连接方式,如:Sockect,DCOM,Corba等等,这么多的方式,在开发多层体系的时候我们应该如何选择呢,下面我就简单的介绍一下这几种连结方式。Socket: Sockect无疑是最容易配置的连接方式。而且Socket只使用一个端口来进行通讯,这样如果在拥有防火墙的系统中,管理员会更乐意接受Socket因为配置通过防火墙的Dcom是相对麻烦的事情。在安装中间层的机器上,只要运行SCKTSRVR.EXE就可以和客户端建立Socket的连接了。但是Socket并不支持早联编(early-binding) COM和DCOM:COM/DCOM 提供了核心的NTLM的安全性和验证机制。在COM/DCOM里面我们可以很轻松地使用早联编(early-binding)、 回调机制(callback)和连结点机制(ConnectionPoints)。 但是它的不利因素就是配置客户端的DCOM和让DCOM透过防火墙(FireWall)相当麻烦。MTS:MTS能够为分布式的系统提供数据库连结池、事务支持,便于分发等优点,在它基础之上的COM+(Windows2000已经提供了这个服务)组合了COM和MTS的功能。MTS的缺点就是对处理使用BDE的多用户应用的事务处理支持很弱。当然ADO不在这个范围啦CORBA:CORBA是一个跨平台的开放式标准(特别是在很多的JAVA应用中,因为他们都是跨平台的产品),通过VisiBroker(很著名的ORB系统),配置比DCOM方便多了。Borland不久前发布的IDL2Pas的产品使得我们可以编写Delphi的客户端轻松的访问CORBA组件。CORBA本身的负载平衡、命名服务和事件服务可以让开发者构建更稳定和扩展性强的分布式系统。缺点是我们在开发CORBA得系统中不能完全地使用早联编;为了支持COBRA客户端需要分发额外的文件如borlndmm.dll, cp3245mt.dll, midas.dll,orb_br.dll,orbpas50.dll;Delphi不是能够使用全部的VisiBroker的功能,比如以服务方式运行的OAD和GateKeeper
      

  4.   

    用其它连接试试?我喜欢 SocketConnection
    DCOMConnection 在设计时用的是 COM,不能支持远程对像,所以开发时可以的在运行时不一定成功
    SocketConnection可以的话就要看 Dcomcnfg有没问题了
      

  5.   

    COM和DCOM的确需要防火墙多端口的支持,但我现在只想简单的测一下都不行啊,我在钻牛角尖,
    一个劲的在试,一个劲的失败,我真不知道是哪块出问题了
      

  6.   

    你们的98/system下有DCOMCNFG.EXE程序吗?我想试一试用98做服务器,但从微软网站上下载了一个dcom98装上后在System目录下并没有出现DCOMCNFG.EXE程序。
      

  7.   

    实在不行就只有用SocketConnection了,只是好不甘心啊!!!
      

  8.   

    不会吧,我有一个原先用SocketConnection现在改用DcomConnection,并使用Early-binding
    都没出过什么问题啊,98/2000都试过了,在98上不装DCOM98也正常
      

  9.   

    To:Guoxc(大浪乘风)
      请教一下Early-binding,多谢!
      

  10.   

    我也出现了这个问题。我是用SocketConnection去连接的。
    设计时,在客户端的ClientDataset的CommandText中输入sql,DBGrid中有数据返回。运行后就是没数据返回,不知道什么意思???怎样解决?
      

  11.   

    不会出现这样的问题吧,你最好这样试试:服务器那端用:ADOConnection,TADOQuery 和 TDataSetProvider,通过ADOConnection跟数据库打交道。再TADOQuery连ADOConnection, TDataSetProvider连TADOQuery(若客户端要动态传SQl语句取数据,则TDataSetProvider的Options中[poAllowCommandText]=True)。当然,服务器端必须要加入了Remote Data Module或MTS Data Module,这样才是多层结构,即运行注册后,客户端能自动激活服务器程序。客户端用:TDCOMCnnection 和 TClientDataSet 联系就行了!即设定TDCOMCnnection 的ServerName属性(指定为服务器程序)和Connected=True,就能激活服务器程序了。这样再设定ClientDataSet的RemoteServer和ProviderName就能取到数据了。(注意:若是服务器程序跟客户端程序不在一台机子,TDCOMCnnection 必须指定Computer name属性为那台机器!)
    要动态取数据,则可以这样:ClientDatsSet1.Close;
                            ClientDatsSet1.CommendText:=‘select。’;
                            ClientDatsSet1.Open;具体MIDAS的发布问题,你搜索,我记得以前有个这样的帖子,讲得很详细,也可行!
      

  12.   

    DCOM服务器发布我现在忘了,但SocketConnection我知道,很简单,服务器端必须先运行scktsrvr.exe(这Delphi自带有这个文件),否则客户端激活不了服务器程序。
      

  13.   

    看看这个:
    DCom发布:客户端直接发送可执行文件和一个叫Midas.dll的文件就行了(需要把Midas.dll拷到用户机器上的windows\system目录下),如果要发布服务器端,就必须在服务器端加BDE(若没有使用BDE,而全用的ADO就不用了),而且第一次运行的时候要首先运行服务器端程序,向系统注册! 注:如果你的客户端是Win95或者是Win97时需要安装DCOM95,IE的文件夹里面有
      

  14.   

    非常谢谢xlzps(空瓶子)兄弟,我刚用TSocketConnection做了一次客户端也有同样的错误,看来不能赖TDCOMCnnection了,还得好好的查一下.
      

  15.   

    不知是不是需要给Delphi打一个ADO补丁
      

  16.   

    在MIDAS的方式中,客户端和服务器运行在同一台机器上很容易成功。如果在不同的机器上这个问题比较复杂,需要安全设置。我的经验是D5+win2000不是容易的,用win98做服务器比较容易成功。最近我也正在编写这种分布式程序,希望和大家交流。我有DCOMCNFG.EXE,如果需要可以留下Email.
      

  17.   

    55555....
    我想起来了,ADO有个错,你是不是用了 ClientDataSet->Param?而参数中又有中文(不是名字而是内容)?那你要在 DataSetProvider 的 OnBeforeGetRecord中写到(这时连接的Query还没打开)
        TADOQuery( Sender ).Parameters.ParamByName( '参数名' ).Size = 一个足够长的数
    也可以 
      

  18.   

    呼叫远端方法时采用以下语句:
    (DCOMConnection.GetServer as TSomeServer).DoSomething(...);
    必须在客户端注册应用程式服务器,方法有三:
    1.使用如下语句:
      OleCheck(LoadTypeLib('SomePath\PSomeServer.tlb',servertlb);
    2.在客户端运行一次服务器程序。
    3.在客户端方式下运行以下命令:
      TRegSvr.exe somePath\PSomeServer.tlb
    TRegSvr.exe 在Delphi\bin目录下有,PSomeServer.tlb在服务器程序源程序文件夹中。
      

  19.   

    ADO补丁我觉得你最好打上,因为不打上用ADO控件还会出别的问题!在实际中你可以这样试试,就是将你设计时的服务器名字改为跟要到客户那安装的服务器名字一样,这样可能会好些(当应用服务器只有一台时可行),我刚完成的一个三层结构的项目就是这样做的,发布过程中很顺利,不会有什么问题,倒是开发过程中由于ADO的Bug(打过补丁后还有不少bug)费了不少时间纠正!
      

  20.   

    多谢:wsdyqyj(wsdyqyj) 
     敬请发至:  [email protected]
    再次多谢各位相助!多谢了!
      

  21.   

    __各位需要__ dcom98,dcom98cnfg_的来这里那http://www.csdn.net/filebbs/read_topic.asp?id=233
      

  22.   

    我就下了一个,斑竹真好,还烦请看看http://www.csdn.net/expert/topic/184/184641.shtm
      

  23.   

    你运行时候没有数据很正常,因为你根本就没有创建远程数据模块的实例,就如同没有创建窗体的实例就看不到窗体一样。在D6中默认的远程数据模块不是自动创建的,你可以在工程-》option中将远程数据模块选到自动创建中,并在远程数据模块的implements前加上:
    var
      rdmClient:TrdmClient;
    就可以了。