Rss & SiteMap

Foxtable(狐表) http://www.foxtable.com

新一代数据库软件,完美融合Access、Foxpro、Excel、vb.net之优势,人人都能掌握的快速软件开发工具!
共6 条记录, 每页显示 10 条, 页签: [1]
[浏览完整版]

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

1楼
dlovef 发表于: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楼
狐狸爸爸 发表于: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编辑过]
3楼
dlovef 发表于:2011/7/7 11:03:00
狐爸太给力了,问题解决了,这是什么原理呢?帮助文件里都没有找到这样的用法啊?
4楼
狐狸爸爸 发表于:2011/7/7 11:06:00

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

 

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

5楼
dlovef 发表于:2011/7/7 11:17:00
噢,那是不是假如在改的那一块把datatable重新load一下也会有同样效果呢?
因为前面通过UPDATE把数据表已经更新了。
不知道这个理解对不对。
6楼
狐狸爸爸 发表于:2011/7/7 11:20:00

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

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

 

可以改为:

Tables("t_yg").Current.Load

 

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


 

共6 条记录, 每页显示 10 条, 页签: [1]

Copyright © 2000 - 2018 foxtable.com Tel: 4000-810-820 粤ICP备11091905号

Powered By Dvbbs Version 8.3.0
Processed in .02734 s, 2 queries.