VS2010 mfc 用ado连接access2003,想实现一个输入条件查询的功能,结果显示在一个ListCtrl控件里。调试没有错误,但是运行后点新编辑的按钮就出现错误:“Pump.exe 中的 0x778f15ee 处有未经处理的异常: Microsoft C++ 异常: 内存位置 0x0014c7ec 处的 _com_error。”图在这儿
代码发在下面,在网上查到可能是指针的问题,但是就是不知道哪出问题了,还请大神解答
void CChuxuanDlg::OnClickedChuxuanButton4()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_headg = m_editHeadc * (m_editHight + 5); // 根据输入的排水高度和扬程损失系数计算扬程估算值。
m_listCtrlchuxuan.DeleteAllItems(); // 删除列表控件中已有记录
CString sql = _T("select * from pump where headrange1>m_headg and headrange2<m_headg"); // 根据扬程估算值生成sql语句。
_RecordsetPtr pRecordset = m_database.Select(sql); // 获得查询结果集合
CString record[25];
CString temp;
COleDateTime time;
CString companyname,model,pclass,acidproof=_T("否"),motormodel;
int ID,series,speed;
float head,headrange1,headrange2,singlehead,ratedflow,flowrange1,flowrenge2,shaftpower,shaftpowerrange1,shaftpowerrange2,efficiency,efficiencyrange1,efficiencyrange2,NPSHR,NPSHRrange1,NPSHRrange2,motorpower;
int row = 0;
while (!pRecordset->adoEOF) // 遍历查询结果集合,将每条结果在列表框中显示
{
pRecordset->GetCollect("ID"); // 取出当前记录的ID字段的值。以为ID字段的值是整形类型,所以取lVal属性获得字段值。
ID = pRecordset->GetCollect("ID").lVal;
temp.Format(_T("%d"), ID);
// 往列表框新增一条记录
m_listCtrlchuxuan.InsertItem(row, temp);
pRecordset->GetCollect("companyname"); // 取出当前记录的companyname字段的值。以为companyname字段的值是字符串类型,所以取bstrVal属性获得字段值。
companyname = pRecordset->GetCollect("companyname").bstrVal;
if (companyname == _T("扬子江泵业"))
{
m_listCtrlchuxuan.SetItemText(row, 1, _T("扬子江泵业"));
}
else
{
m_listCtrlchuxuan.SetItemText(row, 1, _T("XX泵业"));
}
pRecordset->GetCollect("model"); // 取出当前记录的model字段的值。以为model字段的值是字符串类型,所以取bstrVal属性获得字段值。
model = pRecordset->GetCollect("model").bstrVal;
m_listCtrlchuxuan.SetItemText(row, 2, model);
pRecordset->GetCollect("pclass"); // 取出当前记录的pclass字段的值。以为pclass字段的值是字符串类型,所以取bstrVal属性获得字段值。
pclass = pRecordset->GetCollect("pclass").bstrVal;
m_listCtrlchuxuan.SetItemText(row, 3, pclass);
pRecordset->GetCollect("head"); // 取出当前记录的head字段的值。以为head字段的值是字符串类型,所以取fltVal属性获得字段值。
head = pRecordset->GetCollect("head").fltVal;
temp.Format(_T("%f"), head);
m_listCtrlchuxuan.SetItemText(row, 4, temp);
.....省略了一部分,结构一样......
pRecordset->GetCollect("motorpower");
motorpower = pRecordset->GetCollect("motorpower").fltVal;
temp.Format(_T("%f"), motorpower);
m_listCtrlchuxuan.SetItemText(row, 23, temp);
pRecordset->GetCollect("motormodel");
motormodel = pRecordset->GetCollect("motormodel").bstrVal;
m_listCtrlchuxuan.SetItemText(row, 24, motormodel);
row++;
pRecordset->MoveNext();
}
}