📄 sy0704.htm
字号:
<html>
<head>
<title>无标题文档</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<p><font color="#0000FF">访问DAO数据库</font></p>
<p>(一)实验目的</p>
<p>使用MFC的DAO类访问由Microsoft Jet数据库管理系统生成的数据库,也即Microsoft Access应用程序生成的数据库。</p>
<p>(二)实验内容</p>
<p>DAO是数据访问对象的简写,它是自动化组件,最初主要用于在VB中操纵Access数据库,MFC对其进行了封装,使其与ODBC的类的使用方法很相象,主要的类有CDaoDatabase和CDaoRecordset,其中许多成员函数和CDatabase和CRecordset类是一样的,所以我们前两个实验中如果把CDatabase换成CDaoDatabase,CRecordset换成CDaoRecordset,将一样可以正常工作。但由于DAO主要针对Access数据库,在对Access数据库进行编程时,功能远比ODBC强大。</p>
<p>(三)实验步骤</p>
<p>1.创建一个SDI应用。</p>
<p>2.在Stdafx.h中加入DAO支持:#include <afxdao.h><br>
</p>
<p>3.使用ClassWizard在View类添加函数OnInitialUpdate(),并加入代码,</p>
<pre> CFileStatus status;
if (CFile::GetStatus("test.mdb",status)) return; //如果文件存在,则返回
//如果不存在,创建数据库
CDaoDatabase d;
d.Create("test.mdb");
//创建Student表,包括id和name两列,其中id是主键
d.Execute("CREATE TABLE Student(id integer NOT NULL,name text(20) NOT NULL,CONSTRAINT PK_Student PRIMARY KEY (id))");
//插入记录
d.Execute("INSERT INTO Student VALUES(1,'Mike')");
d.Execute("INSERT INTO Student VALUES(2,'Jack')");
d.Execute("INSERT INTO Student VALUES(3,'John')");
</pre>
<p>4.在OnDraw中加入代码</p>
<pre> CDaoDatabase d;
d.Open("test.mdb");
CDaoRecordset r(&d);
r.Open(AFX_DAO_USE_DEFAULT_TYPE|dbOpenSnapshot,"SELECT * FROM Student");
TEXTMETRIC tm;
pDC->GetTextMetrics(&tm);
int nLineHeight=tm.tmHeight+tm.tmExternalLeading;
r.MoveFirst(); // fails if recordset is empty
CPoint pText(0,0);
while (!r.IsEOF())
{
CString str;
str.Format("%ld", r.GetFieldValue("id").intVal); //得到id
pDC->TextOut(pText.x, pText.y, str);
str.Format("%s", r.GetFieldValue("name").bstrVal); //得到name
pDC->TextOut(pText.x+100, pText.y, str);
r.MoveNext();
pText.y += nLineHeight;
}
</pre>
<p>5.编译并测试应用程序。 </p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -