Data binding VB6使用ADODB.Recordset将空值绑定到文本框

Data binding VB6使用ADODB.Recordset将空值绑定到文本框,data-binding,vb6,null,adodb,Data Binding,Vb6,Null,Adodb,我必须深入研究一个旧的VB6应用程序,但我对这种语言没有太多经验 现在我有一个窗体,其中控件绑定到ADODB.Recordset。因此,TextBox的“DataField”属性设置为“MyIntColumnName” 当textbox为空时,我希望将null放入数据库中,但我得到的是零和外键冲突。有没有办法指定绑定以使empty==NULL?您可能需要检查数据库中的列:听起来它被设置为notnull,默认值为0,这就是为什么在不输入任何内容时,会提交一个0 我不认为更改绑定使empty==Nu

我必须深入研究一个旧的VB6应用程序,但我对这种语言没有太多经验

现在我有一个窗体,其中控件绑定到ADODB.Recordset。因此,TextBox的“DataField”属性设置为“MyIntColumnName”


当textbox为空时,我希望将null放入数据库中,但我得到的是零和外键冲突。有没有办法指定绑定以使empty==NULL?

您可能需要检查数据库中的列:听起来它被设置为notnull,默认值为0,这就是为什么在不输入任何内容时,会提交一个0

我不认为更改绑定使empty==Null会有所帮助,因为您仍然会遇到外键冲突——您的表有一个依赖于输入的有效值的外键

您必须更改表(删除默认值和外键)——这可能不是最佳解决方案——或者将表单字段更改为与外键表中的值相关的组合值或列表值。

这里有一个解决方法:

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
End Sub

您也可以尝试:

YourADODBRecordset.Fields("MyIntColumnname").value = Null
txtTextBox.Datachanged = False

然后记录集将不会尝试更新绑定字段中的值。

否,不幸的是,该字段可为空且没有默认值。此外,外键字段上的空值也没有问题。在某些数据库上可能不是这样,但在MS SQL和Oracle上肯定没有问题。