使用三层结构,D7+Sql2000
服务端用:DataSetProvider 
客户端用:SocketConnection在客户端的Data_Module中加入SocketConnection,若干几ClientDataSet和DataSource发现,当同一窗口中引用两个以上ClientDataSet时,任何一个ClientDataSet更新都不成功,ChangeCount没有清零。只有在一个ClientDataSet,代码不变情况下,没有影响,不同窗口同时打开ClientDataSet时,也不受影响。
当在Data_Module中加入多个SocketConnection,并且ClientDataSet分别连接时,也没有问题,难道,要这么多SocketConnection吗?

解决方案 »

  1.   

    当然不能多个SocketConnection了,占用网络资源你说的问题我好像没有碰到
      

  2.   

    这么奇怪啊,没有遇到过 学习ing.....
      

  3.   

    多個SocketConnection是不行的,是不是你的程序出問題了。
      

  4.   

    只需要一个SocketConnection,由这个SocketConnection通过servername属性与中间层的应用服务器连接上,然后clientdataset 再通过remoteserver( 属性值为SocketConnection的名字 ) 和 providername(中间层的DataSetProvider的名字) 来连接中间层。中间层可以使用多个DataSetProvider ,客户端也可以使用多个clientdataset///////////////中间层(也就是远程数据模块remote datamodule)各个控件与连接的设置:可通过adoconnection来连接数据库,然后 DataSetProvider 通过 adoquery来与阿adoconnection连接。
      

  5.   

    晕死!!!!!!!!!
    在网上查了N小时,发现
    这是D的一个BUG
    情况为:
    客户端多个ClientDataSet同时连接服务端的DataSetProvider 
    =========================
    如:
    ClientDataSet1.open;
    ClientDataSet1.CommandText :='....';
    ClientDataSet1.close;
    ClientDataSet2.open;
    ClientDataSet2.CommandText :=....';
    ClientDataSet2.close;这种情况下只能更新ClientDataSet2,因为ClientDataSet1已经被冲掉了,只有ClientDataSet2是连接的,当更新ClientDataSet1时,因表不是同一个,当然会出错!!再:
    查看DataSetProvider 的代码后,发现ClientDataSet可以说是DataSetProvider 的DataSet,只能是单个连接。这个问题在D5中已经出现了,为什么D7还没有解决!!!请高手指点迷津,有没有解决办法,否则,我只能用两层的了!
      

  6.   

    =========================
    如:
    ClientDataSet1.open;
    ClientDataSet1.CommandText :='....';
    ClientDataSet1.close;
    ClientDataSet2.open;
    ClientDataSet2.CommandText :=....';
    ClientDataSet2.close;这种情况下只能更新ClientDataSet2,因为ClientDataSet1已经被冲掉了,只有ClientDataSet2是连接的,当更新ClientDataSet1时,因表不是同一个,当然会出错!!再:
    查看DataSetProvider 的代码后,发现ClientDataSet可以说是DataSetProvider 的DataSet,只能是单个连接。
    ===========================================================================================
    应该不存在吧,我用都是好的啊
      

  7.   

    在数据模块中可以一个ClientDataSet使用多个连接,在切换时,切换ClientDataSet的DataSetProvider
      

  8.   

    不知道我是否真的理解楼主的意思,你指的是当一个几个ClientDataSet公用一个DataSetProvider吗?
    默认情况下,DataSetProvider是无状态的,但是当ClientDataSet的PacketRecord>0 时,其对应的DataSetProvider会为客户端记录记录位置信息,这时DataSetProvider是有状态的,那么当多个ClientDataSet指向同一个DataSetProvider时肯定会导致数据访问异常。即使使用无状态的DataSetProvider,即对应的ClientDataSet的PacketRecord=0,多个ClientDataSet公用一个DataSetProvider也容易出错,因为可能ClientDataSet之间存在偶合,毕竟DataSetProvider对于单表的更新才会正常,所以建议每个ClientDataSet对应一个DataSetProvider,在无状态情况下访问同一表结构的ClientDataSet可以对应同一个DataSetProvider并正常更新.