使用ADODB数据库连接在VBA中“存在”SQL查询

我需要将excel中的数据上传到数据库中,但是我需要首先检查每个上传的表中是否有数据,以便我更新或插入数据。

要区分更新或插入,我正在使用SQL IF EXIST命令,该命令在SQL中可以正常工作。 当我在Excel VBA中尝试这样做时,我收到一条错误消息:“命令文本未设置为命令对象。

看下面的代码

Dim strSQL As String Dim Value As String Dim Reference As String Set RCconn = New ADODB.Connection Set TuneCMD = New ADODB.Command ' Establish Recordset Set Results = New ADODB.Recordset 'Establish a Connection With RCconn .Provider = "SQLOLEDB" .ConnectionString = ConStr End With 'Open the connection RCconn.Open 'i Columns For i = 5 To 10 '16 'j rows For j = 6 To 60 '145 Value= Sheets("Value").Cells(j, i) Reference= "W_F/P_" & Sheets("Reference").Cells(j, i) stringTest = "IF EXISTS (SELECT * FROM UploadTable WHERE Ref = '" & Reference & "') " stringTest = stringTest & "UPDATE Val " stringTest = stringTest & "SET Val = '" & Value & "' " stringTest = stringTest & "where Ref = '" & Reference & "' " stringTest = stringTest & "Else " stringTest = stringTest & "INSERT INTO UploadTable (Val , Ref ) " stringTest = stringTest & "values ('" & Value & "', '" & Reference & "')" RCconn.Execute strSQL Next Next Set Results = Nothing RCconn.Close Set RCconn = Nothing 

“IF EXIST”是不是可以在VBA中使用的? 有工作吗?

谢谢

ADODB.Connection.Execute将传递查询发送到您的数据库。 这个string中的SQL语句并不重要; 如果你的数据库能理解它,它将被执行。 所以再次检查你的SQL查询。

尝试这个:

RCconn.Execute strSQL行放置一个断点。 当debugging器出现时,检查strSQL的值。 将其复制并直接在SQL Server Management Studio中执行。 如果这不起作用,请更正构build该string的代码。 如果它工作,那么你的ConnectionString有一些问题。 在这种情况下,请检查您在ConnectionString中使用的用户标识和密码是否具有足够的权限。