C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
분야별 포럼
C++빌더
델파이
파이어몽키
C/C++
프리파스칼
파이어버드
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

자유게시판
세상 살아가는 이야기들을 나누는 사랑방입니다.
[8273] Re:최종 결론.. 델파이 ADO관련 버그 인것으로 여겨집니다..
박진수 [] 1340 읽음    2003-12-23 15:05
최종 결론..  델파이 ADO관련 버그 인것으로 여겨집니다..

다음과 같은 TEST를 했습니다..

테이블에는 NUMERIC(7) TYPE으로 정의된 필드가 존재합니다.

첫번째 실험자의
클라이언트환경은  WINDOWS XP 에서..
MDAC 2.8... 로
ASP에  MS-SQL OLEDB Provider로   Windows NT서버+MS-SQL7과 Windows 2003서버+MS-SQL2000을 접근한 결과
음수 수치를 제대로 처리해 보여줬으며..,

두번째 실험자의
클라이언트환경은  WINDOWS 2000 에서..
MDAC 2.7... 로
ASP에  MS-SQL OLEDB Provider로   MS-2000서버의 MS-SQL2000을 접근한 결과
음수 수치를 제대로 처리해 보여줬습니다..

그러나
본인이..,
Win98SE+MDAC2.8과  Windwos2000+MDAC2.8 설치 된곳에서 각각
델파이7 버전에 TADO쿼리로  Windows NT 4.0+MSSQL7에 접근하여 테스트한 결과는
음수 처리 오류가 발생했습니다..

폼소스와 BDE 시와 ADO시 화면을 같이 첨부했습니다.

----------------------------------------------------------------
폼의 소스 입니다.
object Form1: TForm1
  Left = 192
  Top = 107
  Width = 696
  Height = 536
  Caption = 'Form1'
  Color = clBtnFace
  Font.Charset = HANGEUL_CHARSET
  Font.Color = clWindowText
  Font.Height = -12
  Font.Name = #44404#47548
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 12
  object DBGrid1: TDBGrid
    Left = 40
    Top = 88
    Width = 553
    Height = 233
    DataSource = DataSource1
    ImeName = #54620#44397#50612'('#54620#44544')'
    Options = [dgEditing, dgAlwaysShowEditor, dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgConfirmDelete, dgCancelOnExit]
    TabOrder = 0
    TitleFont.Charset = HANGEUL_CHARSET
    TitleFont.Color = clWindowText
    TitleFont.Height = -12
    TitleFont.Name = #44404#47548
    TitleFont.Style = []
    Columns = <
      item
        Expanded = False
        FieldName = 'aa1'
        Title.Caption = #54805#48320#54872#54620' '#54596#46300
        Visible = True
      end
      item
        Expanded = False
        FieldName = 'aa2'
        Title.Caption = #44592#48376'TYPE'#51032' '#54596#46300
        Visible = True
      end>
  end
  object RadioButton1: TRadioButton
    Left = 408
    Top = 64
    Width = 52
    Height = 17
    Caption = 'BDE'
    TabOrder = 1
    OnClick = RadioButton1Click
  end
  object RadioButton2: TRadioButton
    Left = 472
    Top = 64
    Width = 52
    Height = 17
    Caption = 'ADO'
    Checked = True
    TabOrder = 2
    TabStop = True
    OnClick = RadioButton2Click
  end
  object Memo1: TMemo
    Left = 40
    Top = 344
    Width = 569
    Height = 129
    Font.Charset = HANGEUL_CHARSET
    Font.Color = clWindowText
    Font.Height = -12
    Font.Name = #44404#47548#52404
    Font.Style = []
    ImeName = #54620#44397#50612'('#54620#44544')'
    Lines.Strings = (
      'SELECT cast((ITEM_HCOUNT * -1) as int) aa1,'
      '       (ITEM_HCOUNT * -1)  aa2'
      '  FROM BLRM_ITEM  ')
    ParentFont = False
    ReadOnly = True
    TabOrder = 3
  end
  object DataSource1: TDataSource
    DataSet = ADOQuery1
    Left = 208
    Top = 40
  end
  object Query1: TQuery
    Active = True
    DatabaseName = 'BLRM_DB'
    SQL.Strings = (
      'SELECT cast((ITEM_HCOUNT * -1) as int) aa1,'
      '       (ITEM_HCOUNT * -1)  aa2'
      '  FROM BLRM_ITEM  ')
    Left = 104
    Top = 24
  end
  object ADOQuery1: TADOQuery
    Active = True
    ConnectionString =
      'Provider=SQLOLEDB.1;Password=BEST;Persist Security Info=True;Use' +
      'r ID=BEST;Initial Catalog=BESTLRM;Data Source=xxx.XXXX.XXX.XXX
    CursorType = ctStatic
    Parameters = <>
    SQL.Strings = (
      'SELECT cast((ITEM_HCOUNT * -1) as int) aa1,'
      '       (ITEM_HCOUNT * -1)  aa2'
      '  FROM BLRM_ITEM  ')
    Left = 336
    Top = 32
  end
end
---------------------------------------------------------------------------


http://www.delmadang.com/cwb-bin/CrazyWWWBoard.exe?db=dmdlec&mode=read&num=2392&page=1&backdepth=1
에 결과 화면 있습니다..



박진수 님이 쓰신 글 :
: 델파이의 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로 형변환을 하던지..
: 아예 테이블을 변환시켜야 하는것도 문제네요..
:
: ---------------------------------------------------------------------
:
: 델파이 팁게시판이 너무 휑~~~~~~~~~~~ 한거 같아서 이곳에 올립니다.

+ -

관련 글 리스트
8272 델파이의 ADO버그인가 MS의 MDAC의 버그인가 아니면 나의 실수인가!!! 박진수 1252 2003/12/23
8273     Re:최종 결론.. 델파이 ADO관련 버그 인것으로 여겨집니다.. 박진수 1340 2003/12/23
8274         Re: ADO test 내용 추가 및 해결방법.. 박진수 1391 2003/12/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.