我不得不深入到一箇舊的VB6應用程序,並且我對這種語言沒有太多的經驗。VB6將NULL值綁定到帶有ADODB.Recordset的文本框
現在我已經有了一個窗體,控件綁定到ADODB.Recordset。所以TextBox的「DataField」屬性設置爲「MyIntColumnName」。
當文本框留空時,我期望一個null被放入數據庫,但相反,我得到零和外鍵違規。有什麼方法可以指定綁定,使空== NULL?
我不得不深入到一箇舊的VB6應用程序,並且我對這種語言沒有太多的經驗。VB6將NULL值綁定到帶有ADODB.Recordset的文本框
現在我已經有了一個窗體,控件綁定到ADODB.Recordset。所以TextBox的「DataField」屬性設置爲「MyIntColumnName」。
當文本框留空時,我期望一個null被放入數據庫,但相反,我得到零和外鍵違規。有什麼方法可以指定綁定,使空== NULL?
您可能想要檢查數據庫中的列:它聽起來像是設置爲空和默認值爲0,這就是爲什麼當您不輸入任何內容時,會提交一個零。
我不認爲更改綁定,以便空==空將有所幫助,因爲你仍然會得到一個外鍵違例 - 你的表有一個外鍵取決於輸入的有效值。
你將不得不改變你的表格(刪除默認和外鍵) - 這可能不是最好的解決方案 - 或者改變你的表單字段 - 可能是一個組合或列表值相關聯來自外鍵表的值。
這裏有一個解決方法:
Private Sub txtDataField_Change
Dim cDataField As String
Dim rsTmp as ADODB.Recordset
If txtDataField.Text = "" And Not txtDataField.DataSource Is Nothing Then
cDataField = txtDataField.DataField
txtDataField.DataField = ""
set rsTmp = txtDataField.DataSource
rsTmp.Fields(cDataField).Value = Null
set rsTmp = Nothing
txtDataField.DataField = cDataField
End If
末次
您也可以嘗試:
YourADODBRecordset.Fields("MyIntColumnname").value = Null
txtTextBox.Datachanged = False
然後記錄將不會嘗試更新從綁定字段的值。
不,不幸的是,該字段是無效的,並且沒有默認值。此外,NULL值在外鍵字段上沒有問題。也許在某些數據庫中情況並非如此,但在MS SQL和Oracle上確實沒問題。 – Clyde 2010-12-09 17:55:47