Rss & SiteMap
Foxtable(狐表) http://www.foxtable.com
在帮助文件中有个可视化授权的说明,我想在那个表中再加一个列,列名为“只能编辑个人数据”的逻辑列,当这个列的值设为真时(项目系统中的每个表都设有一个“新增用户”列和“数据状态”逻辑列,用来记录表中这个记录是由谁新增的及数据的状态),那么这个用户就只能修改属于他新增加的且数据的状态为录入状态的。
要实现这个想法,不知可行否,如果可以,应该用什么样的代码呢?请各位教一下。
可以,先自己写吧
以下为我在系统的自定义的登陆窗口的确定按钮的代码:
Dim r As String =e.Form.Controls("ComboBox1").Value
Dim mm As String =e.Form.Controls("TextBox1").Value
dim kj as string=e.Form.Controls("TextBox2").Value
Dim dr As DataRow
'在用户表查找所输入用户名与密码的行
dr = DataTables("用户").Find("[用户] = '" & r & "' And [密码] = '" & mm & "'")
If dr IsNot Nothing Then '如果找到
if dr("暂停登录")=False then
Vars("_UserGroup ") = dr("组")
Tables("登陆")(0)("用户名") = r '与入当前表第一行用户名列为输入用户名
Tables("登陆")(0)("会计期间") = kj
Vars("_UserName ") = r '写入全局变量
e.Form.Close() '关闭窗口
For Each t As Table In Tables
t.Visible = True
t.AllowEdit = true
t.AllowLockRow = true
t.AllowUnlockRow=true
For Each c As Col In t.Cols
c.Visible = True
c.AllowEdit = True
Next
Next
Tables("登陆").Visible = (Vars("_UserGroup ") = "程序开发")
Tables("提示").Visible = (Vars("_UserGroup ") = "程序开发")
Tables("用户").Visible = (Vars("_UserGroup ") = "程序开发")
Tables("授权表").Visible = (Vars("_UserGroup ") = "程序开发")
If Vars("_UserGroup ") <> "程序开发" Then
For Each dr1 As DataRow In DataTables("授权表").Select("用户名 = '" & Vars("_UserName ") & "'" )
If dr1.IsNull("列名") Then
Tables(dr1("表名")).Visible = Not dr1("不可见")
Tables(dr1("表名")).AllowEdit = Not dr1("不可编辑")
Else
Tables(dr1("表名")).Cols(dr1("列名")).Visible = Not dr1("不可见")
Tables(dr1("表名")).Cols(dr1("列名")).AllowEdit = Not dr1("不可编辑")
End If
if dr1("可审核")=true then
Tables(dr1("表名")).AllowLockRow = true
else
Tables(dr1("表名")).AllowLockRow = False
end if
if dr1("可反审核")=true then
Tables(dr1("表名")).AllowUnlockRow = true
else
Tables(dr1("表名")).AllowUnlockRow = false
end if
if dr1("只能编辑个人数据")=true then
?????(我想在这个地方一次性地设计代码,不用到每个表的相关事件中再去设计代码,不知可否,想不明白啊)
else
?????(我想在这个地方一次性地设计代码,不用到每个表的相关事件中再去设计代码,不知可否,想不明白啊)
end if
Next
End If
'for each rb as RibbonMenu.Tab in RibbonTabs 'RibbonTabs是一个菜单集合,可以用for each遍历的
'rb.Visible = True '显示菜单
'Next
'按用户组显示或隐藏菜单项目
'If Vars("用户组") <> "管理员" Then
' RibbonTabs("DIY")("管理员操作").Visible = False
' RibbonTabs("DIY")("设计员操作").Visible = False
'Else
' RibbonTabs("DIY")("管理员操作").Visible = True
'RibbonTabs("DIY")("设计员操作").Visible = True
'End If
maintable=tables("工资录入表") '登陆成功
Else
MessageBox.Show("用户已被暂停使用!,请与管理员联系", "提示", MessageBoxButtons.ok, MessageBoxIcon.Error)
e.Form.Controls("TextBox1").Select() '将输入焦点移到密码文本框中.
end if
else
MessageBox.Show("用户名或密码错误!", "提示", MessageBoxButtons.ok, MessageBoxIcon.Error)
e.Form.Controls("TextBox1").Select() '将输入焦点移到密码文本框中.
End If
请问,用什么的代码在全局变量中保存每个表的“只能编辑个人数据”设置比较科学好呢?
随便啊,例如定义全局代码
Public _表A As Boolen
Public _表B As Boolen
你自己的代码,加在If dr IsNot Nothing Then 后面
Select Case dr1("表名")
case "表A"
_表A = dr1("只能编辑个人数据")
case "表B"
_表B = dr1("只能编辑个人数据")
end Select
哈哈,我想到了个好办法,这个方法不用增加全局变量,就是在全局表的事件中的StartEdit中设置如下代码就能达成目的了:
Select Case e.Table.Name
Case "员工资料","工序编码表","工序单价表","工资录入表"
For Each dr1 As DataRow In DataTables("授权表").Select("用户名 = '" & Vars("_UserName ") & "'" )
if dr1("表名") =e.Table.name AndAlso dr1("只能编辑个人数据")=true then
if Vars("_UserName ") <> e.row("修改用户") then
e.cancel=true
Messagebox.Show("你只能编缉属于你自己的数据!,如有疑问,请与管理员联系","提示",MessageBoxButtons.OK, MessageBoxIcon.Information)
End If
end if
next
End Select
我在BeforeLoadOuterTable事件中设的代码如下,请问这样会有什么错误呢:
Select Case e.DataTableName
Case "员工资料","工序编码表","工序单价表","工资录入表"
For Each dr1 As DataRow In DataTables("授权表").Select("用户名 = '" & Vars("_UserName ") & "'" )
if dr1("表名")=e.DataTableName AndAlso dr1("只加载本部门数据")=true then
if e.DataTableName="工资录入表" AndAlso Vars("会计期间") <>"" then
e.SelectString = "Select * From {工资录入表} Where [会计期间] = '" & Vars("会计期间") & "'and [部门] = '" & Vars("部门名称") & "'"
else
e.SelectString = "Select * From {e.DataTableName} Where [部门] = '" & Vars("部门名称") & "'"
End If
end if
next
End Select