调用 `ADODB.connection.open` 时检查用户的权限
Posted
技术标签:
【中文标题】调用 `ADODB.connection.open` 时检查用户的权限【英文标题】:Check the permission of user when calling `ADODB.connection.open` 【发布时间】:2022-01-23 21:40:24 【问题描述】:我被困在以下几个星期:
我需要使用 VBA Excel 删除并插入 SQL 数据库。
用于连接数据库的代码是:
sConnString= "string for the connexion to the database"
conn.Open sConnString, "username", "password"
Debug.Print conn.State
这里的答案是1
,根据微软文档,这意味着连接已打开。
然后我尝试使用以下代码执行 SQL 查询:
varSQL = "DELETE FROM mytable WHERE specificColumn = '" & specificVariable & "'"
Set Command1 = New ADODB.Command
With Command1
.ActiveConnection = conn
.CommandType = adCmdText
End With
With Command1
.CommandText = varSQL
.Execute NbRecordsAffected
End With
这将返回对DELETE
查询的拒绝访问
我想知道username
的用户是否有权限进行查询,所以我可以确定错误来自另一件事
提前谢谢你
【问题讨论】:
嗨 - 一种方法是处理错误以了解Access Denied
何时弹出。另一个取决于您的数据库,将查询给定用户的权限,并将其存储/检查在您的应用程序中
“SQL 数据库”不是很具体 - 如果您告诉我们您正在使用的实际数据库,可能会有更多有用的建议。例如:mssqltips.com/sqlservertip/6828/…
@TimWilliams 感谢您的评论,我实际上正在使用 Microsoft SQL,所以您评论中的链接似乎很有用,我会尝试一下,看看是否可以获得一些信息
【参考方案1】:
考虑使用 VBA 错误处理通过 ADO 错误集合捕获更多信息错误,如果使用 SQL Server 数据库,您可能会收到:
对象“mytable”、数据库“mydatabase”架构dbo的DELETE权限被拒绝
Sub Run_SQL()
On Error GoTo ErrorHandle
Dim conn As ADODB.Connection, Command1 AS ADODB.Command
'...your full code...
ExitHandle:
' RELEASE RESOURCES
Set Command1 = Nothing: Set conn = Nothing
Exit Sub
ErrorHandle:
' RAISE EVERY CONNECTION ERROR
Dim myError As ADODB.Error
For Each myError In conn.Errors
Msgbox myError.Number & " - " & myError.Description, "RUNTIME ERROR", vbCritical
Next myerror
Resume Exit_Handle
End Sub
【讨论】:
引发执行错误 13 : Incompatible type 您确定错误是由于用户权限还是您的非参数化/连接条件:WHERE specificColumn = '" & specificVariable & "'"
?尝试隔离特定问题以进行调试。
conn.Errors
类型与 VBA 错误不同。也许它有一个特定的类型。当我调试时,错误就在For Each myError In conn.Errors
这一行
你是对的。使用ADODB.Error
查看编辑。以上是关于调用 `ADODB.connection.open` 时检查用户的权限的主要内容,如果未能解决你的问题,请参考以下文章