【问题标题】:Catching error message from SQL Server in VBA in Excel在 Excel 中的 VBA 中从 SQL Server 捕获错误消息
【发布时间】:2015-09-13 12:30:18
【问题描述】:

我正在做一个 excel 宏,以便自动执行一些最终在 SQL Server 中运行的查询。我的问题是,如果查询不成功,我不知道服务器如何提醒 excel。

例如我正在导入一个文件,没有语法错误,但是如果bulk insert语句设置不正确,可能会导致错误。对于 SQL 连接,我使用以下内容:

Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sConnString As String

' Create the connection string.
sConnString = "Provider=SQLOLEDB;Data Source=localhost;" & _
              "Initial Catalog=" & MyDatabase & ";" & _
              "Integrated Security=SSPI;"

' Create the Connection and Recordset objects.
Set conn = New ADODB.Connection
Set rs = New ADODB.Recordset
conn.Open sConnString

Set rs = conn.Execute(Myquery)

如果我在编译代码时出现语法错误,它会停止,这很好。但如果我有另一个问题,例如。 G。数据库名不好,表已经存在,然后程序运行没有错误,我只有在SQL Server中检查时才能检测到。我真的很想知道查询运行是否导致错误,然后将一些警报消息编码到我的宏中。我该怎么做?

非常感谢每一个帮助!

【问题讨论】:

    标签: sql-server vba excel


    【解决方案1】:

    ADO 连接对象有一个 Errors 集合,您可以在运行 SQL 后检查它:

    conn.Errors.Clear
    Set rs = conn.Execute(Myquery) 
    If conn.Errors.Count > 0 Then     For i = 0 To conn.Errors.Count         Debug.Print conn.Error(i).Number         Debug.Print conn.Error(i).Source         Debug.Print conn.Error(i).Description     next i End If
    这应该让你开始。您可能会发现您看到的“错误零”实际上是一条状态消息;如果是这样,您将需要进行一些额外的编码。

    【讨论】:

    • 当我使用错误查询运行您的代码时,我在 debug.print 行中收到错误:参数类型错误、超出可接受范围或与另一个参数冲突
    • @Selrac - 我可以看到四种可能性: 1:Myquery 是空白的,或者是一个错误对象; (2):连接不再处于允许您查询错误集合的状态——它可能由于 Myquery 中的严重错误而“关闭”,或者处于需要特殊处理直到结果到达的“忙碌”状态; (3):你有一个奇异的连接类型,它不暴露一个“错误”集合,或者返回一个“空”而不是一个没有成员的集合对象;或(4):连接具有指定(例如)“只读”和需要“读写”的“记录锁定”参数的不正当设置
    【解决方案2】:

    我发现这很有帮助,但需要使用:

    Debug.Print conn.Errors.Item(i).Description
    Debug.Print conn.Errors.Item(i).Source
    Debug.Print conn.Errors.Item(i).NativeError
    

    我可能使用了不同的连接类型

    【讨论】:

      猜你喜欢
      • 2021-08-27
      • 1970-01-01
      • 1970-01-01
      • 2012-02-26
      • 2018-02-28
      • 2014-09-03
      • 1970-01-01
      • 2016-03-25
      • 1970-01-01
      相关资源
      最近更新 更多