Access ODBC passthru 查询失败,错误 3146 给出不同的错误描述文本
Posted
技术标签:
【中文标题】Access ODBC passthru 查询失败,错误 3146 给出不同的错误描述文本【英文标题】:Acces ODBC passthru query fails with error 3146 giving different error description texts 【发布时间】:2020-06-28 18:42:46 【问题描述】:我创建了一个通过查询选择 Postgres v.11 数据库表的行。 运行 currentDb.execute 会生成 ODBC 错误 3146 和 DBEngine.errors 中提到的“无效参数”。 在数据库资源管理器中打开相同的查询会生成 ODBC 错误 3146 和一个带有“permission denied ...”的消息框,这实际上反映了错误的来源。
我的问题是如何以编程方式获取后面的更多信息错误消息?
【问题讨论】:
既然这是一个 ODBC/Access 问题,最好知道 ODBC 驱动程序是什么以及 Access 版本。 使用 DAO 时,您几乎无法控制与查询一起发送的错误和文本。相反,通过 ADO 执行查询,它对错误和事件有更广泛的支持。 感谢@ErikA,您的评论是否暗示MS Access 在通过导航窗格打开通路查询时在内部使用ADO,而不是在VBA 脚本中打开时使用DAO? @PavelMurnikov 不。 Access 本身使用 ODBC,afaik。虽然您也可以这样做,但这是一项繁重的工作,而且本质上是在重新发明***。你可以在上面找到文档here,虽然将所有 C 结构和函数映射到 VBA 是可行的,但这并不容易。 【参考方案1】:我认为以下内容将提供您正在寻找的内容:
Public Function DbEngineErrors() As String
Dim intErr As Integer
Dim strRet As String
Dim strErr As String
If DBEngine.Errors.Count > 0 Then
strRet = "DbEngineErrors:"
For intErr = 0 To DBEngine.Errors.Count - 1
strErr = DBEngine.Errors(intErr).Number & " / " & DBEngine.Errors(intErr).Description & " / " & DBEngine.Errors(intErr).Source
strRet = strRet & vbCrLf & strErr
Next
End If
DbEngineErrors = strRet
End Function
【讨论】:
我在最初的问题中已经提到过这个方法 但是,您没有提到检查整个集合。此外,此方法通常确实包含潜在错误。 我当然会浏览整个 DBEngine.Errors 集合。值得一提的是,在我的情况下,这个集合无论如何只包含一个项目:)以上是关于Access ODBC passthru 查询失败,错误 3146 给出不同的错误描述文本的主要内容,如果未能解决你的问题,请参考以下文章
在 MS access passthru 中创建 sql server 临时表