Q&A

  • 성호종님 부탁드립니다. - Informix에 Null 사용하는 문제
22979 - 23337까지 논의를 했던 부분입니다.

가르침데로 적용하였는데 잘되지 않아서 다시 한번 부탁드립니다.





1. 가르침데로 Informix에서 SQL문으로 Update한 결과는 잘 처리되었습니다.

(적용예 1) update A_DB

set Fld_B = null

where Fld_B = '' or Fld_B = ' ';

(적용예 2) select count(Fld_A) count(Fld_B)

From A_DB

(결과) update는 잘되었고 count(Fld_B)의 값은 Zero 이었습니다.



2. 그러나 Delphi문에서 DataBase를 처음 Insert할 때에 Null을 삽입하는 것은

실패하였습니다.



(적용예 1) A_DB.Field_B.value := Null; (value 대신 text를 써도 마찬가지)



(적용예 2) Edit_Field_B.text := null;



(결과) 위 어떤 방식으로 적용하던간에 결과 메세지는

'Invalid Variant Type Conversion'으로 나타남



3. 가이드를 해주실 고수님의 고견을 구합니다.



감사합니다. - 고재성 -







성호종 wrote:

> 고재성 wrote:

> null이 되어야 할 필드에 혹시 '' <- 이렇게 하시지 않으셨나요?

> 이렇게 하게 되면 널과는 다른 어떠한 값으로 인식을 합니다.

> 때문에 반드시 null <- 이렇게 insert하셔야 합니다.

> 저는 informix 경력 3년입니다.

>

> > Hoon Reader wrote:

> > > Not NULL로 Field 속성을 설정한걸로 보입니다.

> > > Field 속성을 Accept NULL로 설정하세요.

> > >

> > 당연히 Not Null로 설정하지 않았습니다.

> > 동일한 Program을 Paradox에서 적용할 경우 Null값이 나옵니다.

> > 그런데 Informix에서 사용하면 Not Null값이 나오니까 답답한 상태입니다.

> >

> > 참고로 해당 Field는 char 모드에 8자리 입니다.

2  COMMENTS
  • Profile
    성호종 2000.08.21 20:15
    고재성 wrote:

    델파이에서 insert할때 널을 insert하려면

    아예 field를 빼버리는 방법이 있습니다.

    예를 들자면

    if abc = '1' then

    begin

    query1.sql.text := 'insert into table(a,b,c) values(:a1, :a2, :a3)';

    end

    else

    begin

    query1.sql.text := 'insert into table(a,b)'+ <----- 여기서는 filed 'c'는 null

    ' values(:a1, :a2)';

    end;

    query1.execsql;

    이렇게 하면 a,b,c의 필드중 abc가 '1'이 아닌경우는 'C'필드를 널로 insert 합니다.



    > 22979 - 23337까지 논의를 했던 부분입니다.

    > 가르침데로 적용하였는데 잘되지 않아서 다시 한번 부탁드립니다.

    >

    >

    > 1. 가르침데로 Informix에서 SQL문으로 Update한 결과는 잘 처리되었습니다.

    > (적용예 1) update A_DB

    > set Fld_B = null

    > where Fld_B = '' or Fld_B = ' ';

    > (적용예 2) select count(Fld_A) count(Fld_B)

    > From A_DB

    > (결과) update는 잘되었고 count(Fld_B)의 값은 Zero 이었습니다.

    >

    > 2. 그러나 Delphi문에서 DataBase를 처음 Insert할 때에 Null을 삽입하는 것은

    > 실패하였습니다.

    >

    > (적용예 1) A_DB.Field_B.value := Null; (value 대신 text를 써도 마찬가지)

    >

    > (적용예 2) Edit_Field_B.text := null;

    >

    > (결과) 위 어떤 방식으로 적용하던간에 결과 메세지는

    > 'Invalid Variant Type Conversion'으로 나타남

    >

    > 3. 가이드를 해주실 고수님의 고견을 구합니다.

    >

    > 감사합니다. - 고재성 -

    >

    >

    >

    > 성호종 wrote:

    > > 고재성 wrote:

    > > null이 되어야 할 필드에 혹시 '' <- 이렇게 하시지 않으셨나요?

    > > 이렇게 하게 되면 널과는 다른 어떠한 값으로 인식을 합니다.

    > > 때문에 반드시 null <- 이렇게 insert하셔야 합니다.

    > > 저는 informix 경력 3년입니다.

    > >

    > > > Hoon Reader wrote:

    > > > > Not NULL로 Field 속성을 설정한걸로 보입니다.

    > > > > Field 속성을 Accept NULL로 설정하세요.

    > > > >

    > > > 당연히 Not Null로 설정하지 않았습니다.

    > > > 동일한 Program을 Paradox에서 적용할 경우 Null값이 나옵니다.

    > > > 그런데 Informix에서 사용하면 Not Null값이 나오니까 답답한 상태입니다.

    > > >

    > > > 참고로 해당 Field는 char 모드에 8자리 입니다.

  • Profile
    고재성 2000.08.27 05:25
    전번에 답변해주신데로 적용하였더니 원하는 결과가 나왔습니다.

    그 직후에 감사의 답변을 올렸는데

    어찌된 연유인지 오늘 보니까 게시되어 있지 않군요 !

    (제가 실수했나 봅니다.)



    이렇게 남의 어려움을 도와주시는 분들이 많다는 것이 좋고

    그러한 공간이 있다는 것이 좋습니다.



    성호종님 감사드립니다. !!!!!!





    성호종 wrote:

    > 고재성 wrote:

    > 델파이에서 insert할때 널을 insert하려면

    > 아예 field를 빼버리는 방법이 있습니다.

    > 예를 들자면

    > if abc = '1' then

    > begin

    > query1.sql.text := 'insert into table(a,b,c) values(:a1, :a2, :a3)';

    > end

    > else

    > begin

    > query1.sql.text := 'insert into table(a,b)'+ <----- 여기서는 filed 'c'는 null

    > ' values(:a1, :a2)';

    > end;

    > query1.execsql;

    > 이렇게 하면 a,b,c의 필드중 abc가 '1'이 아닌경우는 'C'필드를 널로 insert 합니다.

    >

    > > 22979 - 23337까지 논의를 했던 부분입니다.

    > > 가르침데로 적용하였는데 잘되지 않아서 다시 한번 부탁드립니다.

    > >

    > >

    > > 1. 가르침데로 Informix에서 SQL문으로 Update한 결과는 잘 처리되었습니다.

    > > (적용예 1) update A_DB

    > > set Fld_B = null

    > > where Fld_B = '' or Fld_B = ' ';

    > > (적용예 2) select count(Fld_A) count(Fld_B)

    > > From A_DB

    > > (결과) update는 잘되었고 count(Fld_B)의 값은 Zero 이었습니다.

    > >

    > > 2. 그러나 Delphi문에서 DataBase를 처음 Insert할 때에 Null을 삽입하는 것은

    > > 실패하였습니다.

    > >

    > > (적용예 1) A_DB.Field_B.value := Null; (value 대신 text를 써도 마찬가지)

    > >

    > > (적용예 2) Edit_Field_B.text := null;

    > >

    > > (결과) 위 어떤 방식으로 적용하던간에 결과 메세지는

    > > 'Invalid Variant Type Conversion'으로 나타남

    > >

    > > 3. 가이드를 해주실 고수님의 고견을 구합니다.

    > >

    > > 감사합니다. - 고재성 -

    > >

    > >

    > >

    > > 성호종 wrote:

    > > > 고재성 wrote:

    > > > null이 되어야 할 필드에 혹시 '' <- 이렇게 하시지 않으셨나요?

    > > > 이렇게 하게 되면 널과는 다른 어떠한 값으로 인식을 합니다.

    > > > 때문에 반드시 null <- 이렇게 insert하셔야 합니다.

    > > > 저는 informix 경력 3년입니다.

    > > >

    > > > > Hoon Reader wrote:

    > > > > > Not NULL로 Field 속성을 설정한걸로 보입니다.

    > > > > > Field 속성을 Accept NULL로 설정하세요.

    > > > > >

    > > > > 당연히 Not Null로 설정하지 않았습니다.

    > > > > 동일한 Program을 Paradox에서 적용할 경우 Null값이 나옵니다.

    > > > > 그런데 Informix에서 사용하면 Not Null값이 나오니까 답답한 상태입니다.

    > > > >

    > > > > 참고로 해당 Field는 char 모드에 8자리 입니다.