[英]MS-Access Update SQL Not Null But is Blank (! Date & Number Fields !)
我的表格中有一些數字和短日期格式的控件,日期控件也被屏蔽為 mm/dd/yyyy。 加載到表單中的一些字段在原始表中是空白的,因此在執行 sql 時,我實際上是在評估錯誤的事情,無論我檢查的是 '' 還是 Null。 因為 '' 作為日期編號的文本失敗,並且字段實際上不是空白的。
strSQL4 = "UPDATE [tblDetails] SET " & _
"[Proposed] = IIF(IsNull(" & Forms!frmEdit.txtProposed.Value & "),0," & Forms!frmEdit.txtProposed.Value & "), " & _
"[Multi] = IIF(IsNull(" & Forms!frmEdit.txtMulitplier.Value & "),0," & Forms!frmEdit.txtMulitplier.Value & "), " & _
"[Rational] = '" & Forms!frmEdit.txtRational.Value & "' " & _
" WHERE [RNumber] = '" & Forms!frmEdit.cmbUpdate.Value & "'"
Debug.Print strSQL4
dbs.Execute strSQL4
錯誤 3075 在查詢表達式 'IIF(IsNull(),0,' 中與函數一起使用的參數數量錯誤
我還嘗試輸入其他站點建議的字段本身
strSQL4 = "UPDATE [tblDetails] SET " & _
"[Proposed] = IIF(" & Forms!frmEdit.txtProposed.Value & "='',[Proposed]," & Forms!frmEdit.txtProposed.Value & "), " & _
" WHERE [RNumber] = '" & Forms!frmEdit.cmbUpdate.Value & "'"
Debug.Print strSQL4
dbs.Execute strSQL4
同樣的錯誤 3075 'IIF(IsNull(),0,[ProposedHrs]'
***如果我使用 IIF(IsNull 方法而不是 =''
我沒有粘貼日期失敗的例子,但是是同樣的想法,不是空而是空白,但似乎無法再次更新回空白甚至跳過?
提前感謝任何人。
嘗試 Erik Von Asmuth 代碼的 Update-1 <--謝謝順便說一句!
Set qdf = db.CreateQueryDef("", & _
"UPDATE [tblDetails] SET " & _
"[Proposed] = @Proposed, " & _
"[Multi] = @Multi, " & _
"[Rational] = @Rational " & _
"WHERE [RNumber] = @RNumber")
這部分全是紅色,關閉通知窗口后第一個“&”高亮編譯錯誤:預期:表達式
更新 2:我將更新移到第一行,它似乎正在工作。 設置 qdf = db.CreateQueryDef("", "UPDATE [tblDetails] SET" & _
接下來我將在日期字段中嘗試這種方法。
更新 3:當使用 99/99/0000;0;_ 屏蔽的文本框嘗試相同的參數化時,我收到的項目在集合中找不到? 我已經檢查了幾次拼寫,一切似乎都沒問題。 我嘗試了以下三種格式,因此設置了參數 DateRcvd,任何人都可以評論這對於帶有日期的文本框是否正確?
qdf.Parameters("@DateRcvd") = IIf(Nz(Forms!frmEdit.txtDateRcvd.Value) = "", 0, Forms!frmEdit.txtDateRcvd.Value)
qdf.Parameters("@DateRcvd") = IIf(IsNull(Forms!frmEdit.txtDateRcvd.Value), 0, Forms!frmEdit.txtDateRcvd.Value)
qdf.Parameters("@DateRcvd") = IIf(Forms!frmEdit.txtDateRcvd.Value = "", 0, Forms!frmEdit.txtDateRcvd.Value)
更新 4:
Dim qdf2 As DAO.QueryDef
Set db = CurrentDb
Set qdf2 = db.CreateQueryDef("", "UPDATE [tblDetails] SET " & _
"[DateReceived] = @DateRcvd " & _
"WHERE [RNumber] = @RNumber")
qdf.Parameters("@DateRcvd") = IIf(Nz(Forms!frmEdit.txtDateRcvd.Value) = "", 0, Forms!frmEdit.txtDateRcvd.Value)
qdf.Parameters("@RNumber") = Forms!frmEdit.cmbUpdate.Value
qdf2.Execute
請注意文本框 txtDateRcvd 在文本框的屬性中設置了輸入掩碼 99/99/0000;0;_。
您應該考慮空字符串,並在 VBA 而不是 SQL 中執行該IIF
語句:
strSQL4 = "UPDATE [tblDetails] SET " & _
"[Proposed] = " & IIF(Nz(Forms!frmEdit.txtProposed.Value) = "",0, Forms!frmEdit.txtProposed.Value) & ", " & _
"[Multi] = " & IIF(Nz(Forms!frmEdit.txtMulitplier.Value) = "",0, Forms!frmEdit.txtMulitplier.Value) & ", " & _
"[Rational] = '" & Forms!frmEdit.txtRational.Value & "' " & _
" WHERE [RNumber] = '" & Forms!frmEdit.cmbUpdate.Value & "'"
或者更好的是,正確執行並參數化整個更新,這樣您就不會遇到此類錯誤或 SQL 注入。
如何正確執行此操作的示例:
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Set db = CurrentDb
Set qdf = db.CreateQueryDef("", _
"UPDATE [tblDetails] SET " & _
"[Proposed] = @Proposed, " & _
"[Multi] = @Multi, " & _
"[Rational] = @Rational " & _
"WHERE [RNumber] = @RNumber"
)
qdf.Parameters("@Proposed") = IIF(Nz(Forms!frmEdit.txtProposed.Value) = "",0, Forms!frmEdit.txtProposed.Value)
qdf.Parameters("@Multi") = IIF(Nz(Forms!frmEdit.txtMulitplier.Value) = "",0, Forms!frmEdit.txtMulitplier.Value)
qdf.Parameters("@Rational") = Forms!frmEdit.txtRational.Value
qdf.Parameters("@RNumber") = Forms!frmEdit.cmbUpdate.Value
qdf.Execute
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.