以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [建议]恳请狐爸核实或解释table对datatable的继承性问题 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=24685) |
-- 作者:shenyl0211 -- 发布时间:2012/10/20 13:00:00 -- [建议]恳请狐爸核实或解释table对datatable的继承性问题 帮助文件指出: 1、如果Table没有设置过该属性的值,那么从DataTable继承,如果Table已经设置了该属性的值,那么以Table的设置为准。 2、只有不同的Table需要不同的设置时,才需要使用Table的设置属性,否则直接用DataTable的设置属性即可。 3、实际上DataTable本身是不能编辑的,因为用户根本就看不到DataTable,用户能编辑的只能是Table,所以AllowEdit属性本应该只出现在Table中, 而DataTable之所以也提供这个属性,只是为了统一设置的方便。
可见,为了同时设置关联表的属性,应该用datatable,否则很啰嗦。 于是,我在自定义用户登录后,根据角色授权时使用了datatable,没用table,结果导致权限控制无效,而帮助文件的例子却是只用table没用datatable。为什么此时用datatable会失效呢?
因此,恳请狐爸核实或解释table对datatable的继承性问题。 [此贴子已经被作者于2012-10-21 19:03:37编辑过]
|
-- 作者:狐狸爸爸 -- 发布时间:2012/10/22 16:09:00 -- 用简单的例子说话吧,或者具体点,失效体现在?
|
-- 作者:shenyl0211 -- 发布时间:2012/10/26 13:49:00 -- 在AfterOpenProject事件中: Forms("用户登录").Open() |
-- 作者:lin_hailun -- 发布时间:2012/10/26 14:25:00 -- 测试正常,Datatalbes同样有效,不存在问题。 |
-- 作者:shenyl0211 -- 发布时间:2012/10/28 14:02:00 -- Tables(dr("表名")).cols(Values(I1)).AllowEdit = dr("可编辑") ——可以控制主表 DataTables(dr("表名")).datacols(Values(I1)).AllowEdit = dr("可编辑")——不能控制关联表
|
-- 作者:程兴刚 -- 发布时间:2012/10/28 14:34:00 -- 您的代码太过啰嗦,请整理您的思维逻辑:
Forms("用户登录").Open() |
-- 作者:程兴刚 -- 发布时间:2012/10/28 14:42:00 -- 真正要实现逻辑管理,应该这样使用:
在AfterOpenProject事件代码:
For Each t As Table In Tables
【用户登录】窗口的“登录”按钮代码:
If _UserName = "" Or _userroles="" Or _usergroup="" Then
|
-- 作者:程兴刚 -- 发布时间:2012/10/28 14:58:00 -- 1、如果Table没有设置过该属性的值,那么从DataTable继承,如果Table已经设置了该属性的值,那么以Table的设置为准。 比如:您在建立表结构的时候,您并没有设置表、列的标题,而界面显示的是table,他就是从datatable继承过来的。 2、只有不同的Table需要不同的设置时,才需要使用Table的设置属性,否则直接用DataTable的设置属性即可。 比如:当不同的窗口的不同的table绑定了同一个datatable,他们都继承了datatable的属性,而根据您的需要却要动态设置这两个table的不同属性。 3、实际上DataTable本身是不能编辑的,因为用户根本就看不到DataTable,用户能编辑的只能是Table,所以AllowEdit属性本应该只出现在Table中, 而DataTable之所以也提供这个属性,只是为了统一设置的方便。 这一条就不用解释了,您的这一条已经是一条再清楚不过的解释了。 |
-- 作者:shenyl0211 -- 发布时间:2012/10/29 18:29:00 -- 谢谢版主的热心解答。我发现问题所在了:因为所有的关联表都是table,而不是datatable,所以,权限管理表的“表名”列应该包含关联表名,但关联表较多或权限复杂时这样做就太啰嗦,可先找出所有的关联表,然后在代码中参照主表批量处理。 但存在几个问题: 1、AllowClipBoard 不是table的成员,Tables(dr("表名")).AllowClipBoard =dr("可粘贴") 是错的,前面必须加“data”,所以我的初始化不啰嗦。 2、即使用户登录出现问题,仍然可用“If _UserName = "" Or _userroles="" Or _usergroup="" Then ”来控制退出,所以本段代码不应放在登录中。 4、用户登录可做成通用的。因此,权限管理代码如果放在登录中,则因存在后来才加载的表视图,不可查阅的列也就成了可查阅的了。除非所有代码都放在登录中,且权限控制在加载表视图之后。 因此,我认为表、列先可查阅、可编辑是比较好的选择。 |
-- 作者:程兴刚 -- 发布时间:2012/10/29 18:33:00 -- 您按照您的思路慢慢弄吧,我糊涂了! |