C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[56196] DBExpress에서 BigInt 문제 해결법이..
슬픈사슴 [interest] 1244 읽음    2009-02-18 13:55
안녕하세요.
빌더, 오랬만에 잡습니다.
빌더로 MysqlDB를 처리해서 해봐야 할 사항이 있는데 DB Field에 BigInt로 잡혀있는 필드가 Select 시 읽기에서 문제가 좀 있네요.

여기 검색해 보았지만 마땅한 해결책이 보이지 않아 질문드립니다.

우선 CBuilder 6.0 을 쓰고 있습니다.

커넥션은 TSQLConnection, Query는 TSQLQuery를 쓰는데 사용하는 Mysql DB는 3.22(구닥다리지만 워낙에 빨라서..)

문제는 요 DB의 테이블에 BigInt 형이 들어 있구요. 실제 데이터도 8바이트 unsigned정수를 전부 사용합니다. Unique ID가 발급된 필드죠.

4바이트 정수 범위를 넘어가지 않은 숫자면 TSQLQuery에서도 AsInteger, AsString 등으로 정상적인 읽기가 가능한데 실제 DB에 들어있는값은 4바이트 정수 범위를 넘어갑니다.  EX : 2583024897676541956

근데 요넘이 TSQLQuery에서 읽어 들일려면 예외가 발생하네요. "2.650353....... is not valid BCD value" 인터넷이나 이 사이트를 뒤져보면 AsFMTBCD 쓰라고 하는데.. 찻은건 저장할때 쓰는 방법뿐이였고 읽어올때도 쓰는 방법은 찻지를 못했습니다.

머 얼마전부터 UID발급은 4바이트 정수에 한계를 느껴서 아예 신경안쓰고 잊어버리게 8Byte 정수를 쓴게 빌더가 발목을 잡네요.

현재는 변칙적인 방법으로 해결해서 쓰고 있습니다만 해결하신 분 있으시면 정보 공유 부탁드립니다.
제가 변칙적으로 쓰는 방법은 Select 할때 BigInt 쓰는 부분은 CONCAT으로 필드형 자체를 문자열형으로 나오게 해서 Buider에서 문자열로 취급하게 한 후 AsString으로 읽어들입니다. 일단 문자열로 만든뒤로는 뭔짓이든 할 수 있겟죠.
하지만 이방법은 Select * 같이 간단한 Query는 만들 수가 없어 소스가 많이 귀찮아집니다.

+ -

관련 글 리스트
56196 DBExpress에서 BigInt 문제 해결법이.. 슬픈사슴 1244 2009/02/18
56202     Re:DBExpress에서 BigInt 문제 해결법이.. 박지훈.임프 1142 2009/02/19
56208         Re:Re:DBExpress에서 BigInt 문제 해결법이.. 슬픈사슴 2467 2009/02/19
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.