Option Compare Database
Option Explicit
'定义用于保存用户登录的“用户ID”值
Public UserID As String
'用于保存用户输入的“用户ID”等变量
Public SUserID As String '保存“用户ID”
Public SUserName As String '保存“用户名”
Public varPassword As Variant '保存“密码”
Public PasswordAsk As String '保存“密码提示”
Public PasswordAsw As String '保存“密码答案”
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布尔变量赋初值
blnOpen = False
'判断“系统权限”数据是否为空
If Rs1.RecordCount < 1 Then
blnOpen = False
Else
Rs1.MoveFirst
'判断当前“登录用户”是否有权限打开FormID对应的窗体
For i = 1 To Rs1.RecordCount
If Rs1("用户ID") = UserID And Rs1("窗体ID") = FormID _
And Rs1("权限") = True Then
'如果用户有权限,同把blnOpen变量值设置为“真”
blnOpen = True
Else
Rs1.MoveNext
End If
Next i
End If
'在“系统窗体”数据表中搜索待打开窗体的“名称”
Rs2.MoveFirst
For i = 1 To Rs2.RecordCount
If Rs2("窗体ID") = FormID Then
'把窗体名称赋予FormName变量
FormName = Rs2("窗体名称")
Else
Rs2.MoveNext
End If
Next i
'判断用户是否有权限打开窗体,blnOpen为“真”有权限
If blnOpen = False Then
'如果用户没有权限,则弹出“无权使用”窗口
MsgBox "您没有权限使用" & "“" & FormName & "”窗体", vbCritical, "无权使用"
Else
'使用DoCmd对象OpenForm的方法打开FormName窗体
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