ADODB 命令:参数问题 (VBA)

ADODB Command : Trouble with parameters (VBA)

我正在尝试使用 ADODB.Command 对象执行 UPDATE SQL 查询。我以前从未使用过它,所以我可能会犯一些愚蠢的错误,她是我的代码的副本:

Public Function setOffre(idO As Integer, idS As Integer, ref As String, dateO As Date, dateF As Date, nomR As String, idEntRecr As Integer, emploi As String, idEtat As Integer, lieu As String, plage As String, College As String)
Dim sqlQuery As String
Dim rs As ADODB.Recordset

Set connect = New ADODB.Connection
connect.Open connString              

sqlQuery = "UPDATE offres " & _
                "SET source_ID = @idSource, " & _
                "reference = @idRef, " & _
                "recruteur = @recruteur, " & _
                "lieu = @lieu, " & _
                "etat_ID = @idEtat, " & _
                "emploi = @emploi, " & _
                "plage = @plage, " & _
                "college = @college, " & _
                "offre_Date = @dateO, " & _
                "offre_Forclusion = @forcO, " & _
                "offre_Mois = @moisO, " & _
                "entite_ID = @idEntite " & _
           "WHERE offre_ID = @idOffre;"

With New ADODB.Command
    .ActiveConnection = connect
    .CommandType = adCmdText
    .NamedParameters = True
    .CommandText = sqlQuery

    .Parameters.Append .CreateParameter("@idSource", adInteger, adParamInput, 10, idS)
    .Parameters.Append .CreateParameter("@idRef", adLongVarChar, adParamInput, 10, ref)
    .Parameters.Append .CreateParameter("@recruteur", adLongVarChar, adParamInput, 100, nomR)
    .Parameters.Append .CreateParameter("@lieu", adLongVarChar, adParamInput, 100, lieu)
    .Parameters.Append .CreateParameter("@idEtat", adInteger, adParamInput, 10, idEtat)
    .Parameters.Append .CreateParameter("@emploi", adLongVarChar, adParamInput, 200, emploi)
    .Parameters.Append .CreateParameter("@plage", adLongVarChar, adParamInput, 10, plage)
    .Parameters.Append .CreateParameter("@college", adLongVarChar, adParamInput, 200, College)
    .Parameters.Append .CreateParameter("@dateO", adDate, adParamInput, 10, Format(dateO, "yyyy-mm-dd"))
    .Parameters.Append .CreateParameter("@forcO", adDate, adParamInput, 10, Format(dateF, "yyyy-mm-dd"))
    .Parameters.Append .CreateParameter("@moisO", adInteger, adParamInput, 10, Month(dateO))
    .Parameters.Append .CreateParameter("@idEntite", adInteger, adParamInput, 10, idEntRecr)
    .Parameters.Append .CreateParameter("@idOffre", adInteger, adParamInput, 10, idO)

    .Execute
End With

connect.Close
End Function

我在 .Execute 上的错误触发器显示 [MySQL][ODBC 5.3(a) Driver][mysqld-5.5.16]Invalid parameter typeadLongVarChar 不是用于字符串值的正确类型吗?

编辑: 在尝试@h2so4 的方法(将参数值连接到命令字符串中)后,我收到另一个错误

[MySQL][ODBC 5.3(a) Driver][mysqld-5.5.16]our le champ 'this MySQL version'.

不知道它是什么意思,但它在我的执行行上触发:

connect.Execute sqlQuery, , adCmdText

我认为你可以像这样调整你的 sql 并摆脱 parameters.append

sqlQuery = "UPDATE offres " & _
                "SET source_ID = '" & idS & "', " & _
                "reference = '" & ref & "', " & _
                "recruteur = '" & nomR & "', " & _
                "lieu = '" & lieu & "', " & _
                "etat_ID = '" & idEtat & "', " & _
                "emploi = '" & emploi & "', " & _
                "plage = '" & plage & "', " & _
                "college = '" & college & "', " & _
                "offre_Date = '" & Format(dateO, "yyyy-mm-dd") & "', " & _
                "offre_Forclusion = '" & Format(dateO, "yyyy-mm-dd") & "', " & _
                "offre_Mois ='" & Month(dateO) & "', " & _
                "entite_ID = '" & identRecr & "'" & _
           "WHERE offre_ID = '" & ido & "';"

最后,我的错误是 table 名称 offres 不正确,它是 offre