c/s结构管理系统,在A客户端改变数据库的数据时,怎么通知也正在使用的客户端B呢?

时间:2022-02-24 09:00:28
c/s结构管理系统,在A客户端改变数据库的数据时,怎么通知客户端B数据库数据已经被改变,需要执行刷新操作?

16 个解决方案

#1


upup

#2


在客户端实时刷新或定时刷新。

#3


或者直接给B发消息

#4


最好的方式是用消息机制,如果A改变了就发送消息到B,
当然,在消息不起作用的时候,最好加上一个定时刷新机制,但是这样对运行效率有影响。

#5


加锁机制,对于数据库,而且一定要采用事务控制,这样才能保证数据的一致性。

#6


帮忙顶!楼主这个问题很产见常见,搞C/S必然会遇到的!!!但是好多书都没有说怎么处理哦!!!!

#7


up

#8


也想知道,帮你顶
我也正面临这问题呢

#9


SOCKET 呀,UDP发个消息。

#10


简单一点的你可以在客户端程序加一下timer,在 timer事件里定时检查状态,复杂一点你可以ZyxIp(绝望中...) 的方法

#11


我也想知道,这个问题很重要

#12


我就不明白了,为什么总是有人一而再,再而三提类似问题

1、从效率出发,是无法使用类似的功能的,因为频繁的刷新数据会造成系统缓慢
2、Delphi开发的C/S系统还没有必要使用实时刷新的功能,要刷新也行,但是最关键的是:
   到底多长时间刷新一次才合适?
3、如果硬要做本例所说的例子,必须满足以下几个条件
   A. 数据表的连接必须通过用户分开,实际上至少99%以上的开发程序都是通过SA连接数据表的,这根本无法区分到底是谁打开了这个表
   B. 可以通过TADOQuery的BeforePost/AfterPost及BeoreDelete/AfterDelete配合事务处理完成,也就是当用户彻底保存或删除某记录后通过事务发送消息给所有打开这个表的用户
   C. 通过数据库触发器完成,这个是最明智的方法,但是这种情况下是以异常的模式通知用户的,所以更加另用户讨厌。想象看:我上趟厕所回来一看,哇,有20多个提示信息提示我要刷新数据,烦S了

#13


数据刷新

#14


支持
Hank(星星农场)
楼主确实应该换个思路,呵呵

#15


加锁机制,对于数据库,而且一定要采用事务控制,这样才能保证数据的一致性。



请教如何在客户端对表进行加锁??

#16


我帮定!

#1


upup

#2


在客户端实时刷新或定时刷新。

#3


或者直接给B发消息

#4


最好的方式是用消息机制,如果A改变了就发送消息到B,
当然,在消息不起作用的时候,最好加上一个定时刷新机制,但是这样对运行效率有影响。

#5


加锁机制,对于数据库,而且一定要采用事务控制,这样才能保证数据的一致性。

#6


帮忙顶!楼主这个问题很产见常见,搞C/S必然会遇到的!!!但是好多书都没有说怎么处理哦!!!!

#7


up

#8


也想知道,帮你顶
我也正面临这问题呢

#9


SOCKET 呀,UDP发个消息。

#10


简单一点的你可以在客户端程序加一下timer,在 timer事件里定时检查状态,复杂一点你可以ZyxIp(绝望中...) 的方法

#11


我也想知道,这个问题很重要

#12


我就不明白了,为什么总是有人一而再,再而三提类似问题

1、从效率出发,是无法使用类似的功能的,因为频繁的刷新数据会造成系统缓慢
2、Delphi开发的C/S系统还没有必要使用实时刷新的功能,要刷新也行,但是最关键的是:
   到底多长时间刷新一次才合适?
3、如果硬要做本例所说的例子,必须满足以下几个条件
   A. 数据表的连接必须通过用户分开,实际上至少99%以上的开发程序都是通过SA连接数据表的,这根本无法区分到底是谁打开了这个表
   B. 可以通过TADOQuery的BeforePost/AfterPost及BeoreDelete/AfterDelete配合事务处理完成,也就是当用户彻底保存或删除某记录后通过事务发送消息给所有打开这个表的用户
   C. 通过数据库触发器完成,这个是最明智的方法,但是这种情况下是以异常的模式通知用户的,所以更加另用户讨厌。想象看:我上趟厕所回来一看,哇,有20多个提示信息提示我要刷新数据,烦S了

#13


数据刷新

#14


支持
Hank(星星农场)
楼主确实应该换个思路,呵呵

#15


加锁机制,对于数据库,而且一定要采用事务控制,这样才能保证数据的一致性。



请教如何在客户端对表进行加锁??

#16


我帮定!