【问题标题】:MS Access: Why am I getting an "Invalid use of property" error?MS Access:为什么我会收到“无效使用属性”错误?
【发布时间】:2017-01-21 03:18:54
【问题描述】:

使用此代码时出现标题错误:

Private Sub Command12_Click()

    Dim dbsCurrent As Database
    Set dbsCurrent = CurrentDb
    Dim query As QueryDef
    Dim sql As String

    item_entered = Me.Text314.Value

    sql = "Update tbl_FilmZipInfo Set qty_per_unit = Me.Text317 WHERE [item] = item_entered ;"

    query = CurrentDb.CreateQueryDef("UpdateFilmZip", sql)

    query.Execute

End Sub

在我运行 Sub 之后,“Private Sub Command12_Click()”行以黄色突出显示,“query =”以蓝色突出显示(与人类复制某些内容时相同的蓝色突出显示)。有人知道我为什么会收到此错误吗?这里的目标是更新表中的特定记录。

【问题讨论】:

    标签: vba ms-access


    【解决方案1】:

    分配对象变量时必须使用Set关键字:

    Set query = CurrentDb.CreateQueryDef("UpdateFilmZip", sql)
    

    【讨论】:

    • 啊,对。我可以再打扰你一次吗?它现在给了我一个“参数太少。预期为 2”的错误。它以黄色突出显示“query.Execute”行。有什么想法吗?
    • 文档对 Execute 方法有什么说法?错误消息很清楚......它说你需要两个参数并且你提供了零。
    • @rory.ap 在另一个 Private Sub 我以完全相同的方式使用它(“query.Execute”)并且它有效,所以我看不出是什么导致错误出现 这次
    • @user7389351 是有参数的查询字符串,而不是Execute 方法.....
    【解决方案2】:

    你必须正确连接:

    sql = "Update tbl_FilmZipInfo Set qty_per_unit = " & Me!Text317.Value & "  WHERE [item] = '" & item_entered & "';"
    

    如果 item_entered 是数字,则省略最后的引号。

    【讨论】:

    • 在 VBA 中有什么方法可以绕过 SQL 注入?
    • @rory.ap 很高兴你问到!这现在与我正在谈论的另一个私人潜艇有关!是的,有一种方法 - 您将查询参数化。瞧:sql = "parameters " & _ "P1 Date, P2 Text, P3 Text, P4 Number, P5 Time, P6 Number, P7 Text, P8 Text, P9 Number, P10 Number, P11 Number, P12 Number, P13 Number, P14 Number, P15 Number, P16 Number, P17 Number;" & _ "INSERT INTO ...VALUES ([P1], [P2], [P3], [P4], [P5], [P6], [P7], [P8], [P9], [P10], [P11], [P12], [P13], [P14], [P15], [P16], [P17])"
    • 这两个答案都有助于修复整个代码。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2017-11-30
    • 2011-10-08
    • 2010-11-15
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-02
    相关资源
    最近更新 更多