用ClistCtrl调用Access数据库时,编译之后提示:连接数据库表失败,IDispatch error :3127解决办法

用ClistCtrl调用Access数据库时,编译之后提示:连接数据库表失败,IDispatch error :#3127
在用vc++6.0MFC编写程序实现CListCtrl控件调用Access数据库中的数据时,编译时没有错误,运行之后提示错误:连接数据库表失败,IDispatch error:#3127
具体的操作步骤如下所示:
(1)创建基于对话框的应用程序AdoList。
(2)加入List Control控件,设置属性如下:
ID值为IDC_LIST1
View列表选Report
Single selection 选中(限制列表项单选)
(3)在StdAfx.h文件加入下面命令:
#import"C:\Program Files\Common Files\System\ado\msado15.dll"no_namespace rename("EOF","adoEOF")
(4)使用类向导为IDC_LIST1列表视控件绑定控件型变量m_list
(5)在CadoListDlg类添加下面三个成员变量
   _ConnectionPtr m_pConnection;
   _RecordsetPtr m_pRecordset;
(6)在BOOL CAdoListDlg::OnInitDialog()窗口初始化函数中加入下面命令:
// TODO: Add extra initialization here
CoInitialize(NULL);
try
{
HRESULT hr;
m_pConnection.CreateInstance("ADODB.Connection");   
hr=m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=stu1.mdb","","",adModeUnknown);
}
catch(_com_error e)
{
CString errormessage;
errormessage.Format("连接数据库失败!\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);
}
  
try
{
   m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pRecordset->Open("SELECT * FROM student",m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
}
catch(_com_error e)
{
CString errormessage;
errormessage.Format("连接数据库表失败!\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);
}

m_list.SetExtendedStyle(LVS_EX_FLATSB
|LVS_EX_FULLROWSELECT//点击一项时,整行都为选中状态
|LVS_EX_GRIDLINES); //设置网格线
  m_list.InsertColumn(0,"学号",LVCFMT_LEFT,80);
  m_list.InsertColumn(1,"姓名",LVCFMT_LEFT,50);
  m_list.InsertColumn(2,"年龄",LVCFMT_RIGHT,36);
disp();  //显示数据库数据记录
return TRUE;  // return TRUE  unless you set the focus to a control
(7)在CAdoListDlg类添加下面成员函数disp()(并在类定义中声明)显示数据库记录:
void CAdoListDlg::disp()
{ m_list.DeleteAllItems();
int i=0;
m_pRecordset->MoveFirst();
while(!m_pRecordset->adoEOF)//adoEOF是末尾标识
{ _variant_t  theValue;
CString id,name,age;
theValue=m_pRecordset->GetCollect("StuID"); //获取学号
if(theValue.vt!=VT_NULL)
id=(char*)_bstr_t(theValue);        
theValue=m_pRecordset->GetCollect("StuName");//获取姓名
if(theValue.vt!=VT_NULL)
name=(char *)_bstr_t(theValue);        
theValue=m_pRecordset->GetCollect("age");//获取年龄
if(theValue.vt!=VT_NULL)
age.Format("%d",theValue.iVal);          
m_list.InsertItem(i,"");
m_list.SetItemText(i,0,id);
m_list.SetItemText(i,1,name);
m_list.SetItemText(i,2,age);
m_pRecordset->MoveNext();//移动到下一行(记录)
i++;
}
}
(8)使用类向导重载CAdoListDlg类WM_DESTROY消息处理函数:
void CAdoListDlg::OnDestroy() 
{ CDialog::OnDestroy();
m_pRecordset->Close();  //关闭记录集
m_pConnection->Close(); //关闭连接
CoUninitialize();    //关闭com环境
}
(9)将准备好的数据库stu1.mdb文件复制到项目工作区文件夹,编译连接,

各位大神走过路过看一看撒~小女子感激不尽~
------解决方案--------------------
ole初始化了吗?


if(!AfxOleInit())
{
AfxMessageBox("初始化OLE DLL失败!");
return FALSE;
}

------解决方案--------------------
下断点,一步一步调试看是那句代码引起的错误。