Foxtable(狐表)用户栏目专家坐堂 → [求助]有关独占式编辑(已解决)


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

主题:[求助]有关独占式编辑(已解决)

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


加好友 发短信
等级:幼狐 帖子:172 积分:1323 威望:0 精华:0 注册:2011/6/6 12:22:00
[求助]有关独占式编辑(已解决)  发帖心情 Post By:2011/7/7 10:24:00 [只看该作者]

我设计了这样一个独占式编辑窗口

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

当执行如下操作时,
点击修改-》保存或撤消-》修改-》保存或撤消
 这个过程中,内容不做任何修改,
但是第一次点完保存或撤消按钮,后台的编辑者列并不能清空,第二次就可以清空,如此反复。

修改按钮代码如下:
Dim cmd As New SQLCommand
cmd.ConnectionName = _ConnectName
Dim exp As String  = "(sys_locked Is Null Or sys_locked = '" & _UserName & "') And [_Identify] = " & Tables("t_yg").Current("_Identify")
cmd.CommandText = "Update {t_yg} Set sys_locked = '" & _UserName & "' Where " & exp
If cmd.ExecuteNonQuery = 1 Then
    '编辑者更新成功,输入框有效化
   此处省略

Else
    cmd.CommandText = "Select sys_locked From {t_yg} Where [_Identify] = " & Tables("t_yg").Current("_Identify")
    Dim nm As String = cmd.ExecuteScalar
    If nm > "" Then
        MessageBox.show(nm & "正在编辑此行!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
    Else
        cmd.CommandText = "Select Count(*) From {t_yg} Where [_Identify] = " & Tables("t_yg").Current("_Identify")
        If cmd.ExecuteScalar =0 Then
            MessageBox.show("此行已被他人删除!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
        End If
    End If
End If

保存按钮代码:
Tables("t_yg").Current("sys_locked") = Nothing
Tables("t_yg").Current("lastedit") = _UserName
Tables("t_yg").Current.Save()
Tables("t_yg").Current.DataRow.Load()

撤消按钮代码如下:
Tables("t_yg").Current.Reject() '撤销编辑
Tables("t_yg").Current("sys_locked") = Nothing
Tables("t_yg").Current.Save()
DataTables("t_yg").Load

请帮忙看下是什么原因呢?

[此贴子已经被作者于2011-7-7 14:13:08编辑过]

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/7/7 10:36:00 [只看该作者]

If cmd.ExecuteNonQuery = 1 Then
    Tables("t_yg").Current("sys_locked") = _UserName
    DataTables("t_yg").BaseTable.AcceptChanges()
    '编辑者更新成功,输入框有效化
   '此处省略


Else
    cmd.CommandText = "Select sys_locked From {t_yg} Where [_Identify] = " & Tables("t_yg").Current("_Identify")
    Dim nm As String = cmd.ExecuteScalar
    If nm > "" Then
        MessageBox.show(nm & "正在编辑此行!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
    Else
        cmd.CommandText = "Select Count(*) From {t_yg} Where [_Identify] = " & Tables("t_yg").Current("_Identify")
        If cmd.ExecuteScalar =0 Then
            MessageBox.show("此行已被他人删除!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
        End If
    End If
End If

[此贴子已经被作者于2011-7-7 10:40:16编辑过]

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


加好友 发短信
等级:幼狐 帖子:172 积分:1323 威望:0 精华:0 注册:2011/6/6 12:22:00
  发帖心情 Post By:2011/7/7 11:03:00 [只看该作者]

狐爸太给力了,问题解决了,这是什么原理呢?帮助文件里都没有找到这样的用法啊?

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/7/7 11:06:00 [只看该作者]

如果sys_locked本来就没有内容,那么下面的代码没有任何意义:
 
Tables("t_yg").Current("sys_locked") = Nothing
Tables("t_yg").Save()

 

因为狐表在保存前会比较列的内容是否发生变化,如果没有发生变化,就不会保存。


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


加好友 发短信
等级:幼狐 帖子:172 积分:1323 威望:0 精华:0 注册:2011/6/6 12:22:00
  发帖心情 Post By:2011/7/7 11:17:00 [只看该作者]

噢,那是不是假如在改的那一块把datatable重新load一下也会有同样效果呢?
因为前面通过UPDATE把数据表已经更新了。
不知道这个理解对不对。

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/7/7 11:20:00 [只看该作者]

你提醒了我,其实下面的代码:

Tables("t_yg").Current("sys_locked") = _UserName
DataTables("t_yg").BaseTable.AcceptChanges()

 

可以改为:

Tables("t_yg").Current.Load

 

这样更合理,也更好理解。


 


 回到顶部