2010-12-03 41 views
1

Je vais avoir à creuser dans une ancienne application VB6 et je n'ai pas beaucoup d'expérience avec cette langue.VB6 Reliure valeur NULL à textBox avec ADODB.Recordset

En ce moment j'ai une forme où les contrôles sont liés à un ADODB.Recordset. Donc, la propriété "DataField" du TextBox est définie sur "MyIntColumnName".

Lorsque la zone de texte est vide, je me attends à une valeur nulle à mettre dans la base de données, mais je reçois des zéros et une violation de clé étrangère. Est-il possible de spécifier la liaison de sorte que vide == NULL?

Répondre

2

Vous pouvez vérifier la colonne dans la base de données: On dirait qu'il est réglé sur Non nul et une valeur par défaut de 0, ce qui est la raison pour laquelle, lorsque vous ne saisissez rien, un zéro se soumis.

Je ne pense pas changer la liaison de sorte que vide == null aidera puisque vous obtenez toujours une violation de clé étrangère - votre table a une clé étrangère qui dépend d'une valeur valide est entré.

Vous devrez soit changer votre table (supprimer la clé par défaut et la clé étrangère) - ce qui n'est peut-être pas la meilleure solution - soit changer votre champ de formulaire - peut-être une combo ou une valeur de liste corrélée à la valeur de la table de clé étrangère.

+0

Non, malheureusement, le champ est NULLable et n'a pas de valeur par défaut. De plus, les valeurs NULL ne posent aucun problème sur un champ de clé étrangère. Peut-être que ce n'est pas le cas sur certaines bases de données, mais c'est OK sur MS SQL et Oracle. – Clyde

0

Voici une solution de contournement:

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

Vous pouvez également essayer:

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

Alors le recordset ne tentera pas de mettre à jour la valeur du champ lié.