从Excel中的VBA中的SQL Server捕获错误消息

时间:2015-06-26 13:55:34

标签: sql-server excel vba excel-vba

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

例如,我正在导入文件,并且没有语法错误,但如果未正确设置批量插入语句,则可能会导致错误。对于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)

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

非常感谢每一位帮助!

2 个答案:

答案 0 :(得分:4)

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
这应该让你开始。您可能会发现自己发现的错误为零'这实际上是一种状态信息;如果是这样,你还需要做一些额外的编码。

答案 1 :(得分:0)

我觉得这很有用但需要使用:

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

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