前几天学了VC——DB部分内容
现在与到以下困难求救.....//还请大家拉兄弟一拔
NUMBER 1 在一个DIALOG上的口令修改窗口RUN OK BUT 老是这个 ”无效的光标状态“
NUMBER 2 怎样把建立的类在VC中 ALL DEL 呢?
NUMBER 3 VC DB 中的CDbvariant varValue 是干什么用的
//QUSTION OVER
现在正直设计.......
还请大虾们出手相祝

解决方案 »

  1.   

    NUMBER1 : ???
    NUMBER2 : FILE VIEW->DELETE .H .CPP
    NUMBER3 : 处理各种类型的类
      

  2.   

    /////////////////////////////
    //number 3
    可以再详细点吗?
      

  3.   

    可以参考一下
    _variant_t 和CDBVARIANT 一样用法
    把_variant_t转为TCHAR* 
    BOOL CrackStrVariant(const _variant_t&  var,TCHAR* pBufferRet)
    {
        TCHAR pBuffer[20480];
        memset(pBuffer,0,sizeof(pBuffer));
    memset(pBufferRet,0,sizeof(pBufferRet));
        switch(var.vt)
    {
            case VT_EMPTY:
            case VT_NULL:
    case VT_DISPATCH:
            case VT_VARIANT:
            case VT_UI4:
            case VT_I1:
            case VT_UI2:
            case VT_SAFEARRAY:
            case VT_UNKNOWN:
            case VT_UINT:
            case VT_VOID:
            case VT_I8:
            case VT_HRESULT:
    case VT_ERROR:
            case VT_INT:
            case VT_PTR:
            case VT_UI8:
    case VT_CARRAY:
            case VT_USERDEFINED:
            case VT_LPWSTR:
            case VT_FILETIME:
            case VT_BLOB:
    case VT_LPSTR:
            case VT_STREAM:
            case VT_STORAGE:
            case VT_STREAMED_OBJECT:
            case VT_STORED_OBJECT:
            case VT_BLOB_OBJECT:
            case VT_CF:
            case VT_CLSID:
                break;
            case VT_I2:
                sprintf(pBuffer,"%hd",V_I2(&var));
                break;
            case VT_I4:
                sprintf(pBuffer,"%d",V_I4(&var));
                break;
            case VT_R4:
                sprintf(pBuffer,"%e",(double)V_R4(&var));
                break;
            case VT_R8:
                sprintf(pBuffer,"%e",V_R8(&var));
                break;
            case VT_CY:
                sprintf(pBuffer,"%s",COleCurrency(var).Format());
                break;
            case VT_DATE:
                sprintf(pBuffer,"%s",COleDateTime(var).Format(_T("%m-%d-%y")));
                break;
            case VT_BSTR:
    strcpy(pBuffer,(char*)V_BSTR( &var ));
    //          strRet = V_BSTR( &var );
                break;
            case VT_BOOL:
                sprintf(pBuffer,"%s", (V_BOOL(&var) ? _T("TRUE") : _T("FALSE")));
            case VT_UI1:
                sprintf(pBuffer,"0x%02hX",(unsigned short)V_UI1(&var));
                break;
    default :
    return FALSE;
        }
    if(sizeof(pBufferRet) < strlen(pBuffer))
    {
    return FALSE;
    }
    memcpy(pBufferRet,pBuffer,strlen(pBufferRet));
        return TRUE;
    }