2017-03-08 64 views
0

我使用MS Access作爲SQL Server 2012的前端,在將更新傳遞到服務器之前測試字段中的空值並向用戶顯示有用的消息。IsNull總是返回false

我使用BeforeUpdate事件中的If IsNull以及一些奇特的重複檢查,可以在一個字段中正常工作。但是,對另一個變量實施相同的代碼時,IsNull始終評估爲false。

我試着剔除所有有用的代碼,只是使用IsNull一個消息框:

If IsNull(Me.M_RN) Then 
    MsgBox "null!" 
Else 
    MsgBox "Not null!" 
End If 

此代碼總是返回「沒有空!」。如果我將其反轉並使用:

If not IsNull(Me.M_RN) Then 
    MsgBox "Not null!" 
Else 
    MsgBox "null!" 
End If 

它仍然返回「Not null!」每次。我還嘗試了其他事件狀態,例如Change,KeyUpDirty。無論事件如何,IsNull都會返回false。

這些字段的Form對象具有相同的屬性。我可以看到的唯一區別是工作變量格式爲numeric(18,0),未編制索引,而非工作變量格式爲int,並且具有唯一索引。

如果我刪除所有的代碼,我得到You tried to assign the Null value to a variable that is not a Variant data type更新錯誤。

+0

錯誤發生在哪條線上? –

+0

@ Nick.McDermaid我不確定你的意思;這不是一個編譯錯誤,所以它不顯示它搞砸了哪一行。 – Rominus

+0

@McNets這不是有效的vba,不會做任何事情 – Rominus

回答

0

該問題基於SQL後端表上的not null設置。訪問是在BeforeUpdate事件之前檢查它從該限制得到的驗證規則。

它,然後啪的You tried to assign the Null value to a variable that is not a Variant data type錯誤,這顯然阻止BeforeUpdate事件燒製而成的。

刪除not null限制允許代碼運行,同時保留唯一索引。

使用Form_Error無法解決它,即使Response設置爲acDataErrContinue。在這種情況下,它會彈出有關驗證規則的實際運行時錯誤,以防止更改試圖將字段設置回.OldValue的行上的值。

1

我認爲這部分信息非常重要;

非工作變量是INT格式並具有唯一索引。

如果它有一個唯一索引,然後我敢肯定,你將不能夠就指定一個空值。你在表格中設置了默認值嗎?

+0

是的,服務器在空值上彈回一個錯誤,但是如果非技術用戶不知道如何正確處理它,這是一個令人困惑的錯誤,可能會凍結Access。因此,首先防止空到服務器。 – Rominus