'如果存在'在VBA中使用ADODB数据库连接的SQL查询

时间:2013-11-14 10:59:10

标签: sql excel vba excel-vba adodb

我需要将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

是否'V EXIST'无法在VBA中使用?有工作吗?

由于

1 个答案:

答案 0 :(得分:3)

ADODB.Connection.Execute向您的数据库发送传递查询。该字符串中的SQL语句无关紧要;如果您的数据库可以理解它,它将被执行。 因此,再次检查您的SQL查询。

试试这个:

在第RCconn.Execute strSQL行放置一个断点。当调试器在那里中断时,检查strSQL的值。将其复制并直接在SQL Server Management Studio中执行。如果这不起作用,请更正构建该字符串的代码。如果它有效,那么ConnectionString就会出现问题。在这种情况下,请检查您在要连接的ConnectionString中使用的用户标识和密码是否具有足够的权限。