共五个客户端,每个客户端都有一个DBGrid来显示数据,当其中一个客户端新增或修改了数据提交后,其他的客户端都得不到该数据的修正。除非手动CLOSE、OPEN 等动作。
小弟初学多层的数据库以及多客户端,比较迷茫,不知要如何才能自动更新到其他客户端的DBGRID,实现同步??
37 个解决方案
#1
使用什么方式连接
#2
使用DataSnap2010来连接
服务端使用DSTCPServerTransport
客户端使用DSProviderConnection
服务端使用DSTCPServerTransport
客户端使用DSProviderConnection
#3
数据量不是很大的话,可以考虑显示的部分用timer事件刷新一下。
#4
用TIMER刷新是可以实现,但如果设置的时间长,就起不到实时的效果,时间短了,又不太现实。
#5
刷新數據就可以了。。。
#6
不要刷,我这边的客户抱怨过这个问题。
你放一个 “刷新”按钮,让他们自己点。
但是,修改某条数据的时候,一定要取它在数据库的内容。而不是残留在界面上的东西。
你放一个 “刷新”按钮,让他们自己点。
但是,修改某条数据的时候,一定要取它在数据库的内容。而不是残留在界面上的东西。
#7
这个要操作员自己去 刷新 吧,现在的客户都真的把自己当作上帝了,他们怎么不嫌 拉屎还要脱裤子费事呢。
#8
给“刷新”按钮这个方法,不符合客户端的工作需求。客户端最重要的一项工作就是操作人根据数据的变化,进行操作,是被动的,不是主动的。如果要求操作人不断按“刷新”,我估计,一定会按疯。实时数据是客户端最终的目的。
#9
不能设置‘刷新’按钮。一定要做到实时更新。股票系统的数据怎么处理的呢?“大智慧”不都是实时的吗?
#10
查了一些资料,有些认为服务器端通过UDP通讯广播通知其余客户端刷新数据,让客户端接收指令后进行“刷新”。
难道只有通过客户端主动去刷数据的方法吗??没有方法让服务端主动向客户端推数据吗?
难道只有通过客户端主动去刷数据的方法吗??没有方法让服务端主动向客户端推数据吗?
#11
继续关注
#12
关注一下
#13
关注一下,以后用得着
#14
将datasetprovider 的options下的popropogatechanges=true;poautorefresh=true即可实服务器的所有变化自动返回到clientdataset中,这个方法有人说可以,也有说不可以。到底可以吗???
最近有外,这段时间都无法测试验证一下,有试过的朋友,请留言,谢谢!!
最近有外,这段时间都无法测试验证一下,有试过的朋友,请留言,谢谢!!
#15
关注。。
#16
就算这个方法是可以的,也就是一个 Timer。
除非服务器端维护 5 份数据。(跟Client界面上显示的一模一样)。
然后,哪个数据要变化,就按某个规则推送 Client 变更这个值。
没有镜像文件,哪里来的“实时”?!
byw,UDP的话,你也需要考虑是否丢包。更复杂。
#17
如果服务端向客户端送数据,那么,服务端就要是有状态的(需要保持每个客户端当前数据的状态以决定如何向客户端送数据),这种方式,如果客户端很少,那没问题,如果多了,服务端会承受不了。
现在的应用模式,都是向服务端无状态的方式演化,因此才是状态信息在客户端,客户端需要数据的时候主动向服务器请求的方式。
你所说的要求,可以采用在服务端单独做个服务程序,用来通知客户端数据的变动(像你说的udp广播也是一种方式),然后由客户端向服务端请求数据。
当然了,你完全可以将数据的变动信息放在udp广播中,这样客户端接到广播通知后直接刷新本地数据就是了。
现在的应用模式,都是向服务端无状态的方式演化,因此才是状态信息在客户端,客户端需要数据的时候主动向服务器请求的方式。
你所说的要求,可以采用在服务端单独做个服务程序,用来通知客户端数据的变动(像你说的udp广播也是一种方式),然后由客户端向服务端请求数据。
当然了,你完全可以将数据的变动信息放在udp广播中,这样客户端接到广播通知后直接刷新本地数据就是了。
#18
只有引导用户,养成“刷新”的习惯了。
#19
另外使用下面方法:
在服务器端定时扫描,检查数据是否更新,发信息通知客户端。
1、客户端手动“刷新”;
2、客户端自动“刷新”;
在服务器端定时扫描,检查数据是否更新,发信息通知客户端。
1、客户端手动“刷新”;
2、客户端自动“刷新”;
#20
如果用普通的MIDAS三层的话,一个客户通知服务去刷新其它客户的操作,相对于这样的接口不是很好实现,
首先:你可以借用TUDP或TTCPSOCKET来进行。本来用TSOCEKETCONNECTION做客户端连接话,同样可以回调用一个接口来引发,不过效率可能不是很好。
其次用第三方实现的三层,如REMOBJECT。本身就有TEVENT控件,可以很好的实现C-S,S-C之间的通迅。
对于TDCOMCONNNCTION这种模式的话,未试过。
首先:你可以借用TUDP或TTCPSOCKET来进行。本来用TSOCEKETCONNECTION做客户端连接话,同样可以回调用一个接口来引发,不过效率可能不是很好。
其次用第三方实现的三层,如REMOBJECT。本身就有TEVENT控件,可以很好的实现C-S,S-C之间的通迅。
对于TDCOMCONNNCTION这种模式的话,未试过。
#21
更新消息,我觉得应该可行, 即当某一客户更新数据,提交到服务器端,服务器端执行更新后,发消息到各客户端,数据已更新,更客户端执行重导.
好像记得有些属性设置后,会根据修改时间决定最后的结果
好像记得有些属性设置后,会根据修改时间决定最后的结果
#22
比如
ltOptimistic 独立模式(与原来结果集对照,如果在此期间其它用户修改了结果,则你的结果不能保存)
ltOptimistic 独立模式(与原来结果集对照,如果在此期间其它用户修改了结果,则你的结果不能保存)
#23
发个UDP广播
#24
一个人修改时,不允许其他人修改
#25
修改某条数据的时候,一定要取它在数据库的内容。而不是残留在界面上的东西。
加"立即刷新"
timer定时刷新(时间可稍长一些, 如20分钟)
这几条加到一起, 就可以了. 兼顾用户体验与编程复杂性.
加"立即刷新"
timer定时刷新(时间可稍长一些, 如20分钟)
这几条加到一起, 就可以了. 兼顾用户体验与编程复杂性.
#26
#27
UDP
通知服务端有更改
服务端广播之
通知服务端有更改
服务端广播之
#28
UDP
通知服务端有更改
服务端广播之
通知服务端有更改
服务端广播之
#29
#30
大智慧 也不是要设置刷新时间的吗?
#31
你这个设计就叫推数据,服务器向客户端发数据就叫‘推’,客户端从服务器上取数据就叫‘拉’,你最好在服务器上做一客户端状态登记。如果数据反生了变化,就根据那个状态信息,向客户端推数据就可以解决。很简单的。只是你要不断的检查这个客户端的状态。
#32
数据库相关表是不是需要设置触发器?
#33
做一个短信发布器。一但数据更新,就广播出去,通知客户更新数据。
#34
学习学习!!
#35
路过,学习中
#36
综合各方面考虑,最终还用通过IDTCPSever/IdTcpClinet通信,客户端收到特写信息进行刷新,感激大家提供宝贵的意见与经验,谢谢!!!
#37
补充下:除了IDTCPSever/IdTcpClinet通知客户端刷新外,还同时用IDTCPSever/IdTcpClinet通信将一些简单的数据通过记录方式发送到客户端。
#1
使用什么方式连接
#2
使用DataSnap2010来连接
服务端使用DSTCPServerTransport
客户端使用DSProviderConnection
服务端使用DSTCPServerTransport
客户端使用DSProviderConnection
#3
数据量不是很大的话,可以考虑显示的部分用timer事件刷新一下。
#4
用TIMER刷新是可以实现,但如果设置的时间长,就起不到实时的效果,时间短了,又不太现实。
#5
刷新數據就可以了。。。
#6
不要刷,我这边的客户抱怨过这个问题。
你放一个 “刷新”按钮,让他们自己点。
但是,修改某条数据的时候,一定要取它在数据库的内容。而不是残留在界面上的东西。
你放一个 “刷新”按钮,让他们自己点。
但是,修改某条数据的时候,一定要取它在数据库的内容。而不是残留在界面上的东西。
#7
这个要操作员自己去 刷新 吧,现在的客户都真的把自己当作上帝了,他们怎么不嫌 拉屎还要脱裤子费事呢。
#8
给“刷新”按钮这个方法,不符合客户端的工作需求。客户端最重要的一项工作就是操作人根据数据的变化,进行操作,是被动的,不是主动的。如果要求操作人不断按“刷新”,我估计,一定会按疯。实时数据是客户端最终的目的。
#9
不能设置‘刷新’按钮。一定要做到实时更新。股票系统的数据怎么处理的呢?“大智慧”不都是实时的吗?
#10
查了一些资料,有些认为服务器端通过UDP通讯广播通知其余客户端刷新数据,让客户端接收指令后进行“刷新”。
难道只有通过客户端主动去刷数据的方法吗??没有方法让服务端主动向客户端推数据吗?
难道只有通过客户端主动去刷数据的方法吗??没有方法让服务端主动向客户端推数据吗?
#11
继续关注
#12
关注一下
#13
关注一下,以后用得着
#14
将datasetprovider 的options下的popropogatechanges=true;poautorefresh=true即可实服务器的所有变化自动返回到clientdataset中,这个方法有人说可以,也有说不可以。到底可以吗???
最近有外,这段时间都无法测试验证一下,有试过的朋友,请留言,谢谢!!
最近有外,这段时间都无法测试验证一下,有试过的朋友,请留言,谢谢!!
#15
关注。。
#16
就算这个方法是可以的,也就是一个 Timer。
除非服务器端维护 5 份数据。(跟Client界面上显示的一模一样)。
然后,哪个数据要变化,就按某个规则推送 Client 变更这个值。
没有镜像文件,哪里来的“实时”?!
byw,UDP的话,你也需要考虑是否丢包。更复杂。
#17
如果服务端向客户端送数据,那么,服务端就要是有状态的(需要保持每个客户端当前数据的状态以决定如何向客户端送数据),这种方式,如果客户端很少,那没问题,如果多了,服务端会承受不了。
现在的应用模式,都是向服务端无状态的方式演化,因此才是状态信息在客户端,客户端需要数据的时候主动向服务器请求的方式。
你所说的要求,可以采用在服务端单独做个服务程序,用来通知客户端数据的变动(像你说的udp广播也是一种方式),然后由客户端向服务端请求数据。
当然了,你完全可以将数据的变动信息放在udp广播中,这样客户端接到广播通知后直接刷新本地数据就是了。
现在的应用模式,都是向服务端无状态的方式演化,因此才是状态信息在客户端,客户端需要数据的时候主动向服务器请求的方式。
你所说的要求,可以采用在服务端单独做个服务程序,用来通知客户端数据的变动(像你说的udp广播也是一种方式),然后由客户端向服务端请求数据。
当然了,你完全可以将数据的变动信息放在udp广播中,这样客户端接到广播通知后直接刷新本地数据就是了。
#18
只有引导用户,养成“刷新”的习惯了。
#19
另外使用下面方法:
在服务器端定时扫描,检查数据是否更新,发信息通知客户端。
1、客户端手动“刷新”;
2、客户端自动“刷新”;
在服务器端定时扫描,检查数据是否更新,发信息通知客户端。
1、客户端手动“刷新”;
2、客户端自动“刷新”;
#20
如果用普通的MIDAS三层的话,一个客户通知服务去刷新其它客户的操作,相对于这样的接口不是很好实现,
首先:你可以借用TUDP或TTCPSOCKET来进行。本来用TSOCEKETCONNECTION做客户端连接话,同样可以回调用一个接口来引发,不过效率可能不是很好。
其次用第三方实现的三层,如REMOBJECT。本身就有TEVENT控件,可以很好的实现C-S,S-C之间的通迅。
对于TDCOMCONNNCTION这种模式的话,未试过。
首先:你可以借用TUDP或TTCPSOCKET来进行。本来用TSOCEKETCONNECTION做客户端连接话,同样可以回调用一个接口来引发,不过效率可能不是很好。
其次用第三方实现的三层,如REMOBJECT。本身就有TEVENT控件,可以很好的实现C-S,S-C之间的通迅。
对于TDCOMCONNNCTION这种模式的话,未试过。
#21
更新消息,我觉得应该可行, 即当某一客户更新数据,提交到服务器端,服务器端执行更新后,发消息到各客户端,数据已更新,更客户端执行重导.
好像记得有些属性设置后,会根据修改时间决定最后的结果
好像记得有些属性设置后,会根据修改时间决定最后的结果
#22
比如
ltOptimistic 独立模式(与原来结果集对照,如果在此期间其它用户修改了结果,则你的结果不能保存)
ltOptimistic 独立模式(与原来结果集对照,如果在此期间其它用户修改了结果,则你的结果不能保存)
#23
发个UDP广播
#24
一个人修改时,不允许其他人修改
#25
修改某条数据的时候,一定要取它在数据库的内容。而不是残留在界面上的东西。
加"立即刷新"
timer定时刷新(时间可稍长一些, 如20分钟)
这几条加到一起, 就可以了. 兼顾用户体验与编程复杂性.
加"立即刷新"
timer定时刷新(时间可稍长一些, 如20分钟)
这几条加到一起, 就可以了. 兼顾用户体验与编程复杂性.
#26
#27
UDP
通知服务端有更改
服务端广播之
通知服务端有更改
服务端广播之
#28
UDP
通知服务端有更改
服务端广播之
通知服务端有更改
服务端广播之
#29
#30
大智慧 也不是要设置刷新时间的吗?
#31
你这个设计就叫推数据,服务器向客户端发数据就叫‘推’,客户端从服务器上取数据就叫‘拉’,你最好在服务器上做一客户端状态登记。如果数据反生了变化,就根据那个状态信息,向客户端推数据就可以解决。很简单的。只是你要不断的检查这个客户端的状态。
#32
数据库相关表是不是需要设置触发器?
#33
做一个短信发布器。一但数据更新,就广播出去,通知客户更新数据。
#34
学习学习!!
#35
路过,学习中
#36
综合各方面考虑,最终还用通过IDTCPSever/IdTcpClinet通信,客户端收到特写信息进行刷新,感激大家提供宝贵的意见与经验,谢谢!!!
#37
补充下:除了IDTCPSever/IdTcpClinet通知客户端刷新外,还同时用IDTCPSever/IdTcpClinet通信将一些简单的数据通过记录方式发送到客户端。