사용하시는 델파이 버전이 2009 아래 것이라면, asString 구문이 문제가 됩니다.
델파이의 String <-> WideString 자동 변환은 알고 쓰면 편하고 신묘하지만 모르고 쓰면 헬...
아래 링크를 찬찬히 읽어보시구요...
http://oranke.tistory.com/14
간단히 요약하면, 모든 안시 코드 기반 프로그램은
"제어판-> 국가및언어-> 유니코드를 지원하지 않는 프로그램용 언어" 항목에서 설정된
코드페이지를 기반으로 표현할 수 없는 문자는 '?'로 대체됩니다.
델파이로 만든 프로그램 역시 마찬가지입니다.
해결방법은... AsString 대신, TField 의 GetData 를 직접 때려서 유니코드로 받아오세요.
쿼리 던질 때 사용하는 ADODB.pas 의 CommandText 는 다행히 WideString으로 정의되어 있어서
파라미터 기능을 배제하고 쿼리문을 직접 조합해 던지면 별 문제 없을꺼에요.
ADOQuery.Command.ParamCheck := False ;
ADOQuery.CommandText := 'SELECT... 어쩌구 저쩌구... ';
예전에 만들었던 게임에서도 델 5와 MSSQL를 써서 이 방법으로 한중일유럽대만에서 별 문제 없었습니다. ^^;;
내친김에 DB.pas를 수정, AsString을 참고로 AsWideString을 구현해두시면 두고두고 편하죠~~ ^^;;
김용무 님이 쓰신 글 :
: 현재
: 서버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하면 한글이 나오는데 프로그램에 적용시키면 한글이 ????? 나오는군요..
:
:
: 검수 완료일이 이번주라.. 현재 마음은.. 마치 꼬인 실타래 처럼..복잡하군요.. 이럴거라곤 생각도 못했거든요..
: