簡體   English   中英

MS-Access 更新 SQL 不是空而是空白(!日期和數字字段!)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM