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

问题描述:

我需要将excel中的数据上传到数据库中,但是我需要首先检查表中是否存在每个上载的数据,以便更新或插入数据。'如果存在'VBA中的SQL查询与ADODB数据库连接

为了区分更新或插入,我正在使用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 

查看代码是否是“是否存在”不能在VBA中使用的情况下?有没有解决办法?

感谢

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

试试这个:

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

+0

谢谢Pradeep。我尝试在'RCconn.Execute strSQL'之前添加'Sheets(“Test_Page”)。Cells(j,i)= stringTest'。将输出应用到SQL Server Maagement Studio允许我无误地运行查询。 – Selrac

+0

在您的连接字符串中,如果您暂时设置了'User ID = sa'和'Password = 是否有效? –

+2

谢谢Pradeep。我的问题是'RCconn.Execute strSQL'。我改为'RCconn.Execute stringTest',所有的工作都很好。感谢您确认使用'if esxist'的可能性,同时也感谢您在正确的轨道上解决此问题。非常感谢 – Selrac