以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  这个错误提示怎么去掉  (http://foxtable.com/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事件,总体控制。