Quando o banco de dados é Access, use o conjunto de registros ADO para acessar o banco de dados e ler todos os dados para o controle de lista para exibição
código mostrado abaixo:
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();
}
Importante:
m_list.InsertItem (i, str1 [i]); // i significa inserir a primeira linha,
m_list.SetItemText (i, 1, str2 [i]);
Ao usar o conjunto de registros ADO para acessar o banco de dados, geralmente há uma grande quantidade de dados lidos, portanto, eles precisam ser armazenados em uma matriz de string. O ponteiro criado por cada operação de leitura de dados pode ler apenas um registro, por isso precisa ser lido em um loop até A leitura está concluída, por isso é a mesma ao exibir, precisa ser exibida em um loop
O efeito é mostrado na figura: o
próximo artigo explica como exportar os dados da caixa de listagem para arquivos Excel ou Txt