Foxtable(狐表)用户栏目专家坐堂 → 多人直接操作表,如何防冲突


  共有3013人关注过本帖树形打印复制链接

主题:多人直接操作表,如何防冲突

帅哥哟,离线,有人找我吗?
lake163
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:276 积分:2971 威望:0 精华:0 注册:2010/9/20 11:21:00
多人直接操作表,如何防冲突  发帖心情 Post By:2015/9/25 9:08:00 [只看该作者]

    看了帮助,里面对于工作流和并发冲突有详细的介绍,但要求锁定表,然后设计窗口进行操作。

    如果不设计窗口,直接在表中设置一标志列,当某人开始编辑该行时,判断标志列情况,如为1,则提示无法修改;否则将标志改为1,并进行修改,修改结束后,再将标志改为0。

   请教各位老师,这一思路是否可行,具体事件代码设置在哪里、如何编写?

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/9/25 10:03:00 [只看该作者]

可以,参考独占编辑

 

http://www.foxtable.com/help/topics/2295.htm

 


 回到顶部
帅哥哟,离线,有人找我吗?
lake163
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:276 积分:2971 威望:0 精华:0 注册:2010/9/20 11:21:00
  发帖心情 Post By:2015/9/25 15:06:00 [只看该作者]

谢谢老师!
移植到自己的系统中,在添加了关于数据源的设置后,测试基本可用。当一人正在编辑时,另一人如再编辑会得到提示。

但在A、B两人基本同时打开项目的情况下,也有一些小问题(包括示例也存在):
1、A编辑过某行,且执行了保存,这时datatable中数据已修改过,但B的table中仍是原数据,如果其仍进行修改,然后保存,A的修改就无效,最张结果以B的为准。    
    这种情况,有的时候会导致数据的混乱,能否在A修改且保存后,使得B的显示数据自动更新呢?

2、原示例,缺少删除行的判断,在锁定情况下,别人仍可删除。当然,同样存在谁后保存的问题。 
   在BeforeDeletDatarow中写入以下代码,基本能起到作用。

If  e.DataRow("编辑者") <> User.Name Then    '如果编辑者不是当前用户
    If e.DataRow("编辑者") Is Nothing    '这句实际无效,但倒可以起到防误删作用   可能需要用NULL能判别
        messagebox.Show("无人锁定仍可删除")     
    Else 
        e.Cancel = True '取消编辑
        messagebox.Show("他人锁定,不可删除") 
    End If
End If

[此贴子已经被作者于2015/9/25 15:07:04编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/9/25 15:12:00 [只看该作者]

可以加一列,最后修改时间列,修改后,保存为当前时间。

 

当旧数据修改的时候,先判断时间列是不是晚于数据库的时间,然后load此行

 

http://www.foxtable.com/help/topics/2955.htm

 

http://www.foxtable.com/help/topics/0430.htm

 


 回到顶部
帅哥哟,离线,有人找我吗?
lake163
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:276 积分:2971 威望:0 精华:0 注册:2010/9/20 11:21:00
  发帖心情 Post By:2015/9/26 12:11:00 [只看该作者]

在DataChanged 事件中保存修改的最后时间
在BeforeSelChange 中执行换行时保存数据的操作。(未放在DataChanged中,主要是想减少保存次数)

然后在CurrentChanged (当前行变化后)中执行更新所在行数据的操作
使用 e.Table.Current().load()    速度很慢, 好象更新整个表一样
如果想加入与原有时间的对比:
    If e.Table.Current("修改时间") <> val  提示数据转换有误码

请教老师如何解决,以上思路是否合理?
   

[此贴子已经被作者于2015/9/26 14:01:50编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2015/9/28 8:33:00 [只看该作者]

 这个问题,等10月份的更新,会很方便地解决。

 回到顶部
帅哥哟,离线,有人找我吗?
lake163
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:276 积分:2971 威望:0 精华:0 注册:2010/9/20 11:21:00
  发帖心情 Post By:2015/10/4 12:19:00 [只看该作者]

期盼中。

 回到顶部