Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

[5分]采用这种做法会降低系统效率吗?

1976yuan  发表于:2010-07-23 18:24:36  
复制

各位老师好,我已经开始用UMV开发平台做实际的工作软件了,有一个问题想请教一下各位老师。

 

请大家先看一下图片,下面是我的联系商管理截图:

 

 

    

     在这个界面上大家可以看到我去掉了以往的“修改”按钮,“删除”按钮也只是对管理员开放,联系商资料的修改则是通过单击“全称”字段的方式打开Edit窗体(“全称”字段已经做了单击事件),也就是说Edit窗体并不是通过平台正常做法的“修改”按钮来启动的。然后我又Edit窗体背后加入了字段级的权限管理的代码调用,这样每次启动Edit窗体时都会进行字段级的权限检验。

    

    之所以要采用这种做法,是因为我想在其他的更多的地方重复的使用这个Edit窗体,比如在订单管理模块或者采购订单管理模块下,用户只需要通过单击联系商的“全称”就能直接打开联系商的Edit窗体,此时如果该用户拥有联系商的修改权限就可以直接修改联系商的资料了,而无需再跑到联系商管理模块下去修改,也就是说这样做可以很大的方便操作者的使用。

 

       我现在的问题就是,当系统中有更多的基础资料都采用这种管理机制的话,会不会对整个系统的运行效率产生影响,之所以这样问,是因为字段级权限管理需要频繁的从后台数据库读取最新的权限数据记录,具体体现在下面的公用函数My_applyFieldRight中的红色字体部分。

 

Top
1976yuan 发表于:2010-07-23 18:35:10

为什么我法回贴啊,我的问题比较长还没有说完,由于论坛限制一次性的输入过多的文字,我只好通过自己回复自己的方式来补全提问,但我补了好几次,什么内容都没有。请问怎么回事啊?



1976yuan 发表于:2010-07-23 18:37:14

下面是Edit的Load事件

 

Private Sub Form_Load()
    If Me.OpenArgs <> "" Then
        Me.RecordSource = "Select * from tbl00LXR_联系商 where 联系商ID='" & Me.OpenArgs & "'"
    End If
    Call My_applyFieldRight(Me)
End Sub



1976yuan 发表于:2010-07-23 18:38:42

下面则是公用函数(请大家注意看红色部分的代码,我就担心这部分会影响系统效率)

 

 

Public Function My_applyFieldRight(frmAny As Form)
'本函数将某一窗体进行字段级的权限控制,想要进行字段级控制,必须满足下面三个基本条件:
'第一个条件,该窗体一定要有说明属性并且一定要以"fld"三个字符开头
'第二个条件,窗体中的字段默认应该设置为锁定状态,另外只对窗体中的文本框控件、复选框控件和组合框控件进行字段级权限控制
'第三个条件,窗体中需要进行字段级控制的字段必须要有tag属性
    Dim ctl As Control
    Dim strUserName As String

    If IsLoaded("usysfrmFieldRights_child_Add") Then    '如果usysfrmFieldRights_child_Add窗体打开了,则意味着管理员正在进行字段级管理权限的系统设置
        For Each ctl In frmAny.Controls
            If ctl.ControlType = acTextBox Or ctl.ControlType = acCheckBox Or ctl.ControlType = acComboBox Then
                If ctl.Tag <> "" Then
                    Forms("usysfrmFieldRights_child_Add").CobctlList.AddItem ctl.Tag & ";" & ctl.Name
                End If
            End If
        Next ctl
        DoCmd.Close acForm, frmAny.Name
        Exit Function
    End If
    '下面的代码则是正式的对该窗体中的每个需要设置权限的字段根据当前用户的权限情况进行字段级的权限设置
    strUserName = Forms!usysfrmLogin!txtUserName '当前用户代码
    DoCmd.RunSQL "Delete * from sys_tblFieldRights_temp"
    DoCmd.RunSQL "INSERT INTO sys_tblFieldRights_temp SELECT * FROM sys_tblFieldRights WHERE UserNumber='" & strUserName & "';"
    '上面两句DoCmd.RunSQL语句是把当前用户的字段级权限数据从服务器上下载到本地临时表,以减轻下面的遍历语句由于频繁的访问权限数据表而带来的网络流量
    If DCount("*", "sys_tblFieldRights_temp") = 0 Then Exit Function '如果当前用户没有任何字段级权限,则退出函数
   
    For Each ctl In frmAny.Controls
        If ctl.ControlType = acTextBox Or ctl.ControlType = acCheckBox Or ctl.ControlType = acComboBox Then
            If ctl.Tag <> "" Then
                If DCount("*", "sys_tblFieldRights_temp", "FrmName='" & frmAny.Name & "' And CtlName='" & ctl.Name & "'") > 0 Then
                    ctl.Locked = False '如果当前用户对该控件具有字段级权限,则解除该控件的锁定状态
                End If
            End If
        End If
    Next ctl
End Function



麥田 发表于:2013-09-27 16:07:10

http://www.accessoft.com/rdp/tutorial.html

学员请使用快速开发平台进行开发  今年已经上线



小赵 发表于:2013-10-19 00:03:51
用快速开发平台,那个是旧平台。

总记录:5篇  页次:1/1 9 1 :