使用三层结构,D7+Sql2000
服务端用:DataSetProvider
客户端用:SocketConnection在客户端的Data_Module中加入SocketConnection,若干几ClientDataSet和DataSource发现,当同一窗口中引用两个以上ClientDataSet时,任何一个ClientDataSet更新都不成功,ChangeCount没有清零。只有在一个ClientDataSet,代码不变情况下,没有影响,不同窗口同时打开ClientDataSet时,也不受影响。
当在Data_Module中加入多个SocketConnection,并且ClientDataSet分别连接时,也没有问题,难道,要这么多SocketConnection吗?
服务端用:DataSetProvider
客户端用:SocketConnection在客户端的Data_Module中加入SocketConnection,若干几ClientDataSet和DataSource发现,当同一窗口中引用两个以上ClientDataSet时,任何一个ClientDataSet更新都不成功,ChangeCount没有清零。只有在一个ClientDataSet,代码不变情况下,没有影响,不同窗口同时打开ClientDataSet时,也不受影响。
当在Data_Module中加入多个SocketConnection,并且ClientDataSet分别连接时,也没有问题,难道,要这么多SocketConnection吗?
解决方案 »
- 用MSCOMM控件向rs232输出7B 09 00 01 43 4C 4F 43 4B 2A A0 7D
- 关于WEBSERVICE/SOAP的问题
- 寫DLL的怪事,HIGH用到DLL中是否無效了??
- 当显示的查询项目很多的时候,dbgrid怎么只能自动生成垂直滚动条,而没有水平滚动条呢?
- StringGrid1: TAdvStringGridPRO; 这个控件如何分页显示数据?
- 请教一个窗口的处理问题!希望大家帮帮忙阿!
- 这句话是啥意思。
- Delphi开发的Dcom组件可以设置安全认证等级吗?
- 看看这个SQL语句怎么写?
- 请教InstallShield Express For Delphi 5/6的下栽地址,
- 我正在做一个ACTIVEX控件,怎么让它在设计时和timer那种效果一样
- 一个菜问题,请教各位了
在网上查了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还没有解决!!!请高手指点迷津,有没有解决办法,否则,我只能用两层的了!
如:
ClientDataSet1.open;
ClientDataSet1.CommandText :='....';
ClientDataSet1.close;
ClientDataSet2.open;
ClientDataSet2.CommandText :=....';
ClientDataSet2.close;这种情况下只能更新ClientDataSet2,因为ClientDataSet1已经被冲掉了,只有ClientDataSet2是连接的,当更新ClientDataSet1时,因表不是同一个,当然会出错!!再:
查看DataSetProvider 的代码后,发现ClientDataSet可以说是DataSetProvider 的DataSet,只能是单个连接。
===========================================================================================
应该不存在吧,我用都是好的啊
默认情况下,DataSetProvider是无状态的,但是当ClientDataSet的PacketRecord>0 时,其对应的DataSetProvider会为客户端记录记录位置信息,这时DataSetProvider是有状态的,那么当多个ClientDataSet指向同一个DataSetProvider时肯定会导致数据访问异常。即使使用无状态的DataSetProvider,即对应的ClientDataSet的PacketRecord=0,多个ClientDataSet公用一个DataSetProvider也容易出错,因为可能ClientDataSet之间存在偶合,毕竟DataSetProvider对于单表的更新才会正常,所以建议每个ClientDataSet对应一个DataSetProvider,在无状态情况下访问同一表结构的ClientDataSet可以对应同一个DataSetProvider并正常更新.