我已经在安全级别驱动的MS Access数据库中创建了一个管理窗口。当确定用户的安全性是1,admin或2,则向用户显示此admin选项卡。
为了追逐目标,我创建了一个“切换按钮”(虽然不能达到我的预期目的,但确实可以实现窍门-相当不错)在我了解测试功能之前,它一直处于beta模式。
切换按钮显示“隐藏菜单”,它涉及导航,表格,查询...本质上是用户无意进入VBA,设计或查询以及解散任何内容所能做的所有事情。
再次单击切换按钮时,将恢复以上所有功能。
但是,即使它起作用,我也不确定是什么因素在起作用,因为其中一个设置会立即发生(功能区),然后直到重新启动Access时我才能看到其他设置。
这是按钮的代码:
Private Sub cmdToggleHide_Click()
Select Case Me.cmdToggleHide.Caption
Case "Show Menus"
Call EnableSetProperty(True)
Me.cmdToggleHide.Caption = "Hide Menus"
Case "Hide Menus"
Call EnableSetProperty(False)
Me.cmdToggleHide.Caption = "Show Menus"
End Select
End Sub
Public Function EnableSetProperty(bTrueFalse As Boolean)
On Error GoTo ThisError
'True means show all of access
If bTrueFalse = True Then
DoCmd.ShowToolbar "Ribbon", acToolbarYes
Else
DoCmd.ShowToolbar "Ribbon", acToolbarNo
End If
SetProperties "StartUpShowDBWindow", dbBoolean, bTrueFalse ' Display Database Window
SetProperties "StartUpShowStatusBar", dbBoolean, bTrueFalse 'Status Bar
SetProperties "AllowFullMenus", dbBoolean, bTrueFalse 'Access Full Menus
SetProperties "AllowSpecialKeys", dbBoolean, bTrueFalse 'F11, ALT F11, etc.
SetProperties "AllowBypassKey", dbBoolean, bTrueFalse 'Shift Key Override on loading
SetProperties "AllowShortcutMenus", dbBoolean, bTrueFalse 'Access Shortcut Menus. May be too severe
SetProperties "AllowToolbarChanges", dbBoolean, bTrueFalse 'Prevent Changes
SetProperties "AllowBreakIntoCode", dbBoolean, bTrueFalse 'Code Access'
Exit Function
ThisError:
MsgBox Err.Description
Exit Function
End Function
Public Function SetProperties(strPropName As String, varPropType As Variant, varPropValue As Variant) As Integer
On Error GoTo Err_SetProperties
Dim db As Database, prop As Property
Set db = CurrentDb
db.Properties(strPropName) = varPropValue
SetProperties = True
Set db = Nothing
Exit_SetProperties:
Exit Function
Err_SetProperties:
If Err = 3270 Then 'Property not found'
Set prop = db.CreateProperty(strPropName, varPropType, varPropValue)
db.Properties.Append prop
Resume Next
Else
SetProperties = False
MsgBox "Runtime Error # " & Err.Number & vbCrLf & vbLf & Err.Description
Resume Exit_SetProperties
End If
End Function
当我单击“隐藏菜单”按钮(打算“武装”或保护它)时发生的第一个古怪的事情是,顶部的功能区立即消失了。而且我不介意此设置是否确实需要,但是对于其余设置要“使用”,我必须关闭数据库并再次重新打开它。
当我重新打开它时,现在隐藏了导航的麻烦,并且无法“右键单击”表单来访问“设计视图”,并且按住“ Shift”不会绕过启动。但是,功能区现在又回来了。我不认为我有任何遗漏。这还不错,因为功能区上可访问的内容几乎没有害处。但是我不知道为什么会回来。
为了取消对系统的保护,您必须以管理员身份登录,在这种情况下,您仍然可以访问“管理员”标签和“隐藏/显示”菜单切换按钮。并且由于我没有将切换按钮与表中的值同步,因此它反映了当前状态,因此即使此时显示“ Show”,按钮仍然会显示“ Hide”(隐藏),因此biggie,我只需单击一次“隐藏”,然后按钮显示“显示”,然后单击“显示”,关闭访问权限,瞧瞧,导航和所有设置都恢复正常。为什么我没有将按钮与表中的值同步?因为我无法确定为什么这些设置不同步。当我尝试利用表中的复选框为不同的用户设置不同的设置时,情况将变得更加复杂。
如此精细。这是可行的。
但是我想让它工作,以便它按照界面布局建议的方式工作。如果我必须通知用户该设置只有在重新启动后才能进行,所以很好。但是我绝对想知道功能区发生了什么。
1)色带
我的猜测:如果隐藏功能区将“粘滞”在Access会话之外,这将使Access(对于每个数据库,而不仅仅是隐藏功能区的数据库)对于不了解反拼法的人来说几乎无法使用。试想一下所有的支持电话。:o
因此,重新启动Access时始终显示功能区。
若要始终隐藏它,您需要将“显示/隐藏”状态保存在一个表中,如果它是“隐藏”,请DoCmd.ShowToolbar "Ribbon", acToolbarNo
在从AutoExec宏调用的函数中执行。
2)其他设置
这些设置也可以通过进行设置File -> Options -> Current Database
。如果在此处设置它们,Access会通知您必须关闭并重新打开数据库才能使它们生效。
因此,这是正常现象,是设计使然。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句