2010-12-03 1 views
1

Мне нужно копаться в старом приложении VB6, и у меня нет большого опыта работы с этим языком.VB6 Binding NULL значение в текстовое поле с ADODB.Recordset

Прямо сейчас у меня есть форма, где элементы управления привязаны к ADODB.Recordset. Таким образом, свойство DataField для TextBox имеет значение «MyIntColumnName».

Когда текстовое поле осталось пустым, я ожидаю, что в базу данных будет пустое, но вместо этого я получаю нули и нарушение внешнего ключа. Есть ли способ указать привязку, чтобы пустая == NULL?

ответ

2

Возможно, вы захотите проверить столбец в базе данных: похоже, что он установлен на Not Null и по умолчанию 0, поэтому, когда вы ничего не вводите, отправляется нуль.

Я не думаю, что изменение привязки так, чтобы пустой == Нуль помог, так как вы все равно получите нарушение внешнего ключа - ваша таблица имеет внешний ключ, который зависит от введенного действительного значения.

Вам придется либо изменить таблицу (удалить по умолчанию, либо внешний ключ), что может и не быть лучшим решением, или изменить поле формы - возможно, значение комбо или списка, которое коррелирует к значению из таблицы внешнего ключа.

+0

Нет, к сожалению, поле NULLable и не имеет значения по умолчанию. Кроме того, значения 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 

End Sub

0

Можно также попробовать:

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

Тогда не будет записей пытаться обновить значение из связанного поля.