VC++ ADO查询mysql数据库报错 10
longi;intnItem;//暂时储存ListControl的行号try{m_pRecordset.CreateInstance("ADODB.Recordset")...
long i;
int nItem; //暂时储存ListControl的行号
try
{
m_pRecordset.CreateInstance("ADODB.Recordset");
//m_pRecordset->Open("SELECT * FROM users",_variant_t((IDispatch *)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
_variant_t m_pRecord;
CString strSql="SELECT * FROM `CHARACTER_SETS` ";
m_pConnection->Execute((_bstr_t)strSql,&m_pRecord,adCmdText);
///////////////////////////////////////////
hr = m_pRecordset->get_Fields (&fields); //得到记录集的字段集和
//为了放下查出的数据,把ListControl原来的数据清除了先!
//删除所有记录行
m_LisCtrlResult.DeleteAllItems();
//删除所有列表头
while(m_LisCtrlResult.DeleteColumn(0));
//更新窗口
this->UpdateWindow();
if(SUCCEEDED(hr))
fields->get_Count(&nRstCol); //得到记录集的字段集合中的字段的总个数
for(i = 0; i < nRstCol; i++)
{
fields->Item[i]->get_Name(&bstrColName); //得到记录集中的字段名
strColName[i] = bstrColName;
//////////为列表控件添加字段的名字//////////
m_LisCtrlResult.InsertColumn(i, strColName[i], LVCFMT_LEFT, 70);
}
while(!m_pRecordset->adoEOF)
{
nItem = m_LisCtrlResult.InsertItem(0, NULL); //插入新的一行。把行号放在//了nItem里边。
for(i = 0; i < nRstCol; i++)
{
m_LisCtrlResult.SetItem(nItem, i, 1,_bstr_t s=(_bstr_t)m_pRecordset->GetCollect(strColName[i]); ,NULL, 0, 0, 0); //把读出来的数据项放入ListControl里边
}
m_pRecordset->MoveNext(); //记得使记录指针移动哦
}
////////////////////////////////////////////////
}
catch(_com_error e)///捕捉异常
{
//CString a=e;
//AfxMessageBox(a"Fail to read the database!");///显示错误信息
CString errormessage;
errormessage.Format("Fail to connect the database! \r\n ErroeMessage:%s", e.ErrorMessage);
AfxMessageBox(errormessage); //show the error message
}
初步确定错误在
while(!m_pRecordset->adoEOF)
{
nItem = m_LisCtrlResult.InsertItem(0, NULL); //插入新的一行。把行号放在//了nItem里边。
for(i = 0; i < nRstCol; i++)
{
m_LisCtrlResult.SetItem(nItem, i, 1,_bstr_t s=(_bstr_t)m_pRecordset->GetCollect(strColName[i]); ,NULL, 0, 0, 0); //把读出来的数据项放入ListControl里边
}
m_pRecordset->MoveNext(); //记得使记录指针移动哦
}
编译没错,运行时出错,调用了Catch 展开
int nItem; //暂时储存ListControl的行号
try
{
m_pRecordset.CreateInstance("ADODB.Recordset");
//m_pRecordset->Open("SELECT * FROM users",_variant_t((IDispatch *)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
_variant_t m_pRecord;
CString strSql="SELECT * FROM `CHARACTER_SETS` ";
m_pConnection->Execute((_bstr_t)strSql,&m_pRecord,adCmdText);
///////////////////////////////////////////
hr = m_pRecordset->get_Fields (&fields); //得到记录集的字段集和
//为了放下查出的数据,把ListControl原来的数据清除了先!
//删除所有记录行
m_LisCtrlResult.DeleteAllItems();
//删除所有列表头
while(m_LisCtrlResult.DeleteColumn(0));
//更新窗口
this->UpdateWindow();
if(SUCCEEDED(hr))
fields->get_Count(&nRstCol); //得到记录集的字段集合中的字段的总个数
for(i = 0; i < nRstCol; i++)
{
fields->Item[i]->get_Name(&bstrColName); //得到记录集中的字段名
strColName[i] = bstrColName;
//////////为列表控件添加字段的名字//////////
m_LisCtrlResult.InsertColumn(i, strColName[i], LVCFMT_LEFT, 70);
}
while(!m_pRecordset->adoEOF)
{
nItem = m_LisCtrlResult.InsertItem(0, NULL); //插入新的一行。把行号放在//了nItem里边。
for(i = 0; i < nRstCol; i++)
{
m_LisCtrlResult.SetItem(nItem, i, 1,_bstr_t s=(_bstr_t)m_pRecordset->GetCollect(strColName[i]); ,NULL, 0, 0, 0); //把读出来的数据项放入ListControl里边
}
m_pRecordset->MoveNext(); //记得使记录指针移动哦
}
////////////////////////////////////////////////
}
catch(_com_error e)///捕捉异常
{
//CString a=e;
//AfxMessageBox(a"Fail to read the database!");///显示错误信息
CString errormessage;
errormessage.Format("Fail to connect the database! \r\n ErroeMessage:%s", e.ErrorMessage);
AfxMessageBox(errormessage); //show the error message
}
初步确定错误在
while(!m_pRecordset->adoEOF)
{
nItem = m_LisCtrlResult.InsertItem(0, NULL); //插入新的一行。把行号放在//了nItem里边。
for(i = 0; i < nRstCol; i++)
{
m_LisCtrlResult.SetItem(nItem, i, 1,_bstr_t s=(_bstr_t)m_pRecordset->GetCollect(strColName[i]); ,NULL, 0, 0, 0); //把读出来的数据项放入ListControl里边
}
m_pRecordset->MoveNext(); //记得使记录指针移动哦
}
编译没错,运行时出错,调用了Catch 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询