2010-12-03 6 views
1

이전 VB6 응용 프로그램을 파고 들었는데이 언어에 대한 많은 경험이 없습니다.VB6 ADODB.Recordset을 사용하여 텍스트 상자에 NULL 값을 바인딩

지금은 컨트롤이 ADODB.Recordset에 바인딩 된 양식이 있습니다. 따라서 TextBox의 "DataField"속성은 "MyIntColumnName"으로 설정됩니다.

텍스트 상자를 비워두면 데이터베이스에 null을 넣어야하지만 대신 0과 외래 키 위반이 발생합니다. 빈 == NULL이되도록 바인딩을 지정하는 방법이 있습니까?

답변

2

데이터베이스의 열을 확인하고 싶을 수 있습니다. Not 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 

최종 하위

+0

아니요, 불행히도 필드는 NULL 가능하며 기본값이 없습니다. 또한 NULL 값은 외부 키 필드에서 문제가되지 않습니다. 어쩌면 특정 데이터베이스의 경우는 아니지만 MS SQL 및 Oracle에서는 확실히 정상입니다. – Clyde

0

여기에 해결의

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

그런 다음 레코드 바인딩 된 필드의 값을 업데이트하지 않습니다.