以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  不同用户加载不同的表报错  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=139720)

--  作者:luckbetter333
--  发布时间:2019/8/20 9:20:00
--  不同用户加载不同的表报错
如题,按帮助文件设置不同用户加载不同的表,
Select Case e.DataTableName
    Case "表A" 
        e.Cancel = (e.User.Name = "张三")
    Case "表B" 
        e.Cancel = (e.User.Name = "李四") 
    Case "表C" 
        e.Cancel = (e.User.Name = "王五")
End Select
报错
图片点击可在新窗口打开查看此主题相关图片如下:1566263877(1).png
图片点击可在新窗口打开查看
[此贴子已经被作者于2019/8/20 9:20:48编辑过]

--  作者:有点蓝
--  发布时间:2019/8/20 9:33:00
--  
代码在什么事件里?每一段代码都有其使用场合,帮助一般会说明在什么事件里使用的

重启一下项目再试

--  作者:luckbetter333
--  发布时间:2019/8/20 10:02:00
--  
3、为不同用户加载不同的表

BeforeLoadInnerTable和BeforeLoadOuterTable事件都有一个Cancel属性,将此属性设置为True,将不加载对应的表。

例如在BeforeLoadInnerTable(内部表)或BeforeLoadOuterTable(外部表)中设置代码:

Select Case e.DataTableName
    Case "表A" 
        e.Cancel = (e.User.Name = "张三")
    Case "表B" 
        e.Cancel = (e.User.Name = "李四") 
    Case "表C" 
        e.Cancel = (e.User.Name = "王五")
End Select

这样张三打开项目,将不会加载表A,需要注意的是,如果打开项目后,有代码引用表A,将会出错,因为此时表A是不存在的。
同样李四打开项目不会加载表B,王五打开项目不会加载表C。

在BeforeLoadOuterTable里

--  作者:有点蓝
--  发布时间:2019/8/20 10:26:00
--  
关闭项目,重新启动
--  作者:luckbetter333
--  发布时间:2019/8/20 16:01:00
--  
重启后好用了,但是一用其他用户登录就各种报错,因为在项目的CurrentTableChanged中用了Tables().ListMode = True
有没有什么好办法可以不加载与该用户不相关的表不报错?


--  作者:有点酸
--  发布时间:2019/8/20 16:03:00
--  
if  tables.Contains("xxx") then
    Tables("xxx").ListMode = True
end if