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

델파이 Q&A
Delphi Programming Q&A
[14898] Re:MS-SQL 2005에서 한글이 ?????로 깨집니다.
김용무 [emfpvmxm] 2638 읽음    2013-12-12 18:41
Widestring 으로 쓰면 될것 같아서 이래 저래 많은 버튼을 만들어서 테스트를 해봤는데.. 역시나 ????로 나오는군요.
맨탈이 붕괴되어 지고 있네요..ㅠ
혹시 서버 뷰테이블의 한글이 들어있는 필드가 Varchar(4000)으로 되어있어서일까요? 한글만 들어있지 않고 영문이랑 숫자랑 막 특수문자 같은것도 많이 들어있거든요..
1주일이 넘게 막막함과 싸우고 있습니다..ㅠ
아래는 오늘 테스트 해봤던 소스를 적어보았습니다.
도움 부탁드립니다...
메모 컨포도 IME 전부 IME_HANGUL로 바껏어요.

procedure TForm1.Button1Click(Sender: TObject);
begin
        with ADOQuery2 do
        begin
          close;
          SQL.clear;
          SQL.Text:= 'select * from View_Table where card_no =N'''+trim(Card_no.text)+'''';
          open;
          Application.ProcessMessages;
          memo1.Lines.Text :=     FieldByName('HOST_DATA').AsString;
          TNTmemo1.Lines.Text :=  FieldByName('HOST_DATA').AsString;
        end;
        showmessage('Commad Succes');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
        with ADOQuery2 do
        begin
          close;
          SQL.clear;
          SQL.Text:= 'select HOST_DATA collate KOREAN_WANSUNG_CI_AS HOST_DATA from View_Table where card_no =N'''+trim(Card_no.text)+'''';
          open;
          Application.ProcessMessages;
          memo1.Lines.Text :=     FieldByName('HOST_DATA').AsString;
          TNTmemo1.Lines.Text :=  FieldByName('HOST_DATA').AsString;
        end;
        showmessage('Commad Succes');
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
        with ADOQuery2 do
        begin
          close;
          SQL.clear;
          SQL.Text:= 'select * from View_Tablewhere card_no =N'''+trim(Card_no.text)+'''';
          open;
          Application.ProcessMessages;
          if CheckBox1.Checked = True then
          begin
            memo1.Lines.Text :=     UTF8Decode(FieldByName('HOST_DATA').AsString);
            TNTmemo1.Lines.Text :=  UTF8Decode(FieldByName('HOST_DATA').AsString);
          end
          else
          begin
            memo1.Lines.Text :=     UTF8Encode(FieldByName('HOST_DATA').AsString);
            TNTmemo1.Lines.Text :=  UTF8Encode(FieldByName('HOST_DATA').AsString);
          end;
        end;
        showmessage('Commad Succes');
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
        with ADOQuery2 do
        begin
          close;
          SQL.clear;
          SQL.Text:= 'select HOST_DATA collate KOREAN_WANSUNG_CI_AS HOST_DATA from View_Table where card_no =N'''+trim(Card_no.text)+'''';
          open;
          Application.ProcessMessages;
          if CheckBox1.Checked = True then
          begin
            memo1.Lines.Text :=     UTF8Decode(FieldByName('HOST_DATA').AsString);
            TNTmemo1.Lines.Text :=  UTF8Decode(FieldByName('HOST_DATA').AsString);
          end
          else
          begin
            memo1.Lines.Text :=     UTF8Encode(FieldByName('HOST_DATA').AsString);
            TNTmemo1.Lines.Text :=  UTF8Encode(FieldByName('HOST_DATA').AsString);
          end;
        end;
        showmessage('Commad Succes');
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
        with ADOQuery2 do
        begin
          close;
          SQL.clear;
          SQL.Text:= 'select * from View_Table where card_no =N'''+trim(Card_no.text)+'''';
          open;
          Application.ProcessMessages;
          memo1.Lines.Text :=     AnsiToUtf8(FieldByName('HOST_DATA').AsString);
          TNTmemo1.Lines.Text :=  AnsiToUtf8(FieldByName('HOST_DATA').AsString);
        end;
        showmessage('Commad Succes');
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
        with ADOQuery2 do
        begin
          close;
          SQL.clear;
          SQL.Text:= 'select HOST_DATA collate KOREAN_WANSUNG_CI_AS HOST_DATA from View_Table where card_no =N'''+trim(Card_no.text)+'''';
          open;
          Application.ProcessMessages;
          memo1.Lines.Text :=     AnsiToUtf8(FieldByName('HOST_DATA').AsString);
          TNTmemo1.Lines.Text :=  AnsiToUtf8(FieldByName('HOST_DATA').AsString);
        end;
        showmessage('Commad Succes');
end;


procedure TForm1.Button9Click(Sender: TObject);
begin
        with ADODataSet1 do
        begin
          CommandType := cmdText;
          CommandText := 'select HOST_DATA from View_Table where card_no =N'''+trim(Card_no.text)+'''';
          open;
          Memo1.Lines.Text :=  WideStringToUTF8(ADODataSet1.Fields[0].AsVariant);
          TNTMemo1.Lines.Text :=  WideStringToUTF8(ADODataSet1.Fields[0].AsVariant);
        end;
        showmessage('Commad Succes');
end;

procedure TForm1.Button10Click(Sender: TObject);
begin
        with ADODataSet1 do
        begin
          CommandType := cmdText;
          CommandText := 'select HOST_DATA from View_Table where card_no =N'''+trim(Card_no.text)+'''';
          open;
          Memo1.Lines.Text :=  WideStringToStringEx(ADODataSet1.Fields[0].AsVariant,949);
          TNTMemo1.Lines.Text :=  WideStringToStringEx(ADODataSet1.Fields[0].AsVariant,949);
        end;
        showmessage('Commad Succes');
end;

procedure TForm1.Button11Click(Sender: TObject);
var
  a,b : WideString;
begin
        with ADODataSet1 do
        begin
          CommandType := cmdText;
          CommandText := 'select HOST_DATA from View_Table where card_no =N'''+trim(Card_no.text)+'''';
          open;
          a :=  ADODataSet1.Fields[0].AsVariant;
          memo1.Lines.Text := AnsiToWide(@a,100,949);
          b := ADODataSet1.Fields[0].AsVariant;
          TntMemo1.Lines.Text := AnsiToWide(@b,100,949);
        end;
        showmessage('Commad Succes');
end;

procedure TForm1.Button12Click(Sender: TObject);
var
  a,b : WideString;
begin
        with ADODataSet1 do
        begin
          CommandType := cmdText;
          CommandText := 'select HOST_DATA from View_Table where card_no =N'''+trim(Card_no.text)+'''';
          open;
          a :=  ADODataSet1.Fields[0].AsVariant;
          memo1.Lines.Text := WideToAnsi(@a,100,949);
          b := ADODataSet1.Fields[0].AsVariant;
          TntMemo1.Lines.Text := WideToAnsi(@b,100,949);
        end;
        showmessage('Commad Succes');
end;

김용무 님이 쓰신 글 :
: 현재
: 서버PC의 View Table을 사용하는데요. 이쪽은 한글 윈도우에 한글 MS-SQL 2008을 사용중입니다.
:
: 그런데 저는
: 운영PC 영문윈도우에 독일 MS-SQL 2005를 사용중입니다.
: 물론 한글 언어 추가 했습니다.
:
:
: 문제는
: MS-2005 studio에서 그짝 서버로 접속해 쿼리를 적어서 select * from View_Table 을 검색하게 되면 한글이 잘나오더라구요.
:
:
: 그런데 이걸 이제 프로그램에 적용해서  ADOQuery 로 ODBC로 연결해서 language Setting도 Korean으로 하고
:
:
: SQLTxt := 'select * from View_Table'을 적용한뒤 데이터를 Fieldbyname('Data').asString형으로 받아서
: MS-2005에 사용하는 Table 에 넣기만 하면 한글이 ???로 에러가 나는군요.
:
:
:
: 그래서 보니 View_table은 한글이라 Varchar(4000) 으로 되어있고 제가 사용하는 테이블은 ntext 를 사용하고 있습니다.
: 유니코드형을 사용하고 있는데..
: 그래서 가져올때 SQLTxt := 'select Data collate korean_wansung_ci_as Data from View_Table' 이렇게 하여 한글로 바꾼다음에 테이블에 넣어 줘도 ???? 로 나오는군요...
:
: 개별 검색 할때도 SQLTxt := 'select Data collate korean_wansung_ci_as Data from View_Table Data_n = N'123123''
: 이렇게 N을 넣어서도 불러 와도 안되네요..
:
: 혹시 버젼 문제 일수 있을까요?
: MS-2005에서 2008이 다른 PC도 SQL Studio에서  잘안된다고 서버PC담당자가 말씀하시더라구요.
:
:
: 그런데 서버PC View Table을 동일 사향의 2005 버젼에서 사용해도 Studio에서는 select하면 한글이 나오는데 프로그램에 적용시키면 한글이 ????? 나오는군요..
:
:
: 검수 완료일이 이번주라.. 현재 마음은.. 마치 꼬인 실타래 처럼..복잡하군요.. 이럴거라곤 생각도 못했거든요..
:

+ -

관련 글 리스트
14893 MS-SQL 2005에서 한글이 ?????로 깨집니다. 김용무 2415 2013/12/10
14898     Re:MS-SQL 2005에서 한글이 ?????로 깨집니다. 김용무 2638 2013/12/12
14900         Re:Re:MS-SQL 2005에서 한글이 ?????로 깨집니다. 오랑캐꽃 2211 2013/12/13
14902             Re:Re:Re:MS-SQL 2005에서 한글이 ?????로 깨집니다. 김용무 2308 2013/12/13
14907                 Re:Re:Re:Re:MS-SQL 2005에서 한글이 ?????로 깨집니다. 오랑캐꽃 2971 2013/12/17
14912                     Re:Re:Re:Re:Re:MS-SQL 2005에서 한글이 ?????로 깨집니다. 김용무 3463 2013/12/19
14894     Re:MS-SQL 2005에서 한글이 ?????로 깨집니다. 오랑캐꽃 2621 2013/12/10
14895         Re:Re:MS-SQL 2005에서 한글이 ?????로 깨집니다. 김용무 2893 2013/12/10
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.