您的位置:逆风者 VC++ 正文
 添加时间:2007-09-01 原文发表:2007-08-31 人气:136 来源:vckbase.com

本文章共1799字,分2页,当前第1页,快速翻页:
 
直接通过DAO读写Access文件
作者:徐景周

下载示例源代码

逆风者

直接利用DAO来创建、读写Access文件,总的说来,对比上篇《直接通过ODBC读、写Excel文件》来讲,要简单一些。在下面的示例中,我们将用到两种方法: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文件写入成功!");

	}

	else

		AfxMessageBox("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();

}

 
 
本文章更多内容1 - 2 - 下一页>>
相关文章

在资源文件中加入声音资源
监听以太网(三) Packet32数据结构说明
深入浅出硬盘分区表
在对话框中加入属性页
MFC程序员的WTL指南: Part VIII - 属性页与
如何使用设备描述表
数据库开发之窗体编程
为对话框中的控件增加提示的简单方法
一种另类“关于(About)”对话框的动态显示方
VC学习笔记之一:怎样实现XP风格按钮
轻松实现DES算法查看器
Pure C :.NET 下的泛型编程
MFC程序员的WTL指南: Part IV - 对话框与控
QQ界面的模拟实现(上)
解析CE下浏览器源码
魔法单词记忆——DAO访问ACCESS数据库
系统托盘编程完全指南(二)
自绘菜单的实现
遍历搜索注册表
调试方法和技巧

相关评论


本文章所属分类:首页 VC++

  热门关键字: