2011-03-02 135 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