为什么总是显示“读取数据库失败!”解决办法

为什么总是显示“读取数据库失败!”
m_pConnection.CreateInstance(__uuidof(Connection));
m_pRecordset.CreateInstance(__uuidof(Recordset));

m_List.InsertColumn(0, "Name ",LVCFMT_LEFT,80);
m_List.InsertColumn(1, "Age ",LVCFMT_LEFT,80);
m_List.InsertColumn(2, "Num ",LVCFMT_LEFT,80);
m_List.InsertColumn(3, "Birthday ",LVCFMT_LEFT,100);

//////////读取数据库中的信息添加到列表控件///////////

try
{
                m_pConnection-> Open( "Provider=Microsoft.Jet.OLEDB.4.0;Data   Source=test3.mdb ",
" ", " ",adModeUnknown);  
CString   str= "SELECT   *   FROM   user ";
                m_pRecordset-> Open(_bstr_t(str),(IDispatch   *)m_pConnection,
adOpenDynamic,adLockOptimistic,adCmdText);

m_pRecordset-> MoveFirst();


while(!m_pRecordset-> adoEOF)
{
_variant_t   varName;  
_variant_t   varAge;  
_variant_t   varNum;  
_variant_t   varBirthday;

varName=m_pRecordset-> GetCollect( "Name ");
varAge=m_pRecordset-> GetCollect( "Age ");
varNum=m_pRecordset-> GetCollect( "Num ");
varBirthday=m_pRecordset-> GetCollect( "Birthday ");

CString   Name=(char   *)_bstr_t(Name);
CString   Age=(char   *)_bstr_t(Age);
CString   Num=(char   *)_bstr_t(Num);
CString   Birthday=(char   *)_bstr_t(Birthday);

Name.TrimRight();
Age.TrimRight();
Num.TrimRight();
Birthday.TrimRight();

                        int   nCount   =   m_List.GetItemCount();  
int     nItem   =   m_List.InsertItem   (nCount,_T( " "));  
m_List.SetItemText   (nItem,0,Name);  
m_List.SetItemText   (nItem,1,Age);  
m_List.SetItemText   (nItem,2,Num);  
m_List.SetItemText   (nItem,3,Birthday);  

m_pRecordset-> MoveNext();
}
}
catch(_com_error   e)///捕捉异常
{
AfxMessageBox( "! ");///显示错误信息
}
连接没有错,运行到m_pConnection-> Open()就直接跳到擦catch()了,到底哪错了啊??

------解决方案--------------------
user是access的关键字,把表名换个别的