2010-05-12 3 views
1

excel에서 mysql에 데이터를 추가하려고합니다. 나는이 줄에 위의 오류를 얻고있다 : rs.Open STRSQL, oConn, adOpenDynamic을, adLockOptimisticexcel에서 mysql에 연결 중 : ODBC 드라이버가 요청한 속성을 지원하지 않습니다.

여기

을 내 코드는 다음과 같습니다

Dim oConn As ADODB.Connection 

Private Sub ConnectDB() 
    Set oConn = New ADODB.Connection 
    oConn.Open "DRIVER={MySQL ODBC 5.1 Driver};" & _ 
     "SERVER=localhost;" & _ 
     "DATABASE=employees;" & _ 
     "USER=root;" & _ 
     "PASSWORD=some_pass;" & _ 
     "Option=3" 

End Sub 

Function esc(txt As String) 
    esc = Trim(Replace(txt, "'", "\'")) 
End Function 


Private Sub InsertData() 
Dim rs As ADODB.Recordset 
    Set rs = New ADODB.Recordset 
    ConnectDB 
    With wsBooks 
     For rowCursor = 2 To 11 
      strSQL = "INSERT INTO tutorial (author, title, price) " & _ 
       "VALUES ('" & esc(.Cells(rowCursor, 1)) & "', " & _ 
       "'" & esc(.Cells(rowCursor, 2)) & "', " & _ 
       esc(.Cells(rowCursor, 3)) & ")" 
      rs.Open strSQL, oConn, adOpenDynamic, adLockOptimistic 
     Next 
    End With 
End Sub 

무슨 잘못 rs.Open STRSQL, oConn, adOpenDynamic, adLockOptimistic와? 왜 나는 odbc 오류가 발생합니까?

답변

3

INSERT는 레코드 세트를 반환하지 않습니다. 이러한 종류의 삽입 작업을 수행하려면 oConn.Execute를 사용하십시오.

또 다른 옵션은 mysql 드라이버의 특정 버전이 adOpenDynamic을 지원하지 않을 수도 있습니다 (꼭 필요합니까?) 또는 adLockOptimistic (동일) 일 수 있습니다.

하지만 어쨌든이 코드는 sql injection 구멍입니다. 매개 변수가있는 검색어 사용을 고려해야합니다.

dim cm as adodb.command 
set cm=new adodb.command 
set cm.activeconnection = oConn 
cm.commandtype = adcmdtext 
cm.commandtext = "insert tutorial (author, title, price) values (?,?,?)" 
cm.parameters.add cm.createparameter(,adVarChar,adParamInput,50,esc(.Cells(rowCursor, 1))) 
cm.parameters.add cm.createparameter(,adVarChar,adParamInput,50,esc(.Cells(rowCursor, 2))) 
cm.parameters.add cm.createparameter(,adDouble,adParamInput,,esc(.Cells(rowCursor, 3))) 

cm.execute ,, adExecuteNoRecords 
관련 문제