Foxtable(狐表)用户栏目专家坐堂 → 关于独占式编辑


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

主题:关于独占式编辑

美女呀,离线,留言给我吧!
zeta_123
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:58 积分:556 威望:0 精华:0 注册:2014/4/14 15:01:00
关于独占式编辑  发帖心情 Post By:2014/11/20 8:59:00 [只看该作者]

正在看独占式编辑,看完后有个疑问,如果有个人在编辑表的时候,忘了退出了,那他是不是就一直占着这条信息,别人就一直进不去编辑了?有没有什么方法可以解决这个问题呢?

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/11/20 9:03:00 [只看该作者]

 不是有一个强制解锁的么?

 

 

5、将表事件BeforSaveDatarow代码设置为:

If e.DataRow.RowState = DataRowState.Added Then '如果是新增行
    e.DataRow("编辑者") = Nothing
Else
    Dim cmd As New SQLCommand
    cmd.CommandText = "Update {员工} Set 编辑者 = Null Where [_Identify] = " & e.DataRow("_Identify")
    If cmd.ExecuteNonQuery = 1 Then
        e.DataRow("编辑者") = Nothing
    End If
End If

上述代码在保存行之前,清除此行的编辑者列内容,也就是解锁此行。

你也许会奇怪,为什么新增行可以直接清空编辑者列的内容,但其它行要通过Update语句设置?
假定现有一行数据,用户张三双击此行某个单元格开始编辑,系统执行StartEdit事件,将编辑者列的内容设置为“张三”,后台此列的内容也通过 Update语句设置为了“张三”,如果此用户在编辑过程中,没有做任何修改,就选择了其他单元格,然后保存,此时如果在 BeforeSaveDataRow事件中直接清空编辑者列内容,那么此行所有列的内容和最初完全一样,Foxtable将不会保存此行,所以虽然你清空了编辑者列的内容,但是后台的编辑者列还是“张三”,导致记录被锁死。
这里涉及到Foxtable的保存机制:在保存某行之前,系统会进行一个判断,如果此行所有列内容和最初完全相同,则跳过此行,以提高保存效率。

6、最后设置BeforeCloseProject事件代码为:

Dim cmd As New SQLCommand
cmd.CommandText = "Update {员工} Set 编辑者 = Null Where 编辑者 = '" & User.Name & "'"
cmd.ExecuteNonQuery

这样在关闭项目前,将清除当前用户锁定的全部行。


 回到顶部
美女呀,离线,留言给我吧!
zeta_123
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:58 积分:556 威望:0 精华:0 注册:2014/4/14 15:01:00
  发帖心情 Post By:2014/11/20 9:44:00 [只看该作者]

上面代码是保存或者退出时执行的,但问题是,如果因为某些原因,他没有点击保存,也没有退出,一直占着这个资源那该怎么办?

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/11/20 9:47:00 [只看该作者]

 

[此贴子已经被作者于2014-11-20 9:46:41编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/11/20 9:47:00 [只看该作者]

 做个按钮强制清除

 

Dim cmd As New SQLCommand
cmd.CommandText = "Update {员工} Set 编辑者 = Null Where [_Identify] = " & Tables("表A").Current("_Identify")
If cmd.ExecuteNonQuery = 1 Then
    Tables("表A").Current("编辑者") = Nothing
End If


 回到顶部
客人(222.139.*.*)
  6楼


  发帖心情 Post By:2014/11/20 10:08:00 [只看该作者]

好的,谢谢有点甜

另外一个问题,下面的代码表示新增行也需要独占式编辑,是吗?

5、将表事件BeforSaveDatarow代码设置为:

If e.DataRow.RowState = DataRowState.Added Then '如果是新增行
    e.DataRow("编辑者") = Nothing



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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/11/20 10:10:00 [只看该作者]

6楼的代码,意思是,新增行,不需要设置独占,因为此行在没保存之前,是没有保存进数据库,别人是不知道的。

 回到顶部
美女呀,离线,留言给我吧!
zeta_123
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:58 积分:556 威望:0 精华:0 注册:2014/4/14 15:01:00
  发帖心情 Post By:2014/11/20 10:16:00 [只看该作者]

既然新增行别人看不到,为什么独占式编辑还需要下面代码呢?



   4、将表事件DataRowAdding代码设置为:

        e.DataRow("编辑者") = User.name

5、将表事件BeforSaveDatarow代码设置为:

If e.DataRow.RowState = DataRowState.Added Then '如果是新增行
    e.DataRow("编辑者") = Nothing



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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/11/20 10:22:00 [只看该作者]

 为了在startEdit判断,要保持统一。


 回到顶部
美女呀,离线,留言给我吧!
zeta_123
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:58 积分:556 威望:0 精华:0 注册:2014/4/14 15:01:00
  发帖心情 Post By:2014/11/20 10:32:00 [只看该作者]

   明白了!在示例1我觉得没问题。 
   在示例2中在窗口中实现独占式编辑。也有如下代码,不知怎么理解?
    4、将表事件DataRowAdding代码设置为:

        e.DataRow("编辑者") = User.name

     


 回到顶部
总数 14 1 2 下一页