如果用了DataSnap技术,使用RemoteDataModule,那么在客户端就必须用DELPHI的ClientDataSet来进行调用那么如果用其它开发工具将无法调用了,如果不用又会有很多麻烦的接口要进行编写,不知道大家在开发过程中是用什么方法获取数据的?

解决方案 »

  1.   

    clientdataset里面有一个commandtext得属性,进行sql语句得填写,通过这个获取RemoteDataModule里面的datasetprovider提供的数据,详情请看李维的多层分布式数据库程序开发,http://www.delphifans.com/SoftView/SoftView_198.html,自己下载去看看!!
      

  2.   

    确实是个问题,有时候挺难决定的
    一方面,Delphi都已经穷途末路了,而且DataSnap并不是万金油,有它不爽的地方
    另一方面,如果用Delphi做多层,DataSnap又确实是一个捷径
      

  3.   

    不同意 dbExpress(老枪) 说法。Delphi怎么会穷途末路呢?!!
    我看datasnap最有用途的是他解决了数据传输的问题。使用DataSetProvider和ClientDataSet很方便得。另外ClientDataSet是很好的客户端数据缓冲区。我觉得最好不要使用IAppServer那些数据访问的函数,这些函数破坏了多层之间的封装。
    可以在客户端写一个引擎把服务器传过来的数据封装成类,再在客户端使用。
      

  4.   

    按照useryecha所说的,编写引擎把服务器传过来的数据封装成类,再在客户端使用,但这个方法有一个问题,那就是在浏览数据的时候,需要自己填写StringGrid,而且在StringGrid里面修改完数据以后,还得自己判断哪些数据被修改了,然后再反应到类对象中,再由类对象上传回服务器里,这样子工作量大大增加。
    而如果使用 ttoth12(borlander) 所说的,这样子好像有点违背了三层开发的原则吧,三层开发就是把业务规则封装到中间层,如果客户端都是直接使用SQL语句,那还要中间层来干什么?
      

  5.   

    我记得MIDAS中的数据格式是不公开的,我们无法直接解析DATA里的数据
      

  6.   

    说得也是啊,好像必须要用ClientDataSet.Data获取,这样子还是要用DELPHI才可以
      

  7.   

    GooderJump(GooderJump) 你没有完全看懂我的意思。
    1、我是说把服务器传来的数据,保存在clientdataset里面,它是dataset可以自动地为那些数据感知组件服务。
    2、clientdataset会保存你的修改纪录。他的功能很强大,不用你做多少工作。还有一点如果想要用其他语言的客户端程序来调用,可以使用xml来传递数据。delphi对xml的支持也很好!!
      

  8.   

    您的意思是自定义一个类把数据传到客户端,然后在客户端把数据存到ClientDataset里面,是吗?如果是这样子,应该不一定要用ClientDataset吧,是吗,用其它的可以吗?
    我有点明白了,首先用COM+把数据传送到客户端,然后再由客户端处理传过来的数据,不管是用Delphi的ClientDataset也好,还是用其它工具的数据感知控件也好。
    但是有一个问题就是,如果用ClientDataset的话,如果更新了数据,应该如何更新到服务器呢?而服务器传送数据到客户端时,都要传送一个COM对象引用到客户端,会否效率很低?
    还有一个问题就是,如果用SocketConnection连接到服务器端时,怎样子可以取得客户端接口信息,因为我用SocketConnection.AppServer来调用远程接口时,无法取得CodeInsight功能,因为AppServer是一个OleVariant,当我导入Type Library之后,使用SocketConnection.GetServer as IHelloWord时,就说不支持IHelloWord接口。
      

  9.   

    GooderJump
    问题:如果是这样子,应该不一定要用ClientDataset吧,是吗,用其它的可以吗?
    一定要用ClientDataset如果你使用DataSetProvider,因为DataSetProvider的Data属性出俩的数据时delphi私有的数据结构。如果你的客户端不使用delphi那你可以使用TXMLTransformProvider,这个Provider出来的是xml文档。问题:如果用ClientDataset的话,如果更新了数据,应该如何更新到服务器呢?
    更新数据,这点每个人的处理可能不同,我的做法是更新和添加数据使用ClientDataset.Delta属性。它里面更新的数据有两条记录保存,添加的数据是一条记录,很容易识别。关于删除的数据,由于在Delta属性里我不知道如何辨别(他们都是一条记录,而且没有状态),我就在ClientDataset里面加了一个字段来标示。最后用户更新的时候,我把Delta里面和ClientDataset里面作了删除标示的纪录,合并成一个记录集传回服务器。问题:而服务器传送数据到客户端时,都要传送一个COM对象引用到客户端,会否效率很低?
    在使用DataSetProvider.data属性传送得是纯粹的数据包,没有你说的效率问题。问题:如果用SocketConnection连接到服务器端时,怎样子可以取得客户端接口信息
    这个问题我已经回答你过了,在你发别的帖子里你自己去看了。
    主  题:  socketconnection.appserver
      

  10.   

    呵呵,useryecha(夜叉~~)大哥,很感谢你的回答。
    我问过这么久问题,你的回答是我最满意的,最详细的,如果哪里有得选最佳会员,我一定会选你
      

  11.   

    关于socketconnection.appserver中,请问如何设置Early Binding为ID Binding
      

  12.   

    我试过as IHelloWordDisp之后,仍然说是not supported interface
      

  13.   

    socketconnection.appserver中,请问如何设置Early Binding为ID Binding?
    在socketconnection.appserver不能设置Early Binding!!我试过as IHelloWordDisp之后,仍然说是not supported interface
    这个就不好说了,我也遇到过 我是把客户端服务器端都从新编译了。就没有问题了