我不得不深入到一个旧的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