在VC++中使用Access数据库的技巧

最近的项目经常会与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()
 

猜你喜欢

转载自blog.csdn.net/stonylhy2011/article/details/6673972
今日推荐