2013-11-14 40 views
2

我需要將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中使用的情況下?有沒有解決辦法?

感謝

回答

3

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 = <無論您的sa密碼>是否有效? –

+2

謝謝Pradeep。我的問題是'RCconn.Execute strSQL'。我改爲'RCconn.Execute stringTest',所有的工作都很好。感謝您確認使用'if esxist'的可能性,同時也感謝您在正確的軌道上解決此問題。非常感謝 – Selrac