以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  如何禁止用命令增加行  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=9117)

--  作者:sunnykorla
--  发布时间:2011/2/22 23:58:00
--  如何禁止用命令增加行

AfterOpenProject

DataTables("Title").AllowEdit = False

 

button1

ClickTables("Title").AddNew()

 

button2

ClickTables("Title").Current.Delete

 

无论点击button1 or 2 功能全部能够实现。

 

这个是不是有问题?

 

 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:shiyan.rar


--  作者:mr725
--  发布时间:2011/2/23 0:42:00
--  
DataTables("Title").AllowEdit = False   记得只针对手工操作,不能禁止代码的执行。。。
--  作者:狐狸爸爸
--  发布时间:2011/2/23 7:59:00
--  
另外:表属性有“允许增加行”的选项,直接通过菜单设置也可以。
--  作者:狐哥
--  发布时间:2011/2/23 12:16:00
--  

我是这样做的,参考一下,呵呵

 


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

 

增加行:

Dim r As Row = Tables("业务录入").Current
r.DataRow.Load() \'重新加载此行的数据
If r("费用") = "关" OrElse Vars("用户组") = "业务员"  OrElse Vars("用户组") = "财务" Then
    Return
Else
    Dim dab As Table = Tables("业务录入.费用管理")
    Dim dd As Row = Tables("业务录入").current
    If dab.rows.count = 0 Then
        dab.addnew()
    Else
        Dim ColNames As String() = {"公司简称","类别"}
        Dim dr As Row = dab.Rows(dab.rows.count-1)
        dab.Redraw = False
        dim drr as row = dab.addnew()
        For Each ColName As String in ColNames
            drr(ColName) = dr(ColName)
        Next
        dab.redraw = true
    End If
End If

 

删除行:

Dim r As Row = Tables("业务录入").Current
r.DataRow.Load() \'重新加载此行的数据
If r("费用") = "关" OrElse Vars("用户组") = "业务员" OrElse Vars("用户组") = "财务" Then
    Return
Else
    With Tables("业务录入.费用管理")
        If .Current IsNot Nothing Then
            If .current("收付编号") = "" Then
                .Current.Delete
            End If
        End If
    End With
    Dim dr As DataRow = Tables("业务录入").current.DataRow
    DataTables("业务录入").DataCols("费用").RaiseDataColChanged(dr)
End If

 

锁单:

Dim r As Row = Tables("业务录入").Current
r.DataRow.Load() \'重新加载此行的数据
Dim cmd As New SQLCommand
cmd.C外部数据
cmd.CommandText = "Update {业务录入} Set 费用 = \'关\' Where [_Identify] = " & r("_Identify")
cmd.ExecuteNonQuery()
Tables("业务录入.费用管理").AllowEdit = False

 

解单:

If Vars("用户组") <> "经理" Then
    MessageBox.Show("你不能解锁!")
    Return
Else
    Dim r As Row = Tables("业务录入").Current
    r.DataRow.Load() \'重新加载此行的数据
    Dim cmd As New SQLCommand
    cmd.C 外部数据
    cmd.CommandText = "Update {业务录入} Set 费用 = \'开\' Where [_Identify] = " & r("_Identify")
    cmd.ExecuteNonQuery()
    Tables("业务录入.费用管理").AllowEdit = True
End If

 

 

不知合不合理.反正达到要求了,哈哈


 

[此贴子已经被作者于2011-2-23 12:19:26编辑过]

--  作者:sunnykorla
--  发布时间:2011/2/23 14:18:00
--  

目的是这样的,给一个编辑录入界面,为防止数据随意改变,设置表锁定,需要编辑时解锁表。如果表在锁定情况下依然可以增加和删除行,那就没有必要锁定了,这个就是最大的危险,操作不当,那数据库就不复存在了,这个是安全问题。表锁定,菜单是不起效的,为何不能让这样的命令代码也不起效。我个人认为这个问题值得考虑!!!

感谢狐哥!!学习了!!


--  作者:狐狸爸爸
--  发布时间:2011/2/23 14:40:00
--  
可以自己删除菜单中的增加行和删除行的代码,自己写代码,先判断表是否锁定,如果没有锁定,再增加行或删除行。
--  作者:sunnykorla
--  发布时间:2011/2/23 18:18:00
--  

您的意思是判断DataTables or Tables 是否被锁定,然后执行。不过我记得好像DataTables or Tables 没有这样的属性,只有DataRow有,实验后可行。

谢谢!!!

请教:

除此之外还有没有什么办法能够判定DataTables or Tables 是否被锁定?


--  作者:mr725
--  发布时间:2011/2/23 18:34:00
--  
以下是引用sunnykorla在2011-2-23 18:18:00的发言:

您的意思是判断DataTables or Tables 是否被锁定,然后执行。不过我记得好像DataTables or Tables 没有这样的属性,只有DataRow有,实验后可行。

谢谢!!!

请教:

除此之外还有没有什么办法能够判定DataTables or Tables 是否被锁定?

If CurrentTable.DataTable.AllowEdit = True

     ............

end if


--  作者:sunnykorla
--  发布时间:2011/2/23 18:44:00
--  
以下是引用mr725在2011-2-23 18:34:00的发言:

If CurrentTable.DataTable.AllowEdit = True

     ............

end if

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:shiyan.rar
请教了,您给看看
--  作者:狐狸爸爸
--  发布时间:2011/2/23 21:11:00
--  

应该是False,而不是True,你搞反了:

 

If CurrentTable.AllowEdit =  False Then
    MessageBox.Show("请点击开始编辑!","提示",MessageBoxButtons.OK,MessageBoxIcon.Warning)
Else
    Tables("Title").AddNew()
End If