数据库为Access的情况下使用ADO记录集访问数据库并且将数据全部读取到列表控件中显示
代码如下:
void CHMList::OnBnClickedButtoninserch()
{
// TODO: 在此添加控件通知处理程序代码
m_list.DeleteAllItems(); //因为每次点击查询都需要把之前显示的内容给清除
::CoInitialize(NULL);
m_pConnection.CreateInstance(__uuidof(Connection));
try
{
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=UIHisData.mdb","","",adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox("数据库连接失败,确认数据库UIHisData.mdb是否在当前路径下!");
}
CString strSelect;
_variant_t var;
strSelect.Format (" Select * From ClampDataLog WHERE DateTime >= #%s# AND DateTime <= #%s#",StrDate1,StrDate2);
pHandlerRecordset.CreateInstance(__uuidof(Recordset));
try
{
pHandlerRecordset->Open(_variant_t(strSelect),
m_pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
int i = 0;
while(!pHandlerRecordset->adoEOF)
{
var = pHandlerRecordset->GetCollect("PressNum");
if(var.vt != VT_NULL)
str1[i] = (LPCSTR)_bstr_t(var);
var = pHandlerRecordset->GetCollect("DateTime");
if(var.vt != VT_NULL)
str2[i] = (LPCSTR)_bstr_t(var);
var = pHandlerRecordset->GetCollect("TotalDataPresent");
if(var.vt != VT_NULL)
str3[i] = (LPCSTR)_bstr_t(var);
var = pHandlerRecordset->GetCollect("InjectionRodDataSet");
if(var.vt != VT_NULL)
str4[i] = (LPCSTR)_bstr_t(var);
var = pHandlerRecordset->GetCollect("InjectionRodDataPresent");
if(var.vt != VT_NULL)
str5[i] = (LPCSTR)_bstr_t(var);
var = pHandlerRecordset->GetCollect("GateDataSet");
if(var.vt != VT_NULL)
str6[i] = (LPCSTR)_bstr_t(var);
var = pHandlerRecordset->GetCollect("GateDataPresent");
if(var.vt != VT_NULL)
str7[i] = (LPCSTR)_bstr_t(var);
var = pHandlerRecordset->GetCollect("MoldDataSet");
if(var.vt != VT_NULL)
str8[i] = (LPCSTR)_bstr_t(var);
var = pHandlerRecordset->GetCollect("MoldDataPresent");
if(var.vt != VT_NULL)
str9[i] = (LPCSTR)_bstr_t(var);
var = pHandlerRecordset->GetCollect("Temp1DataSet");
if(var.vt != VT_NULL)
str10[i] = (LPCSTR)_bstr_t(var);
var = pHandlerRecordset->GetCollect("Temp1DataPresent");
if(var.vt != VT_NULL)
str11[i] = (LPCSTR)_bstr_t(var);
var = pHandlerRecordset->GetCollect("Temp2DataSet");
if(var.vt != VT_NULL)
str12[i] = (LPCSTR)_bstr_t(var);
var = pHandlerRecordset->GetCollect("Temp2DataPresent");
if(var.vt != VT_NULL)
str13[i] = (LPCSTR)_bstr_t(var);
var = pHandlerRecordset->GetCollect("Temp3DataSet");
if(var.vt != VT_NULL)
str14[i] = (LPCSTR)_bstr_t(var);
var = pHandlerRecordset->GetCollect("Temp3DataPresent");
if(var.vt != VT_NULL)
str15[i] = (LPCSTR)_bstr_t(var);
var = pHandlerRecordset->GetCollect("PortDataSet");
if(var.vt != VT_NULL)
str16[i] = (LPCSTR)_bstr_t(var);
var = pHandlerRecordset->GetCollect("PortDataPresent");
if(var.vt != VT_NULL)
str17[i] = (LPCSTR)_bstr_t(var);
m_list.InsertItem(i,str1[i]);
m_list.SetItemText(i,1,str2[i]);
m_list.SetItemText(i,2,str3[i]);
m_list.SetItemText(i,3,str4[i]);
m_list.SetItemText(i,4,str5[i]);
m_list.SetItemText(i,5,str6[i]);
m_list.SetItemText(i,6,str7[i]);
m_list.SetItemText(i,7,str8[i]);
m_list.SetItemText(i,8,str9[i]);
m_list.SetItemText(i,9,str10[i]);
m_list.SetItemText(i,10,str11[i]);
m_list.SetItemText(i,11,str12[i]);
m_list.SetItemText(i,12,str13[i]);
m_list.SetItemText(i,13,str14[i]);
m_list.SetItemText(i,14,str15[i]);
m_list.SetItemText(i,15,str16[i]);
m_list.SetItemText(i,16,str17[i]);
i++;
pHandlerRecordset->MoveNext();
}
pHandlerRecordset->Close();
pHandlerRecordset.Release();
pHandlerRecordset = NULL;
m_pConnection->Close();
m_pConnection.Release();
::CoUninitialize();
}
重点:
m_list.InsertItem(i,str1[i]); //i表示插入第一行,
m_list.SetItemText(i,1,str2[i]);
使用ADO记录集访问数据库时读取到的数据通常会很多,所以需要存储到字符串数组中,每次读取数据操作创建好的指针只能读取到一条记录,所以需要循环读取,直到读取完毕,所以在显示的时候也一样,需要循环显示,
效果如图所示:
接下来下一篇文章讲解怎么把列表框中的数据导出至Excel或者Txt文档中