以文本方式查看主题
- Foxtable(狐表) (http://foxtable.net/bbs/index.asp)
-- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2)
---- 这个错误提示怎么去掉 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=87256)
|
-- 作者:天若千颖
-- 发布时间:2016/7/6 17:22:00
-- 这个错误提示怎么去掉
请教红袍老师:
用开发人员账号登陆没有任何错误提示,换一个普通人员账号登陆提示不存在这个表
此主题相关图片如下:1.png
此主题相关图片如下:2.png
这个表以前可能有,但是被我删除了,但是我目前使用的数据链接中肯定没有,也或者可能是另外一个SQL数据库中的,软件更换了SQL数据库地址。
这个错误的提示怎么去掉呢?
|
-- 作者:天若千颖
-- 发布时间:2016/7/6 17:27:00
--
另外,再咨询一个问题,通过例子中的可视化权限管理,虽然把表的标题的隐藏了,但是我发现如果一个窗口中调用了这个表,同样是可以看见这个表的,能不能在这个语句中加一句,让如果没有授权这个用户查看这个表,即使窗口中引用了这个表,这个用户也无法查看窗口中的表。
\'可视化授权 For Each t As Table In Tables t.Visible = True t.AllowEdit = True For Each c As Col In t.Cols c.Visible = True c.AllowEdit = True Next Next Tables("授权表").Visible = (User.Type <> UserTypeEnum.User ) If User.Type = UserTypeEnum.User Then For Each dr As DataRow In DataTables("授权表").Select("用户名 = \'" & User.Name & "\'" ) If dr.IsNull("列名") Then Tables(dr("表名")).Visible = Not dr("不可见") Tables(dr("表名")).AllowEdit = Not dr("不可编辑") Else Tables(dr("表名")).Cols(dr("列名")).Visible = Not dr("不可见") Tables(dr("表名")).Cols(dr("列名")).AllowEdit = Not dr("不可编辑") End If Next End If
|
-- 作者:天若千颖
-- 发布时间:2016/7/6 21:24:00
--
续1楼,检查了另外一个SQL数据源,里面也没有这个表呢,应该是早就删除了,为什么还会出现这个错误呢。怎么删除掉?
|
-- 作者:大红袍
-- 发布时间:2016/7/6 23:33:00
--
你授权表里面有记录,你获取的是表里的值,没有,自然报错
For Each dr As DataRow In DataTables("授权表").Select("用户名 = \'" & User.Name & "\'" )
你可以加一个判断
For Each dr As DataRow In DataTables("授权表").Select("用户名 = \'" & User.Name & "\'" )
If Tables.Contains(dr("表名")) Then
End If
|
-- 作者:天若千颖
-- 发布时间:2016/7/7 8:23:00
--
谢谢红袍老师,这个做法是把第一个问题解决了,我以后如果删除表,也会把授权表里面的表删除掉。
另外就是2楼的问题,如果在授权表中让用户对某一个表不可见,实际上是隐藏了表的标签,当一个窗口引用了表,用户切换到这个窗口的时候,表还是可以看见,能否设置为,当这个表不让特定用户看见的时候,即使切换到引用这个表的窗口,这个用户还是无法看到这个表?并且弹出对话框提示“”你无权查看该表“”
|
-- 作者:Hyphen
-- 发布时间:2016/7/7 8:55:00
--
在窗口打开的时候再进行一次权限判断
|
-- 作者:天若千颖
-- 发布时间:2016/7/7 9:25:00
--
如何判断呢?能给出判断语句吗?
|
-- 作者:大红袍
-- 发布时间:2016/7/7 9:35:00
--
在afterLoad事件写代码
For Each c As object In e.form.controls If typeof c Is winform.Table Then Dim name As String = c.Table.DataTable.name Dim fdr As DataRow = DataTables("授权表").find("用户名 = \'" & User.Name & "\' and 表名 = \'" & name & "\' and 列名 is null") If fdr IsNot Nothing Then c.visible = not fdr("不可见") c.Table.AllowEdit = not fdr("不可编辑") End If End If Next
|
-- 作者:天若千颖
-- 发布时间:2016/7/7 9:53:00
--
这是需要再每个窗口的AfterLoad加入还是在项目的事件中写?
|
-- 作者:大红袍
-- 发布时间:2016/7/7 10:06:00
--
弄成一个内部函数,写到每个窗口的AfterLoad事件,总体控制。
|