2013-11-14 1 views
2

Excel에서 데이터를 가져와 데이터베이스로 가져와야하지만 데이터를 업데이트하거나 삽입 할 수 있도록 각 업로드마다 테이블에 데이터가 있는지 먼저 확인해야합니다.'존재하는 경우'ADODB 데이터베이스 연결을 사용하는 VBA의 SQL 쿼리

업데이트 또는 삽입을 구분하려면 SQL에서 정상적으로 작동하는 SQL IF EXIST 명령을 사용해야합니다. 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에서 사용중인 사용자 ID와 암호에 적절한 권한이 있는지 확인하십시오.

+0

감사합니다. Pradeep. 'Sheets ("Test_Page")를 추가하려고 시도했습니다. 셀 (j, i) = stringTest'before 'RCconn.Execute strSQL'. 결과를 SQL Server Maagement Studio에 복사하면 오류없이 쿼리를 실행할 수 있습니다. – Selrac

+0

'User ID = sa'와'Password = '를 임시로 설정하면 연결 문자열에서 작동합니까? –

+2

감사합니다. 내 문제는 'RCconn.Execute strSQL'이었습니다. 나는 'RCconn.Execute stringTest'로 바뀌었고 모든 것이 훌륭했습니다. 'esxist'를 사용할 수 있는지 확인해 주셔서 감사 드리며이 문제를 해결하기 위해 올바른 방법으로 저를 설정해 주셔서 감사합니다. 많이 감사합니다 – Selrac