Foxtable(狐表)用户栏目专家坐堂 → 独占式编辑在普通表中如何运用?


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

主题:独占式编辑在普通表中如何运用?

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


加好友 发短信
等级:四尾狐 帖子:976 积分:8527 威望:0 精华:0 注册:2012/2/9 16:35:00
独占式编辑在普通表中如何运用?  发帖心情 Post By:2012/9/4 21:10:00 [只看该作者]

各位老师,

 

看了一下工作流中的独占式编辑方法二,此方法是用在双击时打开一个录入窗口录入的情况下,如下代码

Dim cmd As New SQLCommand
Dim
exp As String  = "(编辑者 Is Null Or 编辑者 = '" & User.Name  & "') And [_Identify] = " & e.Row("_Identify")
cmd
.CommandText = "Update {员工} Set 编辑者 = '" & User.Name & "' Where " & exp
If
cmd.ExecuteNonQuery = 1 Then
   
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
       
cmd.CommandText = "Select Count(*) From {员工} Where [_Identify] = " & e.Row("_Identify")
        If
cmd.ExecuteScalar =0 Then
           
MessageBox.show("此行已被他人删除!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
        End If
    End If
End If

如果没有使用弹出窗口录入数据,而只是在普通表中当鼠标进入某行单元格要输入内容时如何实现类似的功能?

代码要如何修改?

 

谢谢!


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


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2012/9/4 21:45:00 [只看该作者]

 不可以

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


加好友 发短信
等级:四尾狐 帖子:976 积分:8527 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By:2012/9/4 21:55:00 [只看该作者]

谢谢狐爸,那很惨啊,你不是建议大家尽量不用窗口时就不要用,但其实系统中每一个表都会有独占式的要求啊,

那还有没有其他变通的方法(直接在表中录入或修改数据时),谢谢!


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


加好友 发短信 一级勋章
等级:超级版主 帖子:7235 积分:40574 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2012/9/5 1:39:00 [只看该作者]

1、增加一个逻辑型标记列,PositionChanged进入该行前判断该列的值,如果该列的值为false,允许进入该行操作同时向该列写入值true,操作完成退出该行前向该列写入逻辑值false

2、如果判断该列的值为true,说明已经由用户在该列操作,用e.Cancel = True禁止进入该行操作并提示当前用户排队等候或进行其他与该行无关的操作;

 

        这样理论上也应该可以完成独占式编辑的设计。

 


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


加好友 发短信
等级:四尾狐 帖子:976 积分:8527 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By:2012/9/5 7:12:00 [只看该作者]

谢谢程版,真的很让人感动啊,快两点了还在回复,但能详细点吗?我在PositionChanged中用以下代码:

表中增加的逻辑列为“正在编辑” 

Dim r As Row = e.Table.Current("正在编辑")
If r("正在编辑") = False Then
    e.Cancel = False
    r("正在编辑") = True
Else
    MessageBox.Show("有人正在编辑此行!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
    e.Cancel = True
End If

 

但提示出错


图片点击可在新窗口打开查看此主题相关图片如下:截图20120905070533837.jpg
图片点击可在新窗口打开查看

 

明天有空时再帮我看看好吗?

谢谢!


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


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

下次更新,在帮助文件增加一个这样的例子。

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


加好友 发短信 一级勋章
等级:超级版主 帖子:7235 积分:40574 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2012/9/5 8:35:00 [只看该作者]

由于PositionChanged中不能使用 e.Cancel,改用了禁止编辑列的做法,但比原来想象的更为灵活:

 

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目3.table

 

1、我用的内部表,正在编辑列打勾的行相当于其他用户正在编辑,大家可以改为外部表,多用户使用前,命令窗口清除正在编辑列的所有勾选;

2、当正在编辑时突然断电可能会导致该行不能再编辑,需要一个清除独占编辑的按钮,该按钮由您的超级管理员通过密码来操作;

 


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


加好友 发短信
等级:四尾狐 帖子:976 积分:8527 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By:2012/9/5 16:11:00 [只看该作者]

谢谢程版

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


加好友 发短信
等级:婴狐 帖子:29 积分:391 威望:0 精华:0 注册:2012/3/25 9:14:00
  发帖心情 Post By:2012/9/5 17:14:00 [只看该作者]

 增加一列   编辑人
StartEdit代码 :

e.Table.Current.DataRow.Load
If e.Row("编辑人")<>"" AndAlso e.Row("编辑人") <> User.Name
    MessageBox.Show("其他用户正在操作此订单,请稍后再进行操作","提示")
End If

BeforeSelChange代码:

If e.OldRange.RowSel <> e.NewRange.RowSel
    If e.OldRange.RowSel >= 0 AndAlso e.OldRange.Rowsel < e.Table.Rows.Count Then
        Dim r1 As Row = e.Table.Rows(e.OldRange.Rowsel)
        Dim r2 As Row = e.Table.Rows(e.NewRange.Rowsel)
        r1.DataRow.Load
        r2.DataRow.Load
        If r1.DataRow("编辑人")= User.Name Then
            r1.DataRow("编辑人")=""
            r1.Save
        End If
        If r2.DataRow("编辑人")="" Then
            r2.DataRow("编辑人")= User.Name
            r2.Save
        ElseIf r2.DataRow("编辑人")<>"" And r2.DataRow("编辑人")<>User.Name Then
            MessageBox.Show("其他用户已经在操作此订单,请稍后再操作","提示")
        End If
    End If
End If

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


加好友 发短信
等级:婴狐 帖子:29 积分:391 威望:0 精华:0 注册:2012/3/25 9:14:00
  发帖心情 Post By:2012/9/5 17:16:00 [只看该作者]

BeforeCloseObject代码:
 For Each r As DataRow In DataTables("表明").DataRows
    If r("编辑人")=User.Name Then
        r("编辑人")=""
    End If
Next

 回到顶部