BOOL CDlgMain::OnInitDialog() 
{
CDialog::OnInitDialog();

// TODO: Add extra initialization here
m_font1.CreateFont(12, 0,0,0,FW_BOLD, 0,0,0,
DEFAULT_CHARSET, OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS,
DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "宋体");
m_myList.GetHeaderCtrl()->SetFont(&m_font1);
m_myList.SetBkColor(RGB(247,247,255));
m_myList.SetTextColor(RGB(0,0,255));
m_myList.SetTextBkColor(RGB(247,247,255)); m_myList.InsertColumn(0,"人员编号",LVCFMT_LEFT,70);
m_myList.InsertColumn(1,"人员名称",LVCFMT_CENTER,70);
m_myList.InsertColumn(2,"性别",LVCFMT_CENTER,50);
m_myList.InsertColumn(3,"出生日期",LVCFMT_CENTER,80);
m_myList.InsertColumn(4,"所属部门",LVCFMT_CENTER,70);
m_myList.InsertColumn(5,"收入情况",LVCFMT_CENTER,70);
m_myList.InsertColumn(6,"备注",LVCFMT_CENTER,200);  m_ctlRadio.SetCheck(1); List("SELECT * FROM [renli]");  //显示此用户的数据

return TRUE;  // return TRUE unless you set the focus to a control
              // EXCEPTION: OCX Property Pages should return FALSE
}void CDlgMain::List(CString sql)  //将SQL语句查询的结果显示在列表框中
{
m_myList.DeleteAllItems(); 

int nItem=0;
try
{
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
if(!m_pRecordset->adoEOF) //如果记录不为空
{
while(!m_pRecordset->adoEOF)
{
m_myList.SetItemText(0,0,(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("人员编号"));
m_myList.SetItemText(0,1,(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("人员名称"));
m_myList.SetItemText(0,2,(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("性别"));
m_myList.SetItemText(0,3,(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("出生日期"));
m_myList.SetItemText(0,4,(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("所属部门"));
m_myList.SetItemText(0,5,(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("收入情况"));
m_myList.SetItemText(0,6,(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("备注"));
m_pRecordset->MoveNext();
}
}
m_pRecordset->Close();
}
catch (_com_error e)
{
CATCH_ERROR;
return;
}
}为什么执行后无法显示数据库里的数据,到底是哪里的问题啊?

解决方案 »

  1.   

    m_myList.SetItemText(0,0,(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("人员编号"));
    问题多了:首先要添加行,第0列必须用InsertItem函数插入,其它列用SetItemText,所以要改成:
    m_myList.InsertItem(0,(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("人员编号"));
    m_myList.SetItemText(0,1,(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("人员名称"));
    其次:既然是循环,那么你的这些SetItemText都写死了放在第0行,那么自然有问题了。行数必须和循环匹配啊,否则都写在第0行了。
    改成:
    int nIdx = 0;
    while(!m_pRecordset->adoEOF)
    {
    m_myList.InsertItem(nIdx,(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("人员编号"));
    m_myList.SetItemText(nIdx,1,(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("人员名称"));
    m_myList.SetItemText(nIdx,2,(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("性别"));
    m_myList.SetItemText(nIdx,3,(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("出生日期"));
    m_myList.SetItemText(nIdx,4,(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("所属部门"));
    m_myList.SetItemText(nIdx,5,(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("收入情况"));
    m_myList.SetItemText(nIdx,6,(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("备注"));
    m_pRecordset->MoveNext();
    nIdx++;
    }
    }