【问题标题】:ODBC Call Failed with stored procedure - Pass through queryODBC 调用因存储过程而失败 - 通过查询
【发布时间】:2015-04-21 23:49:49
【问题描述】:

我创建了一个直通查询并尝试从中调用存储过程。

我能够成功地在 sql server 数据库上执行查询,但是当涉及到存储过程时,我收到一个错误:

"ODBC call Failed"

问题仅在于存储过程。查询执行良好。

这是我的代码:

Dim qdf As DAO.QueryDef, rst As ADODB.Recordset
Dim DatabaseName As String
Dim Server As String
ServerName = "XXXX"
DatabaseName = "XXX"
Set qdf = CurrentDb.CreateQueryDef("")
 strConnectionString = "ODBC;DRIVER={sql server};" & _
        "DATABASE=" & DatabaseName & ";" & _
        "SERVER=" & ServerName & ";" & _
        "Trusted_Connection=YES;"
qdf.Connect = strConnectionString
qdf.SQL = " EXEC [dbo].[SAMPLE_TEST]"
qdf.ReturnsRecords = True
Set rst = qdf.OpenRecordset
Debug.Print rst!RecordCount
rst.Close
Set rst = Nothing

如果我遗漏了什么,请告诉我?

【问题讨论】:

  • 如果将rst As ADODB.Recordset 更改为rst As DAO.Recordset 会发生什么?
  • @HansUp..同样的错误
  • 存储过程是做什么的?它是否返回行?
  • select count(*) as RecordCount from tablename ..只是一个普通的选择查询
  • @HansUp..所有查询都直接运行,但是当保存在 sp 中时,表示 ODBC 调用失败。

标签: sql-server vba ms-access stored-procedures linked-tables


【解决方案1】:

获取有关“ODBC--调用失败”原因的更多信息。错误,我们可以遍历DBEngine.Errors 集合,看看是否还有其他可能更具描述性的消息。比如用代码

    qdf.Connect = strConnectionString
    qdf.SQL = " EXEC [dbo].[SAMPLE_TEST]"
    qdf.ReturnsRecords = True
    On Error GoTo oops
    Set rst = qdf.OpenRecordset
    Debug.Print rst!RecordCount
    rst.Close
    Set rst = Nothing
    Exit Sub
oops:
    Dim dbeError As Error
    For Each dbeError In DBEngine.Errors
        Debug.Print "(" & dbeError.Number & "): " & dbeError.Description
    Next
End Sub

我们可能会在 VBA 即时窗口中看到以下内容:

(229): [Microsoft][ODBC SQL Server Driver][SQL Server]The EXECUTE permission was denied on the object 'SAMPLE_TEST', database 'myDb', schema 'dbo'.
(3146): ODBC--call failed.

当然

对象“SAMPLE_TEST”、数据库“myDb”、架构“dbo”的 EXECUTE 权限被拒绝。

比单纯的更有帮助

ODBC--调用失败。

【讨论】:

  • @Gord...这当然有帮助。接受答案
【解决方案2】:

刚刚再次查看了您的代码。你没有运行 qry

你不需要qry.execute吗?

【讨论】:

  • 如果 DAO.QueryDef 对象返回记录,则 qdf.OpenRecordset 执行查询并将结果作为 DAO.Recordset 返回。如果 QueryDef 不返回记录,则使用 qdf.Execute
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-16
  • 2021-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-14
  • 1970-01-01
相关资源
最近更新 更多