2017-02-14 56 views
0

此代碼將記錄插入到沒有警報的基礎表中。當我運行sql查詢時,沒有警報

CurrentDb.Execute _ 
"INSERT INTO basetable(clName,clId,clGender) VALUES('test','123','');" 

我預計這個代碼應該彈出警報,因爲clGender字段設置爲「必需」,但沒有警報。你能告訴我我錯在哪裏嗎?

+1

您是如何驗證該字段是必需的?當你執行該語句並且「沒有提示」時,會發生什麼*記錄是否被插入?該記錄中「clGender」字段的值是多少? – David

+0

大衛,我認爲將屬性中的「必需」設置爲yes意味着它不能爲空。該記錄沒有被插入,這意味着沒有任何反應。也沒有警報。 –

回答

0

您可以使用:

DoCmd.RunSQL " Insert ... " 

儘管這可能是太多了。

0

你沒有得到警報的原因是因爲你爲clGender提供了一個值。在表格設計視圖中,有兩個相關屬性:RequiredAllow zero length。您的clGender字段將這兩個設置爲true。 Required設置意味着您不能將此字段的記錄保存爲Null,但在您沒有指定Null的插入語句中,您指定了一個空字符串,Allow zero length設置允許該字符串。

[編輯]

對不起,剛纔意識到發生了什麼事。 Execute方法不會直接給你任何反饋。但是,您可以使用RecordsAffected屬性來查看它是否符合您的預期。

Dim db As DAO.Database 
Set db = CurrentDb() 
db.Execute "INSERT INTO basetable(clName,clId,clGender) VALUES('test','123','')" 
If db.RecordsAffected = 0 Then 
    MsgBox "Insert failed" 
End If 
Set db = Nothing 
+0

我不知道我是否理解你說的,但我已經指定「必需」爲真,並且「允許零長度」爲假。我也嘗試過CurrentDb.Execute _「INSERT INTO basetable(clName,clId,clGender)VALUES(NULL,NULL,NULL);」'但是這些代碼也沒有顯示警報。 –

+0

即使不應該,'RecordsAffected'也總是返回0。我搜查了這個問題,但我找不到原因。程序員說創建CurrentDb的db實例會使'RecordsAffected'正常工作。所以我期望代碼應該正常工作,因爲db實例已經創建。但我總是回到0。 –

+0

剛剛在本地進行了測試(儘管使用Access 2013),並且按預期工作。你說它總是返回0'RecordsAffected' - 你能確認這行肯定是插入的嗎? – Skippy