'如果存在'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中使用的用户标识和密码是否具有足够的权限。
谢谢Pradeep。我尝试在'RCconn.Execute strSQL'之前添加'Sheets(“Test_Page”)。Cells(j,i)= stringTest'。将输出应用到SQL Server Maagement Studio允许我无误地运行查询。 – Selrac
在您的连接字符串中,如果您暂时设置了'User ID = sa'和'Password = 是否有效? –
谢谢Pradeep。我的问题是'RCconn.Execute strSQL'。我改为'RCconn.Execute stringTest',所有的工作都很好。感谢您确认使用'if esxist'的可能性,同时也感谢您在正确的轨道上解决此问题。非常感谢 – Selrac