|
안녕하세요.
빌더, 오랬만에 잡습니다.
빌더로 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는 만들 수가 없어 소스가 많이 귀찮아집니다.
|