[VB] MyOleDB (mysql) 에서 한글 문제 해결
컨텐츠 정보
- 23,281 조회
- 19 추천
- 목록
본문
VB에서 ADO 를 통해서 Mysql를 사용하다보면..
한글을 사용하는데 문제가 있음을 알수 있습니다..
아마 VC등에서도 같을거 같습니다.
원인을 살펴보니깐..
myoledb com객체에서 유니코드(wchar)로 받은 스트링을..
ascii(char)로 변환하는 과정에서 문제가 있더군요..
myoledb 소스의
CCommand::Prepare 에서 이를 찾을수 있습니다.
// Convert SQL text
부분을 찾으셔서 그 아랫부분의 내용을 다음과 같이 고쳐주시면 됩니다.
int cCharsLen = WideCharToMultiByte(CP_ACP, 0, m_pwszCommand, nLen, NULL, 0, NULL, NULL);
m_pszSQL = new char[cCharsLen + 1];
if (m_pszSQL == NULL)
return E_OUTOFMEMORY;
int cCharsCopied = WideCharToMultiByte(CP_ACP, 0, m_pwszCommand, nLen, m_pszSQL, cCharsLen, NULL, NULL);
if (cCharsCopied != cCharsLen)
{
delete [] m_pszSQL;
return E_FAIL;
}
m_pszSQL[cCharsLen] = 0;
여러 가지 테스트를 해보지 않아서 다른 곳에서도 이와 같은 문제가 있을지도 모르겠습니다.
고쳐서 컴파일한 MyProv.dll을 같이 올립니다.
[이 게시물은 nuno님에 의해 2007-01-24 00:45:05 Etc.에서 이동 됨]
한글을 사용하는데 문제가 있음을 알수 있습니다..
아마 VC등에서도 같을거 같습니다.
원인을 살펴보니깐..
myoledb com객체에서 유니코드(wchar)로 받은 스트링을..
ascii(char)로 변환하는 과정에서 문제가 있더군요..
myoledb 소스의
CCommand::Prepare 에서 이를 찾을수 있습니다.
// Convert SQL text
부분을 찾으셔서 그 아랫부분의 내용을 다음과 같이 고쳐주시면 됩니다.
int cCharsLen = WideCharToMultiByte(CP_ACP, 0, m_pwszCommand, nLen, NULL, 0, NULL, NULL);
m_pszSQL = new char[cCharsLen + 1];
if (m_pszSQL == NULL)
return E_OUTOFMEMORY;
int cCharsCopied = WideCharToMultiByte(CP_ACP, 0, m_pwszCommand, nLen, m_pszSQL, cCharsLen, NULL, NULL);
if (cCharsCopied != cCharsLen)
{
delete [] m_pszSQL;
return E_FAIL;
}
m_pszSQL[cCharsLen] = 0;
여러 가지 테스트를 해보지 않아서 다른 곳에서도 이와 같은 문제가 있을지도 모르겠습니다.
고쳐서 컴파일한 MyProv.dll을 같이 올립니다.
[이 게시물은 nuno님에 의해 2007-01-24 00:45:05 Etc.에서 이동 됨]
관련자료
-
첨부등록일 2003.11.28 13:12
댓글 0
등록된 댓글이 없습니다.