2010-12-03 26 views
1

古いVB6アプリケーションを掘り起こす必要があり、この言語で多くの経験がありません。VB6 ADODB.RecordsetでテキストボックスにNULL値をバインドする

今では、コントロールがADODB.Recordsetにバインドされているフォームがあります。したがって、TextBoxの "DataField"プロパティは "MyIntColumnName"に設定されます。

テキストボックスを空白のままにすると、データベースにnullを入れることになりますが、代わりにゼロと外部キー違反が発生します。空の== NULLになるようにバインドを指定する方法はありますか?

答えて

2

データベースの列をチェックしたい場合があります.Null Nullに設定され、デフォルト値0に設定されているように聞こえるので、何も入力しないと0が送信されます。

バインディングを変更しないと、空の== Nullはまだ外部キー違反が発生するため、テーブルには有効な値に依存する外部キーがあるため役立ちます。

あなたのテーブルを変更する必要があります(デフォルトと外部キーを削除してください)。これは最適なソリューションではないかもしれません。フォームフィールドを変更することもできます。外部キーテーブルの値に設定します。あなたはまた、試みることができる

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

残念ながら、このフィールドはNULL可能でデフォルト値はありません。また、NULL値は外部キーフィールドで問題ありません。たぶんそれは特定のデータベースでは当てはまらないかもしれませんが、MS SQLとOracleでは確かにOKです。 – Clyde

0

は、ここでの回避策だ

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

その後、レコードセットがバインドされたフィールドから値を更新しようとはしません。