【问题标题】:connecting to mysql from excel: ODBC driver does not support the requested properties从 excel 连接到 mysql:ODBC 驱动程序不支持请求的属性
【发布时间】:2010-05-13 03:20:06
【问题描述】:

我正在尝试将数据从 excel 添加到 mysql。我在这一行收到上述错误: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 错误?

【问题讨论】:

    标签: sql mysql excel vba odbc


    【解决方案1】:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-09
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-15
      • 2013-09-06
      相关资源
      最近更新 更多