一、文档视图结构
文档类(CDocument):存储加载(读写)数据
视图类(CView):显示和修改数据
1)单文档
a)文档模板:把框架窗口、文档、视图关联在一起
b)文档类(CDocument):
OnNewDocument(),第一次新建窗口调用,后面每次按“新建”,自动调用此函数
DeleteContents(),做一些释放资源的操作,每次按“新建”,新建前先调用此函数
c)框架类可以认为是视图类的容器
2)各类相关访问
a) 在视图类,如何访问文档对象指针 CView::GetDocument
CDocument* GetDocument() const;
二、文档序列化(二进制操作文件 CArchive) 相当于Qt QDataStream
序列化:以二进制方式写文件
反序列化:以二进制方式读文件
1)写文件
a) 创建文件对象 CFile
b) 以写方式打开文件 CFile::Open
c) 创建序列化对象,并且和文件关联在一起 CArchive
CArchive::store 把数据保存到归档文件中。允许CFile写操作。
d) 往数据流写数据(相当于往文件写数据)
ar << a << b << c
e) 断开数据流和文件的关联 CArchive::Close
f) 关闭文件 CFile::Close
2)读文件
a) 创建文件对象 CFile
b) 以读方式打开文件 CFile::Open
c) 创建序列化对象,并且和文件关联在一起 CArchive
CArchive::load 从归档文件装载数据。CFile只读。
d) 往数流读数据(相当于往文件读数据)
ar >> a >> b >> c
e) 断开数据流和文件的关联 CArchive::Close
f) 关闭文件 CFile::Close
三、文档视图案例
1)文档类自带序列化操作函数 Serialize()
void CMy01_CArchiveDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: 在此添加存储代码、
//按保存按钮时调用
}
else
{
// TODO: 在此添加加载代码
//按打开按钮调用
}
}
2)学生管理系统
a)定义一个学生类Stu
b)文档类存储数据,视图类修改和显示数据
1)从尾部添加元素 CList::AddTail
2)获得此列表尾部元素的位置 CList::GetTailPosition
3)获取上一个元素 CList::GetPrev
4)获取下一个元素 CList::GetNext
5)获取首元素位置 CList::GetHeadPosition
6)获取最后一个元素位置 CList::GetTailPosition
7)获取指定位置的元素 CList::GetAt
8)移除头结点元素(并没有释放空间)CList::RemoveHead
c)视图的基类是 CFormView
d)重写文档类 DeleteContents(),做一些释放资源的操作,每次按“新建”,新建前先调用此函数
四、数据库编程
1)准备工作
a) 安装MySQL服务器
b) MySQL odbc驱动
2)odbc层次图
a) odbc一套标准接口(内部通过sql语句操作数据库,用户就算不懂sql语句也可以借助odbc操作数据库)
b) 数据源
3)如何创建数据源(MySql只能是快照)
a)快照(Snapshot)记录集:每次操作重新查询后才更新
b)动态(Dynaset)记录集:每次操作自动更新(添加记录外)
4)应用程序框架
a) CRecordset的子类,主要是对数据库进行相应操作
1)DoFieldExchange() 自动把数据库的字段和变量相关联
2)GetDefaultConnect() 获取数据库连接信息
3)GetDefaultSQL() 获取数据库连接的表
b) CFormView的子类,显示数据库内容的视图
1)OnInitialUpdate() 主要作初始化功能
5)通过 CRecordset 类对数据库进行相应操作
a) 视图类头文件创建 CRecordset的子类对象
b) 视图类做 增删改查 操作
1)打开数据库 CRecordset::Open
2)查询记录 CRecordset::Requery
3)移动上一个记录集 CRecordset::MovePrev
4)移动下一个记录集 CRecordset::MoveNext
5)是否为最后一个记录的下一个 CRecordset::IsEOF
6)是否为第一个记录的上一个 CRecordset::IsBOF
7)移动到第一个记录 CRecordset::MoveFirst
8)移动到最后一个记录 CRecordset::MoveLast
9)添加空记录 CRecordset::AddNew
10)如果记录集可修改 CRecordset::CanUpdate
11)更新记录集 CRecordset::Update
12)删除当前记录 CRecordset::Delete
13)编辑当前记录 CRecordset::Edit
14)过滤 CRecordset::m_strFilter
15)排序 CRecordset::m_strSort(默认升序,降序加 desc)
c) 注意点
1)移动记录集,注意越界处理
2)更新记录前,先通过 CRecordset::CanUpdate 判断可更新后,才进行更新
3)删除数据后,最好移动到下一个记录集
原文:https://www.cnblogs.com/xiangtingshen/p/10815254.html