我在Microsoft Access中有一个连接到sql服务器的ODBC链接表。
对于某些用户,连接对 SQL Server 的访问的登录名只能访问具有db_datareader角色的一个数据库,因此他们无法编辑表中的任何数据。对于其他用户,他们具有db_datareader + db_datawriter角色,他们可以编辑任何数据。
如何在 vba 中检查我的表在db_datareader登录的情况下不可编辑?
可以使用直通查询来获取用户角色成员身份,并使用 querydefs 来创建或访问它们:
Public Function is_datawriter() As Boolean
Dim qdef As DAO.QueryDef
Dim rst As DAO.Recordset
Set qdef = CurrentDb.CreateQueryDef("")
qdef.Connect = "ODBC; MY_ODBC_CONN_STRING"
qdef.SQL = "SELECT IS_ROLEMEMBER('db_datawriter')"
Set rst = qdef.OpenRecordset(dbOpenDynaset)
If rst.Fields(0).Value = 1 Then is_datawriter = True
End Function
测试特定于表的权限稍微困难一些,但在您的情况下,这可能会。