【问题标题】:ADODB Command : Trouble with parameters (VBA)ADODB 命令:参数问题(VBA)
【发布时间】:2017-05-03 16:32:00
【问题描述】:

我正在尝试使用 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

【问题讨论】:

    标签: vba adodb


    【解决方案1】:

    在我看来,你可以像这样调整你的 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 & "';"
    

    【讨论】:

    • 这是我的第一次尝试,但我被建议使用 adodb.Command 代替:stackoverflow.com/questions/43521839/…。问题不一样,但查询是
    • @NattyRoots 您应该至少尝试一下,以确保问题出在您使用ADODB.Command 的方式上,而不是查询本身或参数值中...
    • @A.S.H 我在调试模式下检查了每个参数值,它们都很好。无论如何我都会尝试一下以防万一
    • @A.S.H 试过了:它给我一个新错误,我会在问题中编辑它
    • 查询仍然需要一些调整。即,仅将 '...' 用于 varchar 字段而非数字字段,用 #...# 而不是 '...' 等括起日期。@NattyRoots
    【解决方案2】:

    最后,我的错误是表名offres 不对,它是offre

    【讨论】:

      猜你喜欢
      • 2021-06-06
      • 2011-10-19
      • 1970-01-01
      • 1970-01-01
      • 2017-05-25
      • 2015-10-17
      相关资源
      最近更新 更多