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


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

主题:关于独占式编辑

帅哥哟,离线,有人找我吗?
有点甜
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | 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

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


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | 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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | 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


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


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

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

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


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

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


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


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

 doubleclick也要判断,除非直接判断是不是新增行

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


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

 这个确实有点问题,你改一下吧,这种情况,就也把窗口打开。


 回到顶部