终于将数据库和MFC连接上了,费了好大劲,现在想起来是之前用的方法不对,其实也就几行代码。
1)首先我下载了Window office access2007 新建了数据库, 并将其另存为acess2007数据库,取名为shujuku.mdb,里面的表格名字为tiku.并将该文件放在所建立的对话框文件夹下。
2)在所建立的对话框中的StdAfx.h头文件中导入msado15.dll文件,即添加以下代码
#import "C:/Program Files/Common Files/System/ado/msado15.dll" no_namespace /
rename("EOF","adoEOF")rename("BOF","adoBOF")
这段代码在刚放进去时会显示有错误,不要管他 你运行下对发现能够运行成功
3)在主对话框中添加两个变量
_ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordset;
这两个变量的是用来连接和记录数据库的。
4)因为想把数据库中的内容显示在List列表中,所以需要添加list列表控件,并对其关联变量 m_list
5)在***,h中的InitInstance()中初始化COM环境的上面添加 ::CoInitialize(NULL);
在return之前释放:添加 ::CoUninitialize();
6)在***Dlg.cpp中建立ADO连接,需要在public:下添加成员函数 void OnInitADOConn(); void ExitConnect();
然后对这两个函数进行编写,
void AdoAccess::OnInitADOConn()
{
try
{
//创建连接对象实例
m_pConnection.CreateInstance("ADODB.Connection");
//设置连接字符串
CString strConnect="DRIVER={Microsoft Access Driver (*.mdb)};/
uid=;pwd=;DBQ=shujuku.mdb;";
//使用Open方法连接数据库
m_pConnection->Open((_bstr_t)strConnect,"","",adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox("连接数据失败,请检查数据库路径是否正确!");
}
}
void AdoAccess::ExitConnect()
{
if(m_pRecordset!=NULL)
m_pRecordset->Close();
m_pConnection->Close();
}7)接下来就是初始化对话框了 代码如下:
// TODO: 在此添加额外的初始化代码
m_Grid.SetExtendedStyle(LVS_EX_FLATSB
|LVS_EX_FULLROWSELECT
|LVS_EX_HEADERDRAGDROP
|LVS_EX_ONECLICKACTIVATE
|LVS_EX_GRIDLINES);
m_Grid.InsertColumn(0,"问题",LVCFMT_LEFT,160,0);
m_Grid.InsertColumn(1,"答案",LVCFMT_LEFT,110,1);
m_Grid.InsertColumn(2,"ID",LVCFMT_LEFT,110,2);
//连接数据库
OnInitADOConn();
//设置查询字符串
_bstr_t bstrSQL = "select * from tiku order by ID desc";//数据库中表的名称为tiku 这点很重要,当然可以更改为别的名字 只要与你的表名相一致就行
//创建记录集指针对象实例
m_pRecordset.CreateInstance(__uuidof(Recordset));
//打开记录集
m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,
adLockOptimistic,adCmdText);
while(!m_pRecordset->adoEOF)
{
m_Grid.InsertItem(0,"");
m_Grid.SetItemText(0,2,(char*)(_bstr_t)m_pRecordset->GetCollect("ID"));
m_Grid.SetItemText(0,1,(char*)(_bstr_t)m_pRecordset->GetCollect("答案"));
m_Grid.SetItemText(0,0,(char*)(_bstr_t)m_pRecordset->GetCollect("问题"));
//将记录集指针移动到下一条记录
m_pRecordset->MoveNext();
}
//断开数据库连接
ExitConnect();
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
运行一下 就可以看到List 列表内容显示的是数据库中的信息,当然你可以在添加控件对列表中的内容进行删除 修改 添加等操作,这都比较简单了