VB6 Привязка значения NULL к текстовому полю с помощью ADODB.Recordset - PullRequest
1 голос
/ 03 декабря 2010

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

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

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

Ответы [ 3 ]

2 голосов
/ 04 декабря 2010

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

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

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

0 голосов
/ 29 апреля 2017

Вы также можете попробовать:

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

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

0 голосов
/ 19 августа 2016

Вот обходной путь:

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

...