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

델파이 팁&트릭
Delphi Programming Tip&Tricks
[45] [팁]델파이의 ADO버그인가 MS의 MDAC의 버그인가 아니면 나의 실수인가!!!
박진수 [jeensoo] 13361 읽음    2003-12-23 13:04
[팁]델파이의 ADO버그인가 MS의 MDAC의 버그인가 아니면 나의 실수인가!!!

[TEST환경]
MDAC 버전 2.8
델파이버전 7.0
DATABASE  MS-SQL7  SP4
클라이언트  WIN98SE, WIN2000
서버  WIN2000 SP4, WIN NT SP6a

[증상]
저는 보통 숫자를 처리하는 필드를 NUMERIC TYPE으로 정의해서
DB 테이블들을 생성해서 쓰고 있습니다.

그런데  TADO쿼리를 MS-SQL OLE DB 에 연결하고
SELECT를 해올시에..
NUMERIC으로 선언된 필드에 분명 -(마이너스, 음수) 값이 들어가 있는데..
TADO쿼리로 해서 읽어와 이것을 DB그리드와 연결시키면..
- 가 없는 값으로 나오더군요..

그래서 BDE와 TQuery로 테스트 해보니 이상없이 나왔구..
볼랜드의 SQL EXPLORER로 가서 해당 테이블을 접근해도 이상이 없었구
MS SQL의 Query Analyzer로 해도 이상없이 읽어오구..
MS SQL의 EM(Enterprise Manager)로도 이상없이 읽어오는데..

ADO 쿼리를 MS-SQL OLEDB 프로바이더와 연결해서 읽어오면
여지 없이 NUMERIC TYPE으로 정의된 필드에 있는 - 값은 읽어오지
못합니다..
즉 원래 테이블에는 -1이 들어있을경우 DB그리드에 표시되는 값은 1만 표시되는 거죠...

그러나 이것을 SQL문의 CAST나 CONVERT 를 써서..  NUMERIC TYPE을 INT나 FLOAT으로 바꾸면  DB그리드에서 제대로 표시됩니다.

해당필드를 다음과 같이 해서 읽어볼 경우도 여지없이 음수는 표현을 못하더군요..

ShowMessage(IntToStr(TADOQuery1.FieldByName('FLD1').AsInteger));
ShowMessage(FloatToStr(TADOQuery1.FieldByName('FLD1').AsFloat));

물론 ADO쿼리 콤포넌트에 필드에디터를 사용하여 AddAll Field로 해서 필드처리를 하건 않하건 상관없이
또 해당 필드의 DisplayFormat을 지정하건 않하건 상관없이 음수는 무조건 양수로 읽어오더군요..

델파이의 ado 쿼리의 버그인지
mdac의 버그인지..,
mdac 2.8 버전과 sql서버 7.0 과의 인터페이스 버그인지..

도대체 원인이 어디에있는지 모르겠습니다..

혹시 mdac 다른 버전이나..,    sql서버 2000에서는 어떤지
여러분들도 한번 확인 해 보시길 바랍니다..

만약 VB에 ADO로  SQL서버 7.0이나 2000에서도
NUMERIC TYPE으로 정의된 필드에서  음수값을 제대로 읽어오지 못한다면..
이건 MS의 버그로 확대 될것 같군요..

그러나 꼭 NUMERIC(1) 만으로 필요한 해서 사용하는 경우도 있고 한데..
ADO에서 NUMERIC 필드에대한 음수 표현이 안되어..
INT(기본 4바이트) 나 SMALLINT TINYINT, FLOAT, MONEY를써야 한다면..., 이또한 문제
이고..,  ADO라는게 같은 회사의 제품인 MS-SQL서버 마저도 제대로 지원하지 못한다면..,
이또한도 문제..,
또 기존에 NUMERIC으로 생성시킨 테이블들은..  만약 ADO를 사용할경우...
이 테이블들을 ADO로 억세스 할시 cast나 convert로 형변환을 하던지..
아예 테이블을 변환시켜야 하는것도 문제네요..
박지훈.임프 [cbuilder]   2004-05-14 23:59 X
델파이 7 업데이트 1에서 해결된 버그입니다.
http://www.borlandforum.com/impboard/impboard.dll?action=read&db=news&no=243

하지만 이 업데이트 자체에 다른 버그가 여러개 포함되어 있는 듯 하니 업데이트 2가 나올 때까지 기다리시는 편이 나을 듯...

+ -

관련 글 리스트
45 [팁]델파이의 ADO버그인가 MS의 MDAC의 버그인가 아니면 나의 실수인가!!! 박진수 13361 2003/12/23
(링크)     C++Builder Tip'N Tricks > [팁]델파이의 ADO버그인가 MS의 MDAC의 버그인가 아니면 나의 실수인가!!!
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.