while(VARIANT_FALSE == rs->rsEOF)
{
CString strText;
//strText.Format(TEXT("item %d"), z);
//theCtrl.InsertItem(LVIF_TEXT|LVIF_STATE,z,strText,0,LVIS_SELECTED,0,0);
strText.Format(TEXT("item %d"), z); // Insert the item, select every other item.
theCtrl.InsertItem(
LVIF_TEXT|LVIF_STATE, z, strText, 
(z%2)==0 ? LVIS_SELECTED : 0, LVIS_SELECTED,
0, 0); for(int j =0; j<lNumFields; j++)
{
index.lVal = j;
vntFieldValue.bstrVal = NULL;
pFields->get_Item(index, &pField);
pField->get_Value(&vntFieldValue);
MessageBox(CString(vntFieldValue.bstrVal),_T(CString(vntFieldValue.bstrVal))); //CListCtrl* pmyListCtrl = &theCtrl;


//theCtrl.SetItemText(z,j,CString(vntFieldValue.bstrVal));
//strText.Format(TEXT("sub-item %d %d"), z, j);
theCtrl.SetItemText(z, j, _T(CString(vntFieldValue.bstrVal)));
//(j, _T(CString(vntFieldValue.bstrVal)));
//theCtrl.InsertItem(j,_T(CString(vntFieldValue.bstrVal)));
//theCtrl.InsertItem(j,"1"); //SysFreeString(vntFieldValue.bstrVal);
}
rs->MoveNext();
z++;
}这里的一个问题是,如果数据库字段是字符串格式,那么可以显示数据!如果是整数或者别的,那就显示不出来?请问我如何才能解决这个问题?谢谢!另外一个问题是:在用MFC 向导建立 OLE DB 支持的程序时,会有一个对话框出现,让你建立ADO链接,形成连接字符串并且测试连接(这个对话框在C++ BUILDER 中可以用函数调出)。请问我如何在自己的程序中调用这个对话框,并且返回参数?谢谢!

解决方案 »

  1.   

    就是因为这个问题,是否有办法自动判断字段类型,然后显示在listView中呢?或者其他通用的办法?
      

  2.   

    pField->get_Value(&vntFieldValue);
    if(vntFieldValue.vt == VT_BSTR)
    {}
      

  3.   

    Q2:
    #import "C:\Program Files\Common Files\System\ole db\oledb32.dll" 
    参见
    http://expert.csdn.net/Expert/topic/1892/1892707.xml?temp=.8931696
      

  4.   

    那如果我的字段是整型的,我该如何转化,并且输出到listView呢?谢谢!
      

  5.   

    int nLove=1997;
    CString strShenZhen;
    strShenZhen.Format("%d",nLove);strShenZhen=(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("Age");
      

  6.   

    try
    {
    m_pRecordset->AddNew();
    ......
    m_pRecordset->PutCollect("Age",_variant_t((long)nLove));
    ......
    m_pRecordset->Update();
    }
    catch(...)
    {
    //do sth
    }
      

  7.   

    给你例子:
    long Getint()
    {
             _variant_t var;
             //pField->get_Value(&var);
    long value = 0;
    switch (var.vt)
    {
    case VT_BOOL:
    value = var.boolVal;
    break;
    case VT_UI1:
    case VT_I1:
    value = var.bVal;
    break;
    case VT_UI2:
    case VT_I2:
    value = var.iVal;
    break;
    case VT_I4:
    case VT_UI4:
    value = var.lVal;
    break;
    case VT_INT:
    value = var.intVal;
    break;
    case VT_R4:
    value = (long)(var.fltVal + 0.5);
    break;
    case VT_R8:
    value = (long)(var.dblVal + 0.5);
    break;
    case VT_DECIMAL:
    value = (long)var;
    break;
    case VT_CY:
    value = (long)var;
    break;
    case VT_BSTR://字符串
    case VT_LPSTR://字符串
    case VT_LPWSTR://字符串
    value = atol((LPCTSTR)(_bstr_t)var);
    break;
    case VT_NULL:
    case VT_EMPTY:
    value = 0;
    break;
    default:
    TRACE(_T("Warning: 未处理的 _variant_t 类型值; 文件: %s; 行: %d\n"), __FILE__, __LINE__);
    }
    return value;
    }