这个是连接mdb库代码, //初始化com环境
::CoInitialize(NULL); //创建连接对象和记录集对象
HRESULT hr;
try
{
hr = m_pConnection.CreateInstance("ADODB.Connection");//创建Connection对象
if(SUCCEEDED(hr))
{
//  hr = m_pConnection->Open(
//  "Provider=Microsoft.Jet.OLEDB.4.0;Password=123456;Data Source=db.mdb",
//  "","",adModeUnknown);///连接数据库
    hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db.mdb ;Persist Security Info=False;Jet OLEDB:Database Password=123456","","",adModeUnknown); }
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
} m_pRecordset.CreateInstance(__uuidof(Recordset));
在InitInstance()里面实现的.下面是向控件列表中添加数据,也就是从数据库中加载数据.但是不知道那里出错了,获取第一个ID号的时候就出错误了,显示里面有异常没有处理,求高手.帮忙

解决方案 »

  1.   

    //向控件列表中载入已储存数据
    LVITEM lvItem;
    lvItem.mask=LVIF_TEXT;
    int iActive =0;
    int iItem=0;
    while(!pApp->m_pRecordset->adoEOF)
    {
          for (int i=0;i<6;i++)
          {
      if (i==0)
         lvItem.iItem=iItem;
      else
      lvItem.iItem=iActive;
      lvItem.iSubItem=i;
      CString str;
      switch(i)
      {
      case 0://显示ID
      str = (char*)(_bstr_t)pApp->m_pRecordset->GetCollect(_variant_t("雇员编号"));
      break;
      case 1://显示姓名
      str = (char*)(_bstr_t)pApp->m_pRecordset->GetCollect(_variant_t("NAME"));
      break;
      case 3: //显示指位编号
      str = (char*)(_bstr_t)pApp->m_pRecordset->GetCollect(_variant_t("指位编号"));
    //   if (str=="0")
    //       str="左食指";
    //   else if (str=="1")
    //       str="右食指";  
    //   else if(str=="2")
    //   str="左中指";
    //   else 
    //   str="右中指";     
        break;
      case 4://采集次数
      str = (char*)(_bstr_t)pApp->m_pRecordset->GetCollect(_variant_t("采集位置"));
      break;
      case 5://采集时间
      str = (char*)(_bstr_t)pApp->m_pRecordset->GetCollect(_variant_t("TIC"));   }
      lvItem.pszText=str.GetBuffer(0);
      if (i==0)
     iActive = m_ListCtrl.InsertItem(&lvItem);
      else
      m_ListCtrl.SetItem(&lvItem);
          }
      iItem ++;   pApp->m_pRecordset->Close(); }求大侠帮忙,急 急  急!!!
      

  2.   

    //向控件列表中载入已储存数据
    LVITEM lvItem;
    lvItem.mask=LVIF_TEXT;
    int iActive =0;
    int iItem=0;
    while(!pApp->m_pRecordset->adoEOF)
    {
          for (int i=0;i<6;i++)
          {
      if (i==0)
         lvItem.iItem=iItem;
      else
      lvItem.iItem=iActive;
      lvItem.iSubItem=i;
      CString str;
      switch(i)
      {
      case 0://显示ID
      str = (char*)(_bstr_t)pApp->m_pRecordset->GetCollect(_variant_t("雇员编号"));
      break;
      case 1://显示姓名
      str = (char*)(_bstr_t)pApp->m_pRecordset->GetCollect(_variant_t("NAME"));
      break;
      case 3: //显示指位编号
      str = (char*)(_bstr_t)pApp->m_pRecordset->GetCollect(_variant_t("指位编号"));
    //   if (str=="0")
    //       str="左食指";
    //   else if (str=="1")
    //       str="右食指";  
    //   else if(str=="2")
    //   str="左中指";
    //   else 
    //   str="右中指";     
        break;
      case 4://采集次数
      str = (char*)(_bstr_t)pApp->m_pRecordset->GetCollect(_variant_t("采集位置"));
      break;
      case 5://采集时间
      str = (char*)(_bstr_t)pApp->m_pRecordset->GetCollect(_variant_t("TIC"));   }
      lvItem.pszText=str.GetBuffer(0);
      if (i==0)
     iActive = m_ListCtrl.InsertItem(&lvItem);
      else
      m_ListCtrl.SetItem(&lvItem);
          }
      iItem ++;   pApp->m_pRecordset->Close(); }
      

  3.   

    所有的ADO代码都加异常处理。
    异常捕获改成这样会好一点。
    try
    {
    //你的ADO代码
    }
    catch (_com_error& e)
    {
    CString strMsg;
    strMsg.Format(_T("错误描述:%s\n错误消息%s"), 
    (LPCTSTR)e.Description(),
    (LPCTSTR)e.ErrorMessage());
    AfxMessageBox(strMsg);
    }