如何在AccessVBA中查看ODBCSQLServertable是否有写权限?
How to check in Access VBA whether ODBC SQL Server table has write access?
我在 Microsoft Access 中有一个连接到 sql 服务器的 ODBC 链接 table。
对于某些用户,连接访问 SQL 服务器的登录名只能访问具有 db_datareader 角色的一个数据库,因此他们无法编辑 table 中的任何数据。
对于其他用户,他们具有 db_datareader + db_datawriter 角色,他们可以编辑任何数据。
如果 db_datareader 登录,我如何检查 vba 我的 table 不是 editable?
您可以使用直通查询获取用户角色成员身份,并使用 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
测试 table 特定权限稍微困难一些,但在您的情况下,这可能就可以了。
我在 Microsoft Access 中有一个连接到 sql 服务器的 ODBC 链接 table。
对于某些用户,连接访问 SQL 服务器的登录名只能访问具有 db_datareader 角色的一个数据库,因此他们无法编辑 table 中的任何数据。 对于其他用户,他们具有 db_datareader + db_datawriter 角色,他们可以编辑任何数据。
如果 db_datareader 登录,我如何检查 vba 我的 table 不是 editable?
您可以使用直通查询获取用户角色成员身份,并使用 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
测试 table 特定权限稍微困难一些,但在您的情况下,这可能就可以了。