2010-12-03 3 views
1

Ich bin in eine alte VB6 App graben und ich habe nicht viel Erfahrung mit dieser Sprache.VB6 Binding NULL Wert zu Textbox mit ADODB.Recordset

Im Moment habe ich ein Formular, wo die Steuerelemente an ein ADODB.Recordset gebunden sind. Also die "DataField" -Eigenschaft der TextBox ist auf "MyIntColumnName" festgelegt.

Wenn das Textfeld leer bleibt, würde ich erwarten, dass eine Null in die Datenbank eingefügt wird, stattdessen bekomme ich Nullen und eine Fremdschlüsselverletzung. Gibt es eine Möglichkeit, die Bindung anzugeben, so dass leer == NULL?

Antwort

2

Vielleicht möchten Sie die Spalte in der Datenbank überprüfen: Es klingt wie es auf Nicht Null gesetzt ist und einen Standardwert von 0, weshalb, wenn Sie nichts eingeben, eine Null eingereicht wird.

Ich glaube nicht, die Bindung zu ändern, so dass leer == Null wird helfen, da Sie immer noch eine Fremdschlüsselverletzung erhalten würden - Ihre Tabelle hat einen Fremdschlüssel, der von einem gültigen Wert abhängt.

Sie müssen entweder Ihre Tabelle ändern (entfernen Sie den Standard und den Fremdschlüssel) - was möglicherweise nicht die beste Lösung ist - oder ändern Sie Ihr Formularfeld - vielleicht zu einer Kombination oder Liste Wert, der korreliert auf den Wert aus der Fremdschlüsseltabelle.

+0

Nein, leider ist das Feld NULLable und hat keinen Standardwert. NULL-Werte sind auch kein Problem für ein Fremdschlüsselfeld. Vielleicht ist das bei bestimmten Datenbanken nicht der Fall, aber bei MS SQL und Oracle ist es in Ordnung. – Clyde

0

Hier ist eine Abhilfe:

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

Sie könnten auch versuchen:

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

Dann der Re-Cord wird nicht versuchen, den Wert aus dem gebundenen Feld zu aktualisieren.