数据库为Access的情况下使用ADO记录集访问数据库并且将数据全部读取到列表控件中显示

数据库为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文档中

猜你喜欢

转载自blog.csdn.net/weiwei_lol/article/details/109271776