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

';如果存在';VBA中的SQL查询与ADODB数据库连接,sql,vba,excel,adodb,Sql,Vba,Excel,Adodb,我需要将数据从excel上传到数据库中,但我需要首先检查表中是否有每次上传的数据,以便更新或插入数据 为了区分更新或插入,我使用了一个SQLif-EXIST命令,该命令在SQL中可以正常工作。在Excel VBA中尝试此操作时,我收到一条错误消息:“未为命令对象设置命令文本。” 请参阅下面的代码 Dim strSQL As String Dim Value As String Dim Reference As String Set RCconn = New ADODB.Connect

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

为了区分更新或插入,我使用了一个SQLif-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上放置断点。执行strSQL
。当调试器在那里中断时,检查
strSQL
的值。复制它并直接在SQL Server Management Studio中执行。如果这不起作用,请更正生成该字符串的代码。如果它工作,那么您的ConnectionString就有一些问题。在这种情况下,请检查您在连接字符串中使用的用户ID和密码是否具有足够的权限。

谢谢。我尝试在“RCconn.Execute strSQL”之前添加“Sheets”(“Test_Page”)。单元格(j,I)=stringTest”。将输出处理到SQL Server Maagement Studio使我能够无错误地运行查询。在您的连接字符串中,如果您临时设置了
User ID=sa
Password=
,它能工作吗?谢谢。我的问题是“RCconn.Execute strSQL”。我改为“RCconn.executestringtest”,一切都很好。感谢您确认使用“if-esxist”的可能性,也感谢您将我安排在正确的轨道上解决此问题。非常感谢