本帖最后由 红蛋大叔 于 2018-7-19 11:31 编辑
接着之前的MFC编程,在应用时,我们有时需要读写很多数据,这时可能我们可能需要使用MFC对
ACCESS数据库进行编程,具体步骤以及代码如下。
1:在stdafx.h文件中添加如下入口
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
2:初始化COM环境---AfxOleInit()
3:ado封装
class app_ado
{
private:
char *sql_connect_path; //数据库连接路径
char *sql_name; //数据库中数据集名称
public:
_ConnectionPtr m_pConnection; //连接数据库使用
_RecordsetPtr m_pRecordset; //操作数据集使用
public:
app_ado(char *p, char *n)
{
sql_connect_path = p;
sql_name = n;
}
void app_ado_connect(void ); //连接数据库
void app_ado_disconnect(void ); //断开连接
void app_ado_open(void ); //打开数据集
void app_ado_close(void );
};
void app_ado::app_ado_connect(void )
{
m_pConnection.CreateInstance(__uuidof(Connection));
try
{
m_pConnection->Open((_bstr_t)sql_connect_path,"","",adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox("数据库连接失败");
}
}
void app_ado::app_ado_disconnect(void )
{
if(m_pConnection->State)
{
m_pConnection->Close();
}
}
void app_ado::app_ado_open(void )
{
CString str = "SELECT * FROM ";
char p[50];
char *q;
str += sql_name;
app_ado_connect();
m_pRecordset.CreateInstance(__uuidof(Recordset));
try
{
m_pRecordset->Open(str.GetBuffer(0),
m_pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText);
}
catch(_com_error e)
{
AfxMessageBox("数据集打开失败");
}
}
void app_ado::app_ado_close(void )
{
m_pRecordset->Close();
app_ado_disconnect();
}
4:获取mdb文件的路径
//////////////////////////////////////////////////////////////////////////////////
//全局标量
char filepath[256];
CString mdbpath = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=";
char *connect_str;
char *table_name;
////////////////////////////////////////////////////////////////////////////////////
//定义以及初始化都在对话框中
char *p;
//获取应用程序(.exe)路径(在debug文件下)
GetModuleFileName(AfxGetInstanceHandle(),filepath,256);
p = strrchr(filepath, '\\'); //查找\最后出现的位置
*p = 0;
mdbpath += filepath;
mdbpath += "\\RfIdWrite.mdb";
table_name = "data"; //我的数据表名称是"data"
connect_str= mdbpath .GetBuffer(0);
5:操作实例
5.1)遍历数据表
_variant_t var;
CString strName;
app_ado ado(connect_str, table_name); //实例化对象,connect_str指的的是数据库路径,table_name数据库中的数据表名称
ado.app_ado_open();
ado.m_pRecordset->MoveFirst(); //移动到表头
while(!ado.m_pRecordset->adoEOF)
{
var = ado.m_pRecordset->GetCollect("name");
if(var.vt != VT_NULL)
{
strName = (LPCSTR)_bstr_t(var);
}
ado.m_pRecordset->MoveNext();
}
ado.app_ado_close();
5.2)写入数据表
app_ado ado(connect_str, table_name);
ado.app_ado_open();
ado.m_pRecordset->MoveFirst();
ado.m_pRecordset->Move(1); //移动到第一条记录
//ado.m_pRecordset->AddNew(); //从最后位置增加一条记录
ado.m_pRecordset->PutCollect("dt", "123456");
ado.m_pRecordset->PutCollect("name", "okadaf");
ado.m_pRecordset->Update(); //更新数据集
ado.app_ado_close();
5.3)删除数据表中的数据
app_ado ado(connect_str, table_name);
ado.app_ado_open();
ado.m_pRecordset->MoveFirst();
ado.m_pRecordset->Move(1); //移动到第一条记录
ado.m_pRecordset->Delete(adAffectCurrent); //删除当前记录
ado.app_ado_close();
源代码:
https://pan.baidu.com/s/1S4M9l_DTbHgCh2tSZaBB3w
效果图:
|