为什么总是显示“读取数据库失败!”解决办法
为什么总是显示“读取数据库失败!”
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的关键字,把表名换个别的
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的关键字,把表名换个别的