|
>안녕하세요, 정진후라고 합니다.
>저는 캐릭터(CHAR) 타입의 어떤 디비 필드를 VARCHAR2로
>변경하였습니다.(물론 디비를 재구축하였지요)
>그런데 얼마전 심각한 것은 아닌데 문제점을
>발견하였습니다.
>그것은 VARCHAR2컬럼 내부에 아무 것도 입력이 안되어있을 때
>(널입니다) 해당 디비에디트에 포커스를 찍으면
>아무 것도 입력이 안됩니다.
>제 느낌으로는 디비에디트의 MaxLength프로퍼티에
>지정된 길이만큼 공백이 들어가 있는 것 같습니다.
>물론 그 '공백'을 다 지워주면 입력이 됩니다만,
>그렇게 하는 것은 어플리케이션이라고 할 수 없지요.
>이것이 디비에디트의 설정문제 입니까? 아니면 디비에디트와
>VARCHAR2필드간에 문제가 있어서 코딩으로 잡아 주어야 하는 것입니까?
>조언을 기다리겠습니다.
안녕하세요 정진후입니다. 답변이 안올라가는 것 같아 이렇게
올립니다.
답은 '아무 관계가 없다'이고 제 버그때문입니다.
제가 만든 디비 변환 툴에서 문제의 컬럼에
값을 넣어 줄 때 에러 처리로 그 컬럼의 길이에 맞게
서브 스트링을 해 주었습니다.
예를 들면
AnsiString asVal = "AAA";
SomeQry->Append();
SomeQry->FieldByName("SomeField")->AsString = asVal.SubString(1, SomeField의 길이);
SomeQry->Post();
이런 식의 코딩을 하고 있었는데 이렇게 되면 필드의 길이가 넘어 갈 때
와 정확하게 변수의 값과 필드의 길이가 같을 경우는 문제가 없으나
반대로 필드의 길이보다 변수의 길이가 짧을 때는 뒤로 두 값의 차이만큼의
스페이스가 들어가게 된 것입니다.
이것을
AnsiString asVal = "AAA";
SomeQry->Append();
SomeQry->FieldByName("SomeField")->AsString = asVal.SubString(1, SomeField의 길이).TrimRight();
SomeQry->Post();
라고 해주니 변수의 길이가 짧아도 길어도 문제 없이 값이 들어가게 되었습니다.
자기가 만든 버그로 여러분들에게 잠시 누를 끼친 점 사과드리며(T_T)
앞으로는 잘 디버깅 해보고 질문올리겠습니다.
|