以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  网络环境下并发冲突处理  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=6999)

--  作者:jxkqf
--  发布时间:2010/5/7 8:36:00
--  网络环境下并发冲突处理
网络情况下多用户操作同一张数据表,如何实现某一用户编缉某行数据就锁定,编缉完本行后解锁以使其他用户可以继续编缉?用代码吗?如何实现?

按贺老六指示,我查看了帮助中的网络环境下的工作流和并发冲突处理,但我不希望有窗体,直接在数据表中操作。
--  作者:狐狸爸爸
--  发布时间:2010/5/7 8:39:00
--  

这种情况,至少得有两个按钮:开始编辑、结束编辑,不愿意窗体,就将这两个按钮做在菜单中。


--  作者:jxkqf
--  发布时间:2010/5/7 8:57:00
--  
可否在表属性的startedit事件中输入如下代码:
Dim r As Row = Tables("表A").Current
r.
DataRow.Load() \'重新加载此行的数据
If
r.IsNull("标记") Then
   
Dim cmd as New SQLCommand
    cmd.CommandText =
"Update {表A} Set 标记 = -1 Where 标记 Is Null And [_Identify] = " & r("_Identify")
    If
cmd.ExecuteNonQuery <> 1 Then
\'防止并发冲突,上面的条件是很关键的
        
 MessageBox.Show("其他用户已经抢先处理此行!")
    End
If
ElseIf
r("标记") = -1 Then
    Messagebox.Show(
"其他用户正在处理此行!")
End If

--  作者:狐狸爸爸
--  发布时间:2010/5/7 9:00:00
--  
每个单元格来一次这样的操作,效率可能低了点,你可以测试一下,如果速度能够接受,那也未尝不可。