Ms access MS Access 3061参数太少

Ms access MS Access 3061参数太少,ms-access,Ms Access,我有一个非常简单的update语句,但它总是给我3061错误 Public Function SendToYard(ByVal lEquipmentId As Long) oMb.ExecuteSql ("UPDATE Equipment SET GeneralLocation = 'Yard' WHERE ID = " & lEquipmentId) End Function 表名为设备,列名为GeneralAllocation和ID 这里可能会出什么问题 下面是Execut

我有一个非常简单的update语句,但它总是给我3061错误

Public Function SendToYard(ByVal lEquipmentId As Long)
    oMb.ExecuteSql ("UPDATE Equipment SET GeneralLocation = 'Yard' WHERE ID = " & lEquipmentId)
End Function
表名为设备,列名为GeneralAllocation和ID

这里可能会出什么问题

下面是ExecuteSql函数 注意我使用的是DAO

Public Function ExecuteSql(qry As String)

    db.Execute qry, dbFailOnError

End Function
试试这个:

Public Function SendToYard(ByVal lEquipmentId As Long)
oMb.ExecuteSql ("UPDATE Equipment SET GeneralLocation = 'Yard' WHERE ID = '" & EquipmentId & "'")

结束函数

尝试将代码的SQL部分复制并粘贴到查询设计器的SQL视图中。它应该显示一个输入框,请求缺少的参数。我敢打赌某个地方有错别字,这会帮助你找到它。

事实上,这是一个没有意义的问题。 问题在于,在SQL设计模式下,SQL语句执行正确,因为默认情况下它使用的是当前数据库。 在模型基类中的VBA代码中,通过获取数据库的存储路径来设置DAO.Database对象。它指向了错误的文件。 问题解决了。
总之,请确保您知道正在使用的数据库。

ID是Autonumber->Long Integer(尝试过,仍然不起作用)generalAllocation是文本类型,带有3值查找(“Yard”、“Garage”、“Field”),它实际上运行得很好,说“您将要更新1行”。我将“&lEquipmentId”更改为1,结果是“更新设备集Equipment.GeneralLocation='Yard'WHERE Equipment.ID=1”,而没有qoutes。在我看来,在没有错误处理程序的情况下使用dbFailOnError是非常不明智的。