You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何已设置Open/Run权限的Access窗体,ADOX GetPermissions返回0?

Access 2003用户级安全中ADOX读取窗体Open/Run权限返回0的问题

场景

  1. 拥有一个启用用户级安全(User Level Security)的Access 2003(.MDB)数据库
  2. 数据库内存在组G和窗体F
  3. 通过“用户与组权限”对话框,为组G仅设置窗体F的Open/Run权限
  4. 使用属于组G的用户U登录,可正常打开窗体F
  5. 在VBA中,将ADOX.Catalog变量cat指向当前数据库,预期调用以下代码会返回adRightExecute(即0x20000000),但实际返回0(最后一个参数是标识窗体的GUID):
    cat.Groups("G").GetPermissions("F", adPermObjProviderSpecific, "{c49c842e-9dcb-11d1-9f0a-00c04fc2c2e0}")
    

我翻遍了各种资料,惊讶地发现ADO问世二十年来,居然没人提过这个情况!大概率是我的操作哪里出错了,求各位提供解决思路。

更新1

  • 当前权限设置情况:
    组G对窗体F的权限
  • 使用的测试函数:
    Function GetPermissionsGroupForm(groupName As String, formName As String) As Long
    
        Dim cat As ADOX.Catalog
        
        Set cat = New ADOX.Catalog
        Set cat.ActiveConnection = CurrentProject.Connection
        GetPermissionsGroupForm = _
            cat.Groups(groupName).GetPermissions( _
                formName, _
                adPermObjProviderSpecific, _
                "{c49c842e-9dcb-11d1-9f0a-00c04fc2c2e0}")
    
    End Function
    
  • 调用GetPermissionsGroupForm("G", "F")始终返回0(ADOX 2.8和6.0版本结果一致)

更新2

供参考,ADOX Permissions(Long型)的结构如下:

BITValueMeaning
000x00000001NOT USED
010x00000002NOT USED
020x00000004NOT USED
030x00000008NOT USED
040x00000010NOT USED
050x00000020NOT USED
060x00000040NOT USED
070x00000080NOT USED
080x00000100adRightDrop
090x00000200adRightExclusive
100x00000400adRightReadDesign
110x00000800adRightWriteDesign
120x00001000adRightWithGrant
130x00002000adRightReference
140x00004000adRightCreate
150x00008000adRightInsert
160x00010000adRightDelete
170x00020000adRightReadPermissions
180x00040000adRightWritePermissions
190x00080000adRightWriteOwner
200x00100000NOT USED
210x00200000NOT USED
220x00400000NOT USED
230x00800000NOT USED
240x01000000NOT USED
250x02000000adRightMaximumAllowed
260x04000000NOT USED
270x08000000NOT USED
280x10000000adRightFull
290x20000000adRightExecute
300x40000000adRightUpdate
310x80000000adRightRead

我尝试了所有标记为NOT USED的位以及已定义权限的组合,试图通过SetPermissions设置Open/Run权限,但全部失败!


内容的提问来源于Stack Exchange,提问作者Aram Gharib

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 06:44:59