先上代码:::SendMessage(m_list.m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE,LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT);
m_list.InsertColumn(0,"配方号",LVCFMT_LEFT,60);
m_list.InsertColumn(1,"批次",LVCFMT_LEFT,60);
m_list.InsertColumn(2,"料名",LVCFMT_LEFT,60); int nItem;
_variant_t vPFH,vPC,vLM,RecordAffected;
try
{
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset=theApp.m_pConnection->Execute("select * from d_sczk",&RecordAffected,adCmdText);
m_bSuccess = TRUE;
while(!m_pRecordset->adoEOF)
{
vPFH = m_pRecordset->GetCollect("pfh");
vPC = m_pRecordset->GetCollect("pc");
vLM = m_pRecordset->GetCollect("lm");
nItem=m_list.InsertItem(0xffff,(_bstr_t)vPFH);
m_list.SetItem(nItem,1,1,(_bstr_t)vPC,NULL,0,0,0);
m_list.SetItem(nItem,2,1,(_bstr_t)vLM,NULL,0,0,0); m_pRecordset->MoveNext();
}
}
catch(_com_error e)///捕捉异常
{
AfxMessageBox("读取数据库失败!");///显示错误信息
}
我用的VC6.0,工程为MFC基于对话框的,对话框上只有一个列表控件(m_list)已成功连接SQL server 2005数据库,但是程序报错“读取数据库失败”,请高手指点

解决方案 »

  1.   

    错误提示改一下就知道什么原因了,
    catch(_com_error &e)///捕捉异常
    {
    AfxMessageBox(e.Description());
    //AfxMessageBox("读取数据库失败!");///显示错误信息
    }
      

  2.   

    m_pRecordset.CreateInstance("ADODB.Recordset");
    改成
    HRESULT hr = m_pRecordset.CreateInstance(__uuidof(ADODB::Recordset));
    if (FAILED(hr))
    {
    _com_error e(hr);
    AfxMessageBox(e.ErrorMessage());
    return;
    }
      

  3.   

    是数据库的问题还是你ListCtrl的问题?感觉你m_list的写法有问题
      

  4.   

    m_pConnection也做类似处理,m_pConnection执行Excute的时候应该没有初始化好,还是NULL值。
      

  5.   

    建议找个ADO封装类省去万能变量折腾来折腾去
      

  6.   


    CADOConn m_adoconn;
    m_adoconn.OnInitADOConn();
    m_list.SetExtendedStyle(LVS_EX_FLATSB
    | LVS_EX_FULLROWSELECT
    | LVS_EX_HEADERDRAGDROP
    | LVS_EX_ONECLICKACTIVATE
    | LVS_EX_GRIDLINES);
    //::SendMessage(m_list.m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE,LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT);
    m_list.InsertColumn(0,"配方号",LVCFMT_LEFT,60);
    m_list.InsertColumn(1,"批次",LVCFMT_LEFT,60);
    m_list.InsertColumn(2,"料名",LVCFMT_LEFT,60);
    CString sql="select * from d_sczk";
    m_pRecordset=m_adoconn.GetRecordSet((_bstr_t(sql)));
    while(!m_pRecordset->adoEOF)
    {
    m_list.InsertItem(0,"");
    m_list.SetItemText(0,0,(char*)(_bstr_t)m_pRecordset->GetCollect("pfh"));
    m_list.SetItemText(0,1,(char*)(_bstr_t)m_pRecordset->GetCollect("pc"));
    m_list.SetItemText(0,2,(char*)(_bstr_t)m_pRecordset->GetCollect("lm")); m_pRecordset->MoveNext();
    }
    m_pRecordset->Close();
    我现在用CADOConn这个封装类去读取数据库,现在又出现问题了,两列可以正常显示数据,但是加上“料名”这一列程序就报错了,就是说加上红色的两句代码就出错,请问setitemtext这个函数参数怎么设置?
      

  7.   

    lm列值是否为NULL,如果为NULL,这样就会出错.转换成_bstr_t 要先判断一下.