直接通过DAO读写Access文件

直接利用DAO来创建、读写Access文件,总的说来,比直接通过ODBC读、写Excel文件来讲,要简单一些。在下面的示例中,我们将用到两种方法:SQL和DAO类函数来混合实现它们,这样做的目地,我想可以使大家更加方便灵活的运用它们来完成你想要做的东西。在示例程序中默认指定创建数据库名为:demo.mdb,内部表名为:demo,写入两个字段:Name和Age,采用和读写Excel类似的操作,你也可以根据自己需要来动态改变它们。
下面让我们来简要看看它的实现步骤:
1. 首先,应确保包含进了afxdao.h头文件,可以在StdAfx.h文件中包含它,如下:
#include "afxdao.h"

2. 声明DAO库及其记录集变量,可在你的实现文件中加入下面代码:

CDaoDatabase db;
CDaoRecordset RecSet(&db);

3. 接着,先让我们来实现它的创建及写入操作

void CIoaccessDlg::OnWrite() 
{
	// TODO: Add your control notification handler code here
	CString sPath;
	GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
	sPath.ReleaseBuffer();
	int nPos;
	nPos=sPath.ReverseFind('\\');
	sPath=sPath.Left(nPos);

	CString lpszFile=sPath+"\\demo.mdb";

	CFileFind fFind;
	BOOL bSuccess;
	bSuccess=fFind.FindFile(lpszFile);

	fFind.Close();
	if (!bSuccess)
	{
		db.Create(lpszFile);
		CString SqlCmd="CREATE TABLE demo (Name VARCHAR(20),Age VARCHAR(3));";
		db.Execute(SqlCmd);
		RecSet.Open(AFX_DAO_USE_DEFAULT_TYPE,
			"SELECT * FROM demo",0);
		db.Execute("INSERT INTO demo (Name,Age) VALUES ('boxer',24)");
		RecSet.AddNew();
		RecSet.SetFieldValue("Name","youngboxer");
		RecSet.SetFieldValue("Age","14");
		RecSet.Update();
		RecSet.AddNew();
		RecSet.SetFieldValue("Name","matureboxer");
		RecSet.SetFieldValue("Age","30");
		RecSet.Update();
		RecSet.Close();
		db.Close();
		AfxMessageBox("access写入成功!");


	}
	else
	{
	db.Open(lpszFile);
		RecSet.Open(dbOpenDynaset,
			"SELECT * FROM demo",0);
	db.Execute("INSERT INTO demo (Name,Age) VALUES ('boxer',24)");
		RecSet.AddNew();
		RecSet.SetFieldValue("Name","youngboxer");
		RecSet.SetFieldValue("Age","14");
		RecSet.Update();
		RecSet.AddNew();
		RecSet.SetFieldValue("Name","matureboxer");
		RecSet.SetFieldValue("Age","30");
		RecSet.Update();
		RecSet.Close();
		db.Close();
		AfxMessageBox("access添加成功!");
	}

}

4. 最后,让我们来实现它的读取操作。

void CIoaccessDlg::OnRead() 
{
	// TODO: Add your control notification handler code here
	COleVariant var;
	var.ChangeType(VT_BSTR,NULL);
	CString strName,strAge,strFile;
	m_ctrList1.ResetContent();
	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);
	RecSet.Open(AFX_DAO_USE_DEFAULT_TYPE,"SELECT * FROM demo",NULL);
	while(!RecSet.IsEOF())
	{
		RecSet.GetFieldValue("Name",var);
		strName=(LPCSTR)var.pbstrVal;
		RecSet.GetFieldValue("Age",var);
		strAge=(LPCSTR)var.pbstrVal;
		m_ctrList1.AddString(strName+"--->"+strAge);
		RecSet.MoveNext();
	}
	RecSet.Close();
	db.Close();
}


你可能感兴趣的:(Visual,C++,6.0,dao,access,path,insert,null,excel)