最近一直在考虑多客户端并发访问数据库的问题,我的想法是多客户端同一时间分别读取互相有交集的数据集并对数据集中的数据进行修改,如果一个客户端修改了一条记录那么在其他客户端的数据集中相应的这条记录自动刷新到最新的数据。
我查了一些资料,cursor type为ctKeyset、ctDynamic的服务器端游标能看到其他客户端对数据的修改,在游标滚动的时候当前记录会自动刷新到最新的数据。由于ctDynamic不支持books,我要用dbgrid做前端显示所以采用了ctKeyset。但是我发现用dbEdit这类显示单条数据控件的时候滚动游标能够刷新到其他客户端修改的最新数据但是用dbgrid这种同时显示多条记录的控件在滚动游标的时候数据没有刷新,哪位仁兄知道这是什么原因?
另外,关于游标哪位能对比ctdynamic解释一下ctKeyset的底层原理。我发现使用ctStatic和ctDynamic型游标的时候,如果两个客户端同时读取了一条记录,其中一个客户端先修改了这条记录,而另一个客户端在没有刷新数据集的情况下尝试修改这条记录会报错:“无法为更新定位行,一些值可能已在最后一次读取后已更改”,这样避免了一些不知情的更新数据覆盖。但是,当使用ctKeyset型游标的时候却没有这种机制,第二个客户端对记录已经发生变化不知情的情况下依然允许修改记录,为什么会有这样的区别呢?
哪位有更好的方法欢迎赐教,但是效率一定要高于requery。
我查了一些资料,cursor type为ctKeyset、ctDynamic的服务器端游标能看到其他客户端对数据的修改,在游标滚动的时候当前记录会自动刷新到最新的数据。由于ctDynamic不支持books,我要用dbgrid做前端显示所以采用了ctKeyset。但是我发现用dbEdit这类显示单条数据控件的时候滚动游标能够刷新到其他客户端修改的最新数据但是用dbgrid这种同时显示多条记录的控件在滚动游标的时候数据没有刷新,哪位仁兄知道这是什么原因?
另外,关于游标哪位能对比ctdynamic解释一下ctKeyset的底层原理。我发现使用ctStatic和ctDynamic型游标的时候,如果两个客户端同时读取了一条记录,其中一个客户端先修改了这条记录,而另一个客户端在没有刷新数据集的情况下尝试修改这条记录会报错:“无法为更新定位行,一些值可能已在最后一次读取后已更改”,这样避免了一些不知情的更新数据覆盖。但是,当使用ctKeyset型游标的时候却没有这种机制,第二个客户端对记录已经发生变化不知情的情况下依然允许修改记录,为什么会有这样的区别呢?
哪位有更好的方法欢迎赐教,但是效率一定要高于requery。
解决方案 »
- delphi2007用FastReport4.0制作报表,其中控件TfrxUserDataSet和数据库该怎么关联起来呢?通过什么属性?
- 关于Adobe Reader中 Dll的
- 动态添加的控件如何添加事件
- delphi下sql server 多关键字(用空格分开)查询,有点人工智能的意思了。
- 如何在窗体的标题栏添加按扭?
- 我封状的ocx在客户端的javascript脚本里调用,怎么才能不出IE的提示:“AxtiveX可能不安全”。顶者有分
- Form1.Print
- TQuery中的参数类型匹配问题?(急)
- 关于BDE的引来的困惑
- 第一次来,请别见笑
- 求一本关于delphi网络方面的好书!!
- 关于c/s的一个弱弱的问题1
如果是用TClientDataSet自带的appapplyupdata方法,则把服务器的providerflages的pfinKey设为真就可以了