请教各位高手,三层数据库中,如何解决一个客户端修改数据后,其他客户端显示的数据自动同步更新? 使用ADO+DataSetProvider+ClientDataSet连接共五个客户端,每个客户端都有一个DBGrid来显示数据,当其中一个客户端新增或修改了数据提交后,其他的客户端都得不到该数据的修正。除非手动CLOSE、OPEN 等动作。小弟初学多层的数据库以及多客户端,比较迷茫,不知要如何才能自动更新到其他客户端的DBGRID,实现同步?? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 使用DataSnap2010来连接服务端使用DSTCPServerTransport客户端使用DSProviderConnection 数据量不是很大的话,可以考虑显示的部分用timer事件刷新一下。 用TIMER刷新是可以实现,但如果设置的时间长,就起不到实时的效果,时间短了,又不太现实。 查了一些资料,有些认为服务器端通过UDP通讯广播通知其余客户端刷新数据,让客户端接收指令后进行“刷新”。难道只有通过客户端主动去刷数据的方法吗??没有方法让服务端主动向客户端推数据吗? 将datasetprovider 的options下的popropogatechanges=true;poautorefresh=true即可实服务器的所有变化自动返回到clientdataset中,这个方法有人说可以,也有说不可以。到底可以吗???最近有外,这段时间都无法测试验证一下,有试过的朋友,请留言,谢谢!! 就算这个方法是可以的,也就是一个 Timer。除非服务器端维护 5 份数据。(跟Client界面上显示的一模一样)。然后,哪个数据要变化,就按某个规则推送 Client 变更这个值。没有镜像文件,哪里来的“实时”?!byw,UDP的话,你也需要考虑是否丢包。更复杂。 如果服务端向客户端送数据,那么,服务端就要是有状态的(需要保持每个客户端当前数据的状态以决定如何向客户端送数据),这种方式,如果客户端很少,那没问题,如果多了,服务端会承受不了。现在的应用模式,都是向服务端无状态的方式演化,因此才是状态信息在客户端,客户端需要数据的时候主动向服务器请求的方式。你所说的要求,可以采用在服务端单独做个服务程序,用来通知客户端数据的变动(像你说的udp广播也是一种方式),然后由客户端向服务端请求数据。当然了,你完全可以将数据的变动信息放在udp广播中,这样客户端接到广播通知后直接刷新本地数据就是了。 如果用普通的MIDAS三层的话,一个客户通知服务去刷新其它客户的操作,相对于这样的接口不是很好实现,首先:你可以借用TUDP或TTCPSOCKET来进行。本来用TSOCEKETCONNECTION做客户端连接话,同样可以回调用一个接口来引发,不过效率可能不是很好。其次用第三方实现的三层,如REMOBJECT。本身就有TEVENT控件,可以很好的实现C-S,S-C之间的通迅。对于TDCOMCONNNCTION这种模式的话,未试过。 比如ltOptimistic 独立模式(与原来结果集对照,如果在此期间其它用户修改了结果,则你的结果不能保存) 修改某条数据的时候,一定要取它在数据库的内容。而不是残留在界面上的东西。加"立即刷新"timer定时刷新(时间可稍长一些, 如20分钟)这几条加到一起, 就可以了. 兼顾用户体验与编程复杂性. UDP通知服务端有更改服务端广播之 UDP通知服务端有更改服务端广播之 综合各方面考虑,最终还用通过IDTCPSever/IdTcpClinet通信,客户端收到特写信息进行刷新,感激大家提供宝贵的意见与经验,谢谢!!! 补充下:除了IDTCPSever/IdTcpClinet通知客户端刷新外,还同时用IDTCPSever/IdTcpClinet通信将一些简单的数据通过记录方式发送到客户端。 Uindexweb运行不了,请使用过的朋友帮帮忙。 DelphiXE如何判别中文标点符号? 关于TVarData问题 开发类似outlook界面风格的程序,有何控件或开放源码 怎么用呀?我得到函数的地址了…… 我想和大家讨论一下关于拖放问题 取网络机器名失败,为什么啊?SHGetSpecialFolderLocation 双鱼兄过来领分吧?你快进来吧。我再给你加点。 关于如何使的ActiveXForm控件能够在网页里接收参数的问题 如何在单机WIN98上利用ADO开发MSSQL数据库应用程序??? 我编写了一个继承TPanel的控件,但是有好多问题,请指点谢谢 这段LCS代码我错哪里了?
服务端使用DSTCPServerTransport
客户端使用DSProviderConnection
难道只有通过客户端主动去刷数据的方法吗??没有方法让服务端主动向客户端推数据吗?
最近有外,这段时间都无法测试验证一下,有试过的朋友,请留言,谢谢!!
就算这个方法是可以的,也就是一个 Timer。
除非服务器端维护 5 份数据。(跟Client界面上显示的一模一样)。
然后,哪个数据要变化,就按某个规则推送 Client 变更这个值。
没有镜像文件,哪里来的“实时”?!byw,UDP的话,你也需要考虑是否丢包。更复杂。
当然了,你完全可以将数据的变动信息放在udp广播中,这样客户端接到广播通知后直接刷新本地数据就是了。
首先:你可以借用TUDP或TTCPSOCKET来进行。本来用TSOCEKETCONNECTION做客户端连接话,同样可以回调用一个接口来引发,不过效率可能不是很好。其次用第三方实现的三层,如REMOBJECT。本身就有TEVENT控件,可以很好的实现C-S,S-C之间的通迅。对于TDCOMCONNNCTION这种模式的话,未试过。
通知服务端有更改
服务端广播之
通知服务端有更改
服务端广播之