以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]有关独占式编辑(已解决) (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=11083) |
-- 作者:dlovef -- 发布时间:2011/7/7 10:24:00 -- [求助]有关独占式编辑(已解决) 我设计了这样一个独占式编辑窗口 当执行如下操作时, 点击修改-》保存或撤消-》修改-》保存或撤消 这个过程中,内容不做任何修改, 但是第一次点完保存或撤消按钮,后台的编辑者列并不能清空,第二次就可以清空,如此反复。 修改按钮代码如下: 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编辑过]
|
-- 作者:狐狸爸爸 -- 发布时间:2011/7/7 10:36:00 -- If cmd.ExecuteNonQuery = 1 Then
[此贴子已经被作者于2011-7-7 10:40:16编辑过]
|
-- 作者:dlovef -- 发布时间:2011/7/7 11:03:00 -- 狐爸太给力了,问题解决了,这是什么原理呢?帮助文件里都没有找到这样的用法啊? |
-- 作者:狐狸爸爸 -- 发布时间:2011/7/7 11:06:00 -- 如果sys_locked本来就没有内容,那么下面的代码没有任何意义:
因为狐表在保存前会比较列的内容是否发生变化,如果没有发生变化,就不会保存。 |
-- 作者:dlovef -- 发布时间:2011/7/7 11:17:00 -- 噢,那是不是假如在改的那一块把datatable重新load一下也会有同样效果呢? 因为前面通过UPDATE把数据表已经更新了。 不知道这个理解对不对。
|
-- 作者:狐狸爸爸 -- 发布时间:2011/7/7 11:20:00 -- 你提醒了我,其实下面的代码: Tables("t_yg").Current("sys_locked") = _UserName
可以改为: Tables("t_yg").Current.Load
这样更合理,也更好理解。
|