콘솔에서 돌아가는 C 프로그램을 작성하고 있습니다. MS-SQL 서버와 연결하려면 어떻게
해야 합니까.
MFC를 이용한 응용 프로그램을 사용해 콘솔 프로그램을 만듭니다.
그런 후에 다음처럼 ODBC를 연결하면 됩니다.
<리스트 1>콘솔 프로그램을 ODBC에 연결
// 선언
CDatabase m_dbSeaDB;
// 구현
// "Sss"는 ODBC에서 등록된 이름
// _T("ODBC; DSN = Sss; UID = dba; PWD = sql") 는
// ODBC를 열기 위한 명령
m_dbSeaDB.Open("_T("Sss"), FALSE, FALSE, _T("ODBC; DSN = Sss; UID = dba; PWD = sql"));
// 다음은 테이블을 열기 위한 예제입니다.
// 위, 경도의 Long값 자료 두 개에서 코드가 007인 자료만 찾을 조건
// 위, 경도는 문자열
CRecordset ExamSet(&m_dbSeaDB);
try {
ExamSet.Open(
CRecordset::forwardOnly, "SELECT Longi, Lati, Value1, Value2" \
FROM MyTable WHERE Code = '007' "
);
}
catch(CDBException *e) {
MessageBox(e->m_strError, "잘못!", MB_ICONSTOP);
e->Delete();
return;
}
// 읽어들인 자료를 핸들링
CString strLo, strLa;
CDBVariant varVel_e;
CDBVariant varVel_n;
while(!ExamSet.IsEOF()) {
// 0, 1, 2, 3 은 SELECT 문의 순서
ExamSet.GetFieldValue((short)0, strLo);
ExamSet.GetFieldValue((short)0, strLa);
// SQL_C_SLONGdms Value1, Value2를 Long으로 읽어들임.
ExamSet.GetFieldValue((short)2, varVel_e, SQL_C_SLONG);
ExamSet.GetFieldValue((short)3, varVel_n, SQL_C_SLONG);
ExamSet.MoveNext();
}
SendMessage를 이용해 문자를 다른 윈도우에 보내다가 핸들 문제 때문에 keybd_event를 사용하려는데, 영어와 달리 한글의 경우는 전송이 원하는 대로 이뤄지지 않습니다. keybd_event에서 한글은 어떤 식으로 처리해 줘야 합니까.
keybd_event()를 제대로 쓰려면 고려할 사항이 있습니다. 일단 keybd_event()는 사용자가 키를 누르는 동작을 그대로 흉내내는 것이라 이해해야 합니다(즉, SendMessage()와는 아무런 관련이 없습니다). 예를 들어 키보드에서 'A' 키를 누른다고 항상 'A' 가 입력되는 것은 아니라는 말입니다. CAPS_LOCK이 안 눌려 있다면 'A' 키를 눌러도 'a' 로 입력됩니다. 이 경우 keybd_event() 로 CAPS_LOCK 키를 누르고 'A' 키를 눌러야 합니다.
keybd_event(VK_CAPITAL, 0x45, KEYEVENTF_EXTENDEDKEY, 0);
keybd_event(VK_CAPITAL, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
keybd_event('A', MapVirtualKey('A', 0), 0, 0);
keybd_event('A', MapVirtualKey('A', 0), KEYEVENTF_KEYUP, 0);
물론 이전에 CAPS_LOCK 상태를 확인해야 하며, 방법은 다음과 같습니다.
BOOL bState = GetKeyState(VK_CAPITAL);
한글문제도 마찬가지입니다. IME 상태가 한글이라면 'A'키를 누르면 'ㅁ'가 입력되겠죠. 'S'를 누르면 'ㄴ'일테구요, 따라서 한글을 입력하려면 IME 상태를 확인한 후 영문이라면 한글 키를 누르는 과정이 들어가야 합니다. 즉, "My name is 바보." 를 입력하려면 (CAPS_LOCK : off, 한글 : off일 때) 다음과 같이 하면 됩니다.
> (shift down), M, (shift up), Y, (스페이스), N, A, M, E, (스페이스), I, S, (스페이스)
> (한글키), R, L, A, G, U, S, T, M, D, (한글키), . // HP 그래픽 워크스테이션에서 한글
이와 같이 이벤트를 발생시킨 다음, 한글키는 다음과 같이 사용합니다.
BOOL bState = GetKeyState(VK_HANGEUL); // 한글이면 1, 아니면 0
if(!bState) {
keybd_event(VK_HANGEUL, MapVirtualKey(VK_HANGEUL, 0), 0, 0);
keybd_event(VK_HANGEUL, MapVirtualKey(VK_HANGEUL, 0), KEYEVENTF_KEYUP, 0);
}
'IT_Programming > MFC · API' 카테고리의 다른 글
[펌] 유니코드 및 MBCS(멀티바이트 문자 집합) 지원 (0) | 2009.04.08 |
---|---|
[MFC] 각 클래스별 설명 (0) | 2008.01.22 |
릴리즈 모드에서 에러가 발생할 때 / 여러 줄을 한 줄씩 차례로 읽는 방법 (0) | 2007.12.25 |
float형을 int로 빠르게 cast 하는 방법 / 문자열에서 코드종류 알아내기 (0) | 2007.12.25 |
2개의 툴바를 한줄에 / 현재 디렉토리의 정보를 알아내는 법 (0) | 2007.12.25 |