한시간 정도 뒤진 끝에 문제의 원인을 찾았습니다.
한마디로 말하지면 테이블의 varchar 필드의 길이를 바꿨는데 뷰를 재생성하지 않아서 생긴 에러네요.
며칠동안 DB 작업을 하는 동안에 그동안 자잘하게 문제가 되었던 부분들을 수정했었는데요. 그중에 첨부파일 이름 필드를 늘린 것도 있습니다. 이전에는 첨부파일 이름 50바이트였기 때문에 파일이름이 길 경우 문제가 생겼기 때문에, 이번에 255문자로 늘렸습니다. 마침 오늘 시빌리언님께서 컴포넌트 게시판에 파일이름이 51문자인 파일을 올리셨네요.
게시판에서 글 리스트를 얻을 때는 SQL 직접 조인을 해서 하는 것이 아니라 이미 조인을 해서 만들어놓은 뷰를 이용했는데, 이 뷰가 문제가 되었군요. 뷰에는 varchar 필드의 길이라든지 그런 선언이 전혀 없지만 뷰가 컴파일될 때 내부적으로는 필드 이름 길이가 같이 컴파일되는 것 같습니다. 그러니까 실제 테이블에서는 필드의 길이가 50에서 255로 늘어났는데, 뷰에서는 그대로 50길이인 상태였던 것 같습니다. 그러니 뷰를 통해 결과셋을 얻어오는 과정에서, 실제 데이터는 50길이가 넘는데 뷰를 거치면서 50길이가 넘는 부분이 잘려버렸던 겁니다. 그래서 '스트링이 잘렸슈' 하는 에러가 뜬 거죠.
뷰를 드랍시키고 똑같은 SQL문으로 다시 생성하니까 이제 잘 돌아가네요.
제 무지와 실수에서 빚어진 에러입니다.. 에휴....
검색의 에러는... 이전에 보시던 것과 동일한 에러입니다. 이건 지금 수정중입니다. 며칠 내로 에러 걱정 없는 검색 기능을 내놓겠습니다. --;;
불편을 드려서 죄송합니다.
ayh1800 님이 쓰신 글 :
: C++ 빌더 포럼의 컴포넌트/라이브러리 게시판 클릭했더니..
:
: 데이터베이스 에러입니다.
: arithmetic exception, numeric overflow, or string truncation.
:
: 이라는 에러가 뜨고 죽네요.
:
: 확인해보세요.
|