我需要将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中使用?有工作吗?
由于
答案 0 :(得分:3)
ADODB.Connection.Execute
向您的数据库发送传递查询。该字符串中的SQL语句无关紧要;如果您的数据库可以理解它,它将被执行。
因此,再次检查您的SQL查询。
试试这个:
在第RCconn.Execute strSQL
行放置一个断点。当调试器在那里中断时,检查strSQL
的值。将其复制并直接在SQL Server Management Studio中执行。如果这不起作用,请更正构建该字符串的代码。如果它有效,那么ConnectionString就会出现问题。在这种情况下,请检查您在要连接的ConnectionString中使用的用户标识和密码是否具有足够的权限。