2011-03-02 138 views
0

我有一个非常简单的更新声明,但它不断给我3061错误。微软Access 3061太少参数

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

表名是设备,列名GeneralLocation和ID

什么能可能是错误怎么回事?

这里是的ExecuteSQL功能 注意我使用DAO

Public Function ExecuteSql(qry As String) 

    db.Execute qry, dbFailOnError 

End Function 
+0

在没有错误处理程序的情况下使用dbFailOnError在我看来确实是非常不明智的。 – 2011-03-04 04:40:32

回答

2

其实这是一个有争议的问题。 问题是,在SQL设计模式下,SQL语句默认使用当前数据库,因此SQL语句正确执行。 在模型基类中的VBA代码中,DAO.Database对象是通过获取数据库的存储路径来设置的。它指向错误的文件。 问题解决了。底线,确保你知道什么数据库正在使用。

+0

它发生在我们最好的... – BIBD 2011-03-02 17:56:20

0

试试这个:

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

端功能

+0

ID是自动编号 - >长整数(尝试过,仍然不起作用) – cmaduro 2011-03-02 16:05:19

+0

但是,它工作吗? – Henry 2011-03-02 16:07:37

+0

GeneralLocation是文本类型,带有3值查找(“Yard”;“Garage”;“Field”) – cmaduro 2011-03-02 16:08:05

0

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

+0

它实际运行得很好,说“您即将更新1行”。我改变了“&lEquipmentId为1导致”更新设备设置Equipment.GeneralLocation ='围场'WHERE Equipment.ID = 1“没有qoutes。 – cmaduro 2011-03-02 16:16:32