具体步骤如下:
首先新建一个基于对话框的工程,在对话框CConnectDatabaseDialog中添加按钮:IDC_ScoreSequery,Caption:导入表,双击"导入表"按钮,添加成员函数void CConnectDatabaseDlg::OnScoreSequery(),然后添加List Control控件,Ctrl+W进入MFC ClassWizard,打开Member Variables,选中IDC_LIST1,点击Add Variable添加m_list。变量m_list。
1、在FileView视图下,打开StdAfx.h头文件,添加如下语句连接数据库:
#import "C:/Program Files/Common Files/System/ado/msado15.dll" no_namespace rename("EOF","adoEOF")
2、选择ClassView视图,在CConnectDatabaseApp.h中CConnectDatabase类中添加
public:
BOOL ADOConnection();
public:
_ConnectionPtr m_pConnection;
3、在InitInstance()中添加:
if(!AfxOleInit())
{
AfxMessageBox("OLE初始化出错!");
return FALSE;
}
if(FALSE==ADOConnection())
return FALSE;
4、在ConnectDatabase.cpp文件中添加
BOOL CConnectDatabaseApp::ADOConnection()//连接SQL数据库
{
::CoInitialize(NULL);//初始化COM 也可将此语句放在InitInstance()函数中
HRESULT hr=m_pConnection.CreateInstance("ADODB.Connection");
if(SUCCEEDED(hr))
{
try
{
// 打开本地数据库
//m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Data.mdb;Jet OLEDB:DatabasePassword=","","",adModeUnknown);
//if(driver=="SQL Server")
//{
CString connectstr="driver={SQL Server};Server=127.0.0.1;DATABASE=data;UID=sa;PWD=1;";
m_pConnection->Open((_bstr_t)connectstr,"","",adModeUnknown);
//}
// else//打开access数据库
//{
//CString connectstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+database+";JetOLEDB:Database Password=";
//m_pConnection->Open((_bstr_t)connectstr,"","",adModeUnknown);
// }
return true;
}
catch(_com_error e)//COM错误取得,当执行COM功能的时候,如果出错,可以捕捉到_com_error的异常
{
AfxMessageBox(e.Description());
long errCode=e.WCode();
if(3127==errCode) AfxMessageBox("表不存在!");
else if(3092==errCode) AfxMessageBox("表已经存在!");
//m_pRecordset.Release();
return FALSE;
}
}
CoUninitialize(); //也可添加ExitInstance()函数,将此语句放在ExitInstance()函数中
return true;
}
5、在CTestDlg类里的OnInitDialog函数中添加初始化listctrol语句:
//init listctrol
m_list.SetRedraw(FALSE);
m_list.ModifyStyle (0,LVS_REPORT);
m_list.ModifyStyle (LVS_EDITLABELS,0);//禁止修改列标题
m_list.SetExtendedStyle (LVS_EX_FULLROWSELECT|LVS_EX_ONECLICKACTIVATE|LVS_EX_INFOTIP|LVS_EX_SUBITEMIMAGES|LVS_EX_GRIDLINES);
m_list.InsertColumn (0,"学号",LVCFMT_LEFT,100);
m_list.InsertColumn (1,"姓名",LVCFMT_LEFT,100);
m_list.InsertColumn (2,"专业班级",LVCFMT_LEFT,200);
m_list.InsertColumn (3,"生产线",LVCFMT_LEFT,100);
m_list.InsertColumn (4,"子系统",LVCFMT_LEFT,100);
m_list.InsertColumn (5,"任务/设备号",LVCFMT_LEFT,100);
m_list.InsertColumn (6,"分数",LVCFMT_LEFT,100);
m_list.InsertColumn(7,"考试时间",LVCFMT_LEFT,100);
m_list.SetRedraw(TRUE);//listctrl内容进行大数据量更新时,避免闪烁
m_list.Invalidate();
m_list.UpdateWindow();
6、在void CConnectDatabaseDlg::OnScoreSequery()函数中添加:
CConnectDatabaseApp *app = (CConnectDatabaseApp *)AfxGetApp();
_RecordsetPtr m_pRecordset;
CString strSQL,strStuNo,strStuName,strStuDeptClass,strProLine,strSubSys,
strTaskNo,strScore,strTestDate;
int recordcount;
char s[2];
int nIndex,sel=0,flag=0;
UpdateData(TRUE);
m_list.DeleteAllItems();
ASSERT(m_list.GetItemCount() == 0);
try
{
strSQL = "select * from t_scoreInfo ";
strSQL += "order by sNo DESC";
if (FAILED(m_pRecordset.CreateInstance("ADODB.Recordset")))
{
MessageBox("创建数据库实例失败!","+系统警告",MB_OK|MB_ICONSTOP);
return;
}
_variant_t varSQL(strSQL);
if(FAILED(m_pRecordset->Open(varSQL,(app->m_pConnection).GetInterfacePtr(),adOpenStatic,adLockOptimistic,adCmdText)))
{
MessageBox("开启数据表失败!","系统警告",MB_OK|MB_ICONSTOP);
m_pRecordset.Release();
return;
}
recordcount=m_pRecordset->GetRecordCount();//Get records total.
if(recordcount)
{
while(!m_pRecordset->adoEOF)
{
strStuNo.Format((_bstr_t)m_pRecordset->GetCollect("sNo"));
strStuName.Format((_bstr_t)m_pRecordset->GetCollect("sName"));
strStuDeptClass.Format((_bstr_t)m_pRecordset->GetCollect("sDeptClass"));
strProLine.Format((_bstr_t)m_pRecordset->GetCollect("sProLine"));
strSubSys.Format((_bstr_t)m_pRecordset->GetCollect("sSubSys"));
strTaskNo.Format((_bstr_t)m_pRecordset->GetCollect("sTaskNo"));
strScore.Format((_bstr_t)m_pRecordset->GetCollect("sScore"));
strTestDate.Format((_bstr_t)m_pRecordset->GetCollect("sTestDate"));
//insert to list
m_list.SetRedraw(FALSE);
itoa(m_list.GetItemCount()+1,s,10);
nIndex=m_list.InsertItem(0,s);//插入行
m_list.SetItemText(nIndex, 0, strStuNo);
m_list.SetItemText(nIndex, 1, strStuName);
m_list.SetItemText(nIndex, 2, strStuDeptClass);
m_list.SetItemText(nIndex, 3, strProLine);
m_list.SetItemText(nIndex, 4, strSubSys);
m_list.SetItemText(nIndex, 5, strTaskNo);
m_list.SetItemText(nIndex, 6, strScore);
m_list.SetItemText(nIndex, 7, strTestDate);
m_list.EnsureVisible(nIndex++, FALSE);//使listctrl中一项可见,即滚动滚动条
m_list.SetRedraw(TRUE);//listctrl内容进行大数据量更新时,避免闪烁
m_list.Invalidate();
m_list.UpdateWindow();
m_pRecordset->MoveNext();
}//while(!m_pRecordset->adoEOF)
}//if(recordcount!=0)
else
{
MessageBox("没有任何匹配的记录!","系统提示",MB_OK|MB_ICONEXCLAMATION);
return;
}
m_pRecordset.Release();
}
catch(const _com_error e)
{
AfxMessageBox(e.Description());
long errCode=e.WCode();
if(3127==errCode)
MessageBox("表不存在!","系统警告",MB_OK|MB_ICONSTOP);
else if(3092==errCode)
MessageBox("表已经存在!","系统警告",MB_OK|MB_ICONSTOP);
m_pRecordset.Release();
return;
}