직접적으로 MFC 프로젝트에서 쓸 일은 별로 없긴한데, 가끔 쓸때마다 삽질을 해서 정리함.
1. 현재 레코드의 필드값 가져오기 (서수 번호로)
spRecordset->Fields->GetItem(CComVariant((short) idx));
Field 번호를 지정해서 가져오는 경우 (short) 로 필드 번호를 기록해 준다. 그렇지 않으면
'800a0bcd', '0x800A0CC1' 등의 예외가 발생한다.
2. 커서 종류를 보고 MoveFirst 를 하자..
Forward only 커서 계통은 MoveNext 만 가능하다.
역시나 이 부분 때문에 예외가 발생한다.
3. VARIANT 에 대한 처리 확실히 하기
확인은 안해 봤지만 아래처럼 과감하게 -_-
1. 현재 레코드의 필드값 가져오기 (서수 번호로)
spRecordset->Fields->GetItem(CComVariant((short) idx));
Field 번호를 지정해서 가져오는 경우 (short) 로 필드 번호를 기록해 준다. 그렇지 않으면
'800a0bcd', '0x800A0CC1' 등의 예외가 발생한다.
2. 커서 종류를 보고 MoveFirst 를 하자..
Forward only 커서 계통은 MoveNext 만 가능하다.
역시나 이 부분 때문에 예외가 발생한다.
3. VARIANT 에 대한 처리 확실히 하기
확인은 안해 봤지만 아래처럼 과감하게 -_-
CString str;
switch(var.vt)
{
case VT_I8:
str.Format(_T("%I64d"), var.llVal);
break;
case VT_I4:
str.Format(_T("%d"), var.lVal);
break;
case VT_UI1:
str.Format(_T("%u"), (UINT)var.bVal);
break;
case VT_I2:
str.Format(_T("%d"), var.iVal);
break;
case VT_R4:
str.Format(_T("%f"), var.fltVal);
break;
case VT_R8:
str.Format(_T("%f"), var.dblVal);
break;
case VT_BOOL:
str.Format(_T("%s"), var.boolVal == VARIANT_TRUE ? _T("true") : _T("false"));
break;
case VT_BSTR:
str = (LPTSTR) (_bstr_t( var.bstrVal));
break;
case VT_DECIMAL: // oracle 의 숫자필드 등에 쓰이더라
str.Format(_T("%s%I64u"),((var.decVal.sign & DECIMAL_NEG) == DECIMAL_NEG) ? _T("-") : _T("") , var.decVal.Lo64);
break;
case VT_DATE: // 날짜 형태는 적절히 변환해서 쓰는게 좋을듯,
str = COleDateTime(var).Format();
break;
}
switch(var.vt)
{
case VT_I8:
str.Format(_T("%I64d"), var.llVal);
break;
case VT_I4:
str.Format(_T("%d"), var.lVal);
break;
case VT_UI1:
str.Format(_T("%u"), (UINT)var.bVal);
break;
case VT_I2:
str.Format(_T("%d"), var.iVal);
break;
case VT_R4:
str.Format(_T("%f"), var.fltVal);
break;
case VT_R8:
str.Format(_T("%f"), var.dblVal);
break;
case VT_BOOL:
str.Format(_T("%s"), var.boolVal == VARIANT_TRUE ? _T("true") : _T("false"));
break;
case VT_BSTR:
str = (LPTSTR) (_bstr_t( var.bstrVal));
break;
case VT_DECIMAL: // oracle 의 숫자필드 등에 쓰이더라
str.Format(_T("%s%I64u"),((var.decVal.sign & DECIMAL_NEG) == DECIMAL_NEG) ? _T("-") : _T("") , var.decVal.Lo64);
break;
case VT_DATE: // 날짜 형태는 적절히 변환해서 쓰는게 좋을듯,
str = COleDateTime(var).Format();
break;
}
반응형