最近的项目经常会与Access数据库打交道,所以在这里进行一下常用技巧的总结。
(1)建立和删除数据库连接
1、初始化OLE函数库
if (!AfxOleInit())
{
AfxMessageBox(IDP_OLE_INIT_FAILED);
return FALSE;
}
AfxEnableControlContainer();
2 、定义数据库连接,连接数据库文件
CAdoConnection m_AdoConnection;
if (m_AdoConnection.IsOpen())//判断数据库连接是否已经打开,如果打开就关闭
m_AdoConnection.Close();
return m_AdoConnection.ConnectAccess(pFileName); //根据文件路径连接数据库
3 关闭数据库连接
if(m_AdoConnection.IsOpen() == TRUE) //判断数据库连接是否已经打开,如果打开,就关闭
m_AdoConnection.Close();
(2)操作数据库
1、 根据SQL语句查询数据库
步骤1:定义ADO记录集对象
//如果数据库连接没有打开,则返回
if(!m_AdoConnection.IsOpen())
{
return false;
}
//定义一个ADO记录集对象,用数据库连接指针作为构造函数参数
CAdoRecordSet m_AdoRecordset(&m_AdoConnection);
步骤2:定义SQL语句,用记录集对象进行查询,循环该记录集的所有记录,得到记录集中每条记录的每个字段值
//定义SQL语句
CString strSQL;
strSQL.Format("SELECT * FROM TABLE_NAME WHERE FILED_NAME = %lf", (double)value);
//用SQL语句查询,得到记录集
if(m_AdoRecordset.Open(strSQL))
{
//移动到第一条记录
m_AdoRecordset.MoveFirst();
//循环得到所有的记录
while(!m_AdoRecordset.IsEOF())
{
//循环得到所有的记录,第一个参数为字段名,第二个是接收该字段内容的变量
m_AdoRecordset.GetCollect("Caption", strCaption);
//如果一个字段存储的是较大的数据,如一幅图像,则用到GetChunk函数
lSize = m_AdoRecordset.GetFieldActualSize("Data");//得到字段内容大小,以字节为单位
if(lSize > 0)
{
char *pbuf = new char[lSize];
m_AdoRecordset.GetChunk("Data", (LPVOID)pbuf);
//将得到的数据写入磁盘
CFile file;
if(file.Open(strFile, CFile::modeWrite | CFile::modeCreate | CFile::typeBinary))
{
file.Write(pbuf, lSize);
file.Close();
}
delete[] pbuf;
}
//移动到下一条记录
m_AdoRecordset.MoveNext();
}
//关闭记录集
m_AdoRecordset.Close();
}
步骤3:关闭记录集
注意:当字段的类型为日期/时间时,用COleDateTime类型变量接收;要接收图像数据,将字段类型设置为OLE类型对象
2 、向数据库添加数据内容
步骤1:用数据集对象打开SQL语句
CString strSQL;
strSQL.Format("SELECT * FROM TABLE_NAME ");
pAdoRecordset->Open(strSQL);
步骤2:打开添加标识
pAdoRecordset->AddNew()
步骤3:为每个字段赋值
pAdoRecordset->PutCollect("DATE", date);
如果是二进制的数据要录入数据库:
m_AdoRecordset.AppendChunk("Data", strFile); //strFile是文件路径
步骤4:更新记录集
pAdoRecordset->Update()
步骤5:更新完后,关闭记录集
pAdoRecordset->Close();
4 常用的函数
得到记录集中记录数:
m_AdoRecordset.GetRecordCount()