利用DAO来创建、读写Access文件操作实例

来源:互联网 发布:四川广电电视网络套餐 编辑:程序博客网 时间:2024/04/30 13:35

转自:http://www.newxing.com/Tech/Program/VC/81.html

 

直接利用DAO来创建、读写Access文件。在下面的示例中,我们将用到两种方法:SQL和DAO类函数来混合实现它们,这样做的目地,我想可以使大家更加方便灵活的运用它们来完成你想要做的东西。在示例程序中默认指定创建数据库名为:Demo.mdb,内部表名为:DemoTable,写入两个字段:名字和年龄,采用和上一篇读写Excel类似的操作,你也可以根据自己需要来动态改变它们。示例程序运行界面如下所示:

下面让我们来简要看看它的实现步骤:
1. 首先,应确保包含进了afxdao.h头文件,可以在StdAfx.h文件中包含它,如下:
#include <afxdao.h>         //加入DAO数据库支持
2. 声明DAO库及其记录集变量,可在你的实现文件中加入下面代码
CDaoDatabase db; //数据库CDaoRecordset RecSet(&db); //记录集

3. 接着,先让我们来实现它的创建及写入操作:
void CRWAccessDlg::OnWriteAccess() {//获取主程序所在路径,存在sPath中CString sPath;GetModuleFileName(NULL,sPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH);sPath.ReleaseBuffer ();int nPos;nPos=sPath.ReverseFind ('\\');sPath=sPath.Left (nPos);//默认创建数据名:Demo.mdb,内部表名:DemoTable,表内有二个字段:姓名、年龄CString lpszFile = sPath + "\\Demo.mdb";CFileFind  fFind;BOOL bSuccess;bSuccess=fFind.FindFile(lpszFile);fFind.Close ();    //是否已有创建好的Demo.mdb文件,没有则创建它if(!bSuccess){db.Create(lpszFile);CString SqlCmd = "CREATE TABLE DemoTable(Name VARCHAR(20),Age VARCHAR(3));";db.Execute(SqlCmd);//打开已创建的数据表RecSet.Open(AFX_DAO_USE_DEFAULT_TYPE,"SELECT * FROM DemoTable", 0);//加入第一个记录,用SQL语句db.Execute("INSERT INTO DemoTable (Name,Age) VALUES ('徐景周',26)");//加入第二个记录,用DAO涵数RecSet.AddNew();RecSet.SetFieldValue("Name","徐志慧");RecSet.SetFieldValue("Age","21");RecSet.Update();//加入第三个记录,用DAO涵数RecSet.AddNew();RecSet.SetFieldValue("Name","郭徽");RecSet.SetFieldValue("Age","27");RecSet.Update();//关闭记录集及库RecSet.Close();db.Close();AfxMessageBox("Access文件写入成功!");}elseAfxMessageBox("Demo.mdb数据库已经创建!");}

4. 最后,让我们来实现它的读取操作。
void CRWAccessDlg::OnReadAccess() {COleVariant var;// 字段类型var.ChangeType(VT_BSTR, NULL);CString strName,strAge,strFile; //清空列表框m_AccessList.ResetContent();//获取主程序所在路径,存在sPath中CString sPath;GetModuleFileName(NULL,sPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH);sPath.ReleaseBuffer ();    int nPos;nPos=sPath.ReverseFind (''\\'');sPath=sPath.Left (nPos);strFile = sPath + "\\demo.mdb";db.Open(strFile);// 打开已创建的demo数据库及DamoTable表RecSet.Open(AFX_DAO_USE_DEFAULT_TYPE,"SELECT * FROM DemoTable",NULL);while(!RecSet.IsEOF())// 有没有到表结尾{RecSet.GetFieldValue("Name",var);strName = (LPCSTR)var.pbstrVal;RecSet.GetFieldValue("Age",var);strAge = (LPCSTR)var.pbstrVal;m_AccessList.AddString( strName + " --> "+strAge );RecSet.MoveNext();}//关闭记录集及库RecSet.Close();db.Close();}