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하면 한글이 나오는데 프로그램에 적용시키면 한글이 ????? 나오는군요..
:
:
: 검수 완료일이 이번주라.. 현재 마음은.. 마치 꼬인 실타래 처럼..복잡하군요.. 이럴거라곤 생각도 못했거든요..
:
|