Access交流中心

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

怎么给窗体添加身份验证

巴士岁月  发表于:2009-10-17 07:57:00  
复制

我想对所有窗体进行编号,在打开窗体之前,进行身份验证,有相关权限的才能打开。高手请赐教,谢谢!

 

Top
巴士岁月 发表于:2009-10-17 08:11:06

Function OpenForm(FormID As Integer)
On Error GoTo Err_OpenForm
Dim i As Integer
Dim STemp As String
Dim Rs1 As ADODB.Recordset
Dim Rs2 As ADODB.Recordset
Set Rs1 = New ADODB.Recordset
Set Rs2 = New ADODB.Recordset
'打开“系统权限”数据表
STemp = "Select * From 系统权限"
Rs1.Open STemp, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
'打开“系统窗体”数据表
STemp = "Select * From 系统窗体"
Rs2.Open STemp, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
Dim blnOpen As Boolean
Dim FormName As String
    blnOpen = False
    '判断“系统权限”数据是否为空
    If Rs1.RecordCount < 1 Then
        blnOpen = False
    Else
        Rs1.MoveFirst
        '判断当前“登录用户”是否有权限打开FormID对应的窗体
        For i = 1 To Rs1.RecordCount
            If Rs1("用户编号") = UserID And Rs1("窗体编号") = FormID _
                    And Rs1("权限") = True Then
                blnOpen = True
            Else
                Rs1.MoveNext
            End If
        Next i
    End If
    '在“系统窗体”数据表中搜索待打开窗体的“名称”
    Rs2.MoveFirst
    For i = 1 To Rs2.RecordCount
        If Rs2("窗体编号") = FormID Then
            FormName = Rs2("窗体名称")
        Else
            Rs2.MoveNext
        End If
    Next i
    '判断用户是否有权限打开窗体,blnOpen为“真”有权限
    If blnOpen = False Then
        MsgBox "您没有权限使用" & "“" & FormName & "”窗体", vbCritical, "无权使用"
    Else
        DoCmd.OpenForm FormName, acNormal, , , , acWindowNormal
    End If
    Set Rs1 = Nothing
    Set Rs2 = Nothing
    Exit Function
Err_OpenForm:
    Set Rs1 = Nothing
    Set Rs2 = Nothing
    MsgBox Err.Description, vbOKOnly, "窗体打开错误"
End Function

 

 

 

这是我通用模块里的程序,但打开窗体时没执行这个程序,是不是要配合宏使用,还有不知道其中FORMID是自定义的还是窗体本身的参数。



麥田 发表于:2009-10-17 10:43:17

下面这个示例给你灵感

[示例]通过按钮打开程序之前提示输入密码

http://www.accessoft.com/article-show.asp?id=3772



trynew 发表于:2009-10-17 11:26:10

你的理解错了。这个是一个权限控制系统,你缺了两个表,一个是“窗体编号”,保存窗体编号和窗体名称,一个是“系统权限”,保存窗体编号、用户编号、用户权限三个字段。

然后在按钮、treeview控件、或toolbar控件的事件中,不要用docmd.openform命令来打开窗体,而是用你自定义的OpenForm函数来打开相应编号的窗体。这样你的OpenForm()函数,根据你传递的窗体编号及登录时的设定的当前用户来查找权限是否允许打开,再根据窗体编号查到对应的窗体名称来用DoCmd.OpenForm FormName, acNormal, , , , acWindowNormal语句来打开窗体。

这是最简单的权限控制了,复杂一点的还可能用到只读打开、允许编辑、删除等等方面。

所谓的FormID就是你在“窗体编号”这个表中你自己给出的不同窗体的编号而已。如果你不用编号表示窗体而是直接用窗体名称表示,则可以省掉这个表,只用“系统权限”一个表(我喜欢这个方法,多个香炉多个。。。),当然你的OpenForm函数就要传递窗体名称了。



颜虎 发表于:2009-10-17 17:38:26
3楼对了

巴士岁月 发表于:2009-10-19 15:20:21

我用另外一个方法解决了,跟2楼的差不多,另谢谢 3楼4楼的老师,我明白你们的意思,相应的表我都有,只是在打开时OPENFORM没调用成功,我才学VBA不久,这些问题留着以后慢慢消化吧

再次谢谢几位!



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