подключение к mysql из excel: драйвер ODBC не поддерживает запрошенные свойства - PullRequest
1 голос

Я пытаюсь добавить данные в MySQL из Excel. я получаю вышеуказанную ошибку в этой строке: rs.Open strSQL, oConn, adOpenDynamic, adLockOptimistic

вот мой код:

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?

1 Ответ

3 голосов
/ 12 мая 2010

INSERT не возвращает набор записей. Используйте oConn.Execute для вставки такого типа.

Другим вариантом может быть то, что данная конкретная версия драйвера mysql не поддерживает adOpenDynamic (вы уверены, что он вам нужен?) Или adLockOptimistic (то же самое).

Но в любом случае, этот код является sql инъекцией дырой. Вам следует рассмотреть возможность использования параметризованных запросов:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...