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

C++빌더 Q&A
C++Builder Programming Q&A
[67622] DBGrid에서의 VARBYTE표기 관련 질문입니다
박준규 [sico420] 1548 읽음    2012-06-21 15:19
이미지 파일은 각각
1. 프로그램 실행상태
2. MYSQL 테이블 상태
3. MYSQL 문자셋 상태


DB로 간단한 프로그램을 짜고 있는데 언어셋 문제에서 난관에 봉착했습니다.
일주일이 넘어가는데 도통 답이 안보여서 질문까지 하게되었습니다.

문제사항은 DBGrid의 값들이 숫자가 아닌 문자 자료형이면 VARBYTE로 표기되는것입니다.

SQL쿼리 날린 결과값을 반복문으로 돌려가면서 Memo등에 출력하면 한글이 정상적으로 표기되는데
DBGRID만 꼭 저렇게 나오네요, 구글링 해보니 저런 사례가 간혹가다 있는데 해결된걸 못봤습니다.

수작업으로 출력한 결과 SQLQuery1 과 ClientDataSet1까지는 자료가 한글로 잘 넘어와서 메모장에
출력됩니다만 DataSource1 거쳐서 DBGrid만 들어가면 문자들이 저렇게 나와버립니다.

DB그리드는 기본 TDBGrid와 Raize 컴포넌트의 RzDBGRID 둘다 저모양으로 나옵니다.

아래는 환경사항입니다

- 툴은 C++Builder6, DB는 MYSQL 5.1.41-community 입니다(MySQL 문자셋: UTF-8 Unicode (utf8))
- 컴포넌트는 DBGrid와 DBexpress를 사용했습니다
- 드라이버 파일은 포럼에서 받은 빌더용 MySQL 5.x 드라이버를 사용하였습니다.
- 테스트 시 문자셋은 가능한한 모두 UTF8로 통일 했으며 EUCKR로 통일한 상태에서도 같은 증상이 발생합니다
- set name 을 사용해서 각각 euckr과 utf8로 해줘도 같은 VARBYTE 상태로 표기됩니다
- ClientDataSet1 이나 SQLQuery1 를 반복문으로 돌려서 레코드 값을  Memo1에  찍어보면 한글이 잘나옵니다
- 컴포넌트 는 각각 연결해주는 값만을 설정하였으며 별도 내용은 손보지 않았습니다.


아래는 예제의 소스 입니다.
bool __fastcall TForm1::DBconnection()
{
    bool bResult = false;
    __try
    {
        try
        {
            SQLConnection1->DriverName = "dbxmysql";
            SQLConnection1->GetDriverFunc = "getSQLDriverMYSQL50";
            SQLConnection1->LibraryName = "dbxopenmysql50.dll";
            SQLConnection1->Params->Clear();
            SQLConnection1->Params->Values["User_Name"] = "root";            
            SQLConnection1->Params->Values["Password"] = "apmsetup";     
            SQLConnection1->Params->Values["HostName"] = "127.0.0.1";       
            SQLConnection1->Params->Values["Database"] = "mdsi_lab_erp";
            SQLConnection1->Open();
            //SQLQuery1->SQL->Clear();
            //SQLQuery1->SQL->Add("set names euckr");
            //SQLQuery1->SQL->Add("set names utf8");
            //SQLQuery1->ExecSQL();
            bResult = true;
        }
        catch(Exception &E){
            //..
        }
    }
    __finally{return bResult;}
}



아래는 각 DBExpress 컴포넌트값들의 설정입니다
[SQLConnection1]
Connected = true
ConnectionName = MYSQL
DriverName = dbxmysql
GetDriverFunc = getSQLDriverMYSQL50
KeepConnection = true
LibraryName = dbxopenmysql50.dll
Name = MYSQLCon
VendorLib=libmysql.dll

[SQLDataSet1]
SQLConnection = SQLConnection1

[DataSEtProvider1]
Constraints = true
DataSet = MySQLQuery
Exported = true
Name = DataSetProvider1;

[ClientDataSet1]
Active = true;
ProviderName = DataSetProvider1;

[DataSource1]
DataSet = ClientDataSet1
Enabled = true

[MySQLQuery]
SQLConnection = MySQLCon
SQL = SELECT * FROM mdsi_afterservice

[SQLClientDataSet1]
FetchOnDemand = true;


이상입니다, 도데체 어디가 문제길래 저렇게 나오는걸까요. 많은 답변 부탁드립니다.

+ -

관련 글 리스트
67622 DBGrid에서의 VARBYTE표기 관련 질문입니다 박준규 1548 2012/06/21
67691     Re:DBGrid에서의 VARBYTE표기 관련 질문입니다 Starlet 1672 2012/07/09
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.