델파이 버전이 뭔지는 안가르쳐주시네요~~ 뭐 2009 미만으로 생각하겠습니다.
필드타입을 varchar 대신 nvarchar 로, AsString 대신 Value 로 바꿔보세요.
이 글도 도움이 되실지 모르겠네요.
http://delphi.borlandforum.com/impboard/impboard.dll?action=read&db=del_qna&no=14193
김용무 님이 쓰신 글 :
: 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하면 한글이 나오는데 프로그램에 적용시키면 한글이 ????? 나오는군요..
: :
: :
: : 검수 완료일이 이번주라.. 현재 마음은.. 마치 꼬인 실타래 처럼..복잡하군요.. 이럴거라곤 생각도 못했거든요..
: :