2010-12-03 67 views
1

我不得不深入到一个旧的VB6应用程序,并且我对这种语言没有太多的经验。VB6将NULL值绑定到带有ADODB.Recordset的文本框

现在我已经有了一个窗体,控件绑定到ADODB.Recordset。所以TextBox的“DataField”属性设置为“MyIntColumnName”。

当文本框留空时,我期望一个null被放入数据库,但相反,我得到零和外键违规。有什么方法可以指定绑定,使空== NULL?

回答

2

您可能想要检查数据库中的列:它听起来像是设置为空和默认值为0,这就是为什么当您不输入任何内容时,会提交一个零。

我不认为更改绑定,以便空==空将有所帮助,因为你仍然会得到一个外键违例 - 你的表有一个外键取决于输入的有效值。

你将不得不改变你的表格(删除默认和外键) - 这可能不是最好的解决方案 - 或者改变你的表单字段 - 可能是一个组合或列表值相关联来自外键表的值。

+0

不,不幸的是,该字段是无效的,并且没有默认值。此外,NULL值在外键字段上没有问题。也许在某些数据库中情况并非如此,但在MS SQL和Oracle上确实没问题。 – Clyde 2010-12-09 17:55:47

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 

末次

0

您也可以尝试:

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

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