以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  关于 网络环境中避免多人同时编辑的问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=30168)

--  作者:superman430
--  发布时间:2013/3/22 10:01:00
--  关于 网络环境中避免多人同时编辑的问题

If User.Roles = "实习生" Then
    MessageBox.Show("实习生无权查看业务详情!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
Else
    Dim cmd As New SQLCommand
    cmd.C
    Dim exp As String  = "当前编辑 Is Null And [_Identify] = " & e.Row("_Identify")
    cmd.CommandText = "Update {业务表} Set 当前编辑 = \'" & User_Name & "\' Where " & exp
    If cmd.ExecuteNonQuery = 1 Then \'修改行数
        e.Row("当前编辑") = User_Name
        e.Row.Save()
        Forms("业务信息窗口").Open
    Else
        cmd.CommandText = "Select 当前编辑 From {业务表} Where [_Identify] = " & e.Row("_Identify")
        Dim nm As String = cmd.ExecuteScalar
        If nm > "" Then
            MessageBox.show(nm & "正在编辑此行!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
        Else
            MessageBox.show("此行可能已经被删除,无法编辑!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
        End If
    End If
End If

 

为什么实际运行过程中,有的业务记录会提示此行可能已经被删除,无法编辑!,而有的又正常呢?


--  作者:狐狸爸爸
--  发布时间:2013/3/22 10:26:00
--  

后来,帮助补充了一段话:

 

死锁与强制解锁

 

如果用户在编辑过程中非正常退出,可能会导致死锁,我们再也无法编辑此行,要解决这个问题,有两个方法:

 

方法一

增加一个强制解锁按钮,代码为:

Tables("员工").Current("编辑者") = Nothing
Tables
("员工").Current.Save()

 

方法二

将原代码中的:

Dim exp As String  = "编辑者 Is Null And [_Identify] = " & e.Row("_Identify")

改为:

Dim exp As String  = "(编辑者 Is Null Or 编辑者 = \'" & User.Name & "\') And [_Identify] = " & e.Row("_Identify")

这样如果某个用户在编辑某行的过程中非正常退出,导致此行被锁死,那么该用户只需重新启动FoxTable,继续编辑此行,然后正常保存或退出,即可解锁。