MFC数据库编程及其应用.ppt

上传人:w****2 文档编号:17007034 上传时间:2020-11-06 格式:PPT 页数:9 大小:300.50KB
返回 下载 相关 举报
MFC数据库编程及其应用.ppt_第1页
第1页 / 共9页
MFC数据库编程及其应用.ppt_第2页
第2页 / 共9页
MFC数据库编程及其应用.ppt_第3页
第3页 / 共9页
点击查看更多>>
资源描述
2010年 10月 重庆理工大学计算机科学与工程学院计 算机科学与技术系刘恒洋 共 10页第 1页 第 7章 MFC数据库编程及其应用 重点 1.数据库系统和 ODBC 2.CRecordSet的应用 3.示例系统中数据库操作类的设计 2010年 10月 重庆理工大学计算机科学与工程学院计 算机科学与技术系刘恒洋 共 10页第 2页 7.1 数据库系统的基本概念 数据库系统由数据库、数据库管理系统和数据库应用系 统 3部分组成,如右图: 数据库是数据的集合,由一个或多个表组成,一般将表 中的一行称作记录 (record)或行 (row),将表的列称作字 段 (field)或列 (column); 数据库应用程序是在数据库管理系统 (DBMS)的支持下对数据库中的数据进 行加工、处理的程序, MFC提供了两种支持: ODBC和 DAO。 数据库系统的组成 数据库管理系统是一套程序,用来定义、管理和处理数据库与应用程序之间的联系, 例如, FoxPro、 Access等; 不同的数据库在实现它的数据库管理系统时都有一些不同的特性,因而使得用某个数 据库管理系统开发的数据库应用系统无法在其他数据库管理系统上使用; 为了使一个数据库应用系统能够适用于所有的数据库管理系统,人们在数据库应用系 统和数据库管理系统之间增加了一个符合某种规范的标准接口,从而使得按照标准接 口设计的数据库应用系统可以访问所有支持标准接口的数据库管理系统。常用的标准 接口有 ODBC、 DAO、 JDBC等,他们之间的关系如图所示: SQL(Structured Query Language,结构化查询语言 )最早由 IBM提出,是专门用来处 理关系数据库的基于文本的语言。 SQL向数据库提供了完善而一致的接口,它不是独立 的计算机语言,需要 DBMS的支持才能执行。 SQL是一种标准的数据库语言,目前大多数 DBMS都支持它。 2010年 10月 重庆理工大学计算机科学与工程学院计 算机科学与技术系刘恒洋 共 10页第 3页 7.2 ODBC基本概念 ODBC是微软公司开放服务结构中有关数据库的一个组成部分,它建立了 一组规范,并提供了一组对数据库访问的标准 API。这些 API利用 SQL来 完成大部分任务, ODBC本身也提供了对 SQL语言的支持,用户可以直接 将 SQL语句送给 ODBC; 基于 ODBC的应用程序对数据库的操作不依赖于任何 DBMS,不直接与 DBMS 打交道,所有的数据库操作由对应 DBMS的 ODBC驱动程序完成,一个完整 的 ODBC由下列几个部件组成; 应用程序: ODBC管理器:管理安装的 ODBC驱动程序和管理数据源; 驱动程序管理器:包含在 ODBC32.DLL中,任务是管理 ODBC驱动程序; ODBC API:给数据库应用程序提供访问数据库的接口函数; ODBC驱动程序:一些 DLL,提供了 ODBC和数据库之间的接口; 数据源:包含数据库位置和数据库类型的信息。 在 ODBC中, ODBC API不能直接访问数据库,必须通过驱动程序管理器与 数据库交换信息。驱动程序管理器负责将应用程序对 ODBC API的调用传 递给正确的驱动程序,而驱动程序在执行完相应的操作后,将结果通过 驱动程序管理器返回给应用程序。 ODBC部件关系图 2010年 10月 重庆理工大学计算机科学与工程学院计 算机科学与技术系刘恒洋 共 10页第 4页 7.3 MFC的 ODBC类简介 MFC的 ODBC类主要包括有以下几个: CDatabase类:负责建立与数据源的连接; CRecordset类: 该类的一个对象代表从数据源选择的一组记录 (记录集); CRecordView类:提供了一个表单视图与某个记录集直接相连,利 用对话框数据交换机制 (DDX)在记录集与表单视图的控件之间传输数 据; CFieldExchange类:支持记录字段数据交换 (DFX),即记录集字段数 据成员与相应的数据库表的字段之间的数据交换; CDBException类:代表 ODBC产生的异常。 概括地讲, CDatabase针对某个数据库,它负责连接数据源; CRecordset针对数据源中的记录集,它负责对记录的操作; CRecordView负责界面; CFieldExchange负责 CRecordset与 数据源的数据交换。 2010年 10月 重庆理工大学计算机科学与工程学院计 算机科学与技术系刘恒洋 共 10页第 5页 先构造一个 CDatabase对象,然后调用 Open成员函数: lpszDSN:数据源名,也可以在 lpszConnect参数中包括数据源名,此时 lpszDSN必须为 NULL,若两处均未提供数据源名,则会显示一个数据源对话 框,用户可以在该对话框中选择一个数据源; 参数 bExclusive:说明是否独占数据源; 参数 bReadOnly: True则对数据源的连接是只读的,否则为可读写的; 参数 lpszConnect:指定了一个连接字符串。该串中可以包括数据源名、用 户账号和口令等信息,字符串中的 ODBC表示要连接到一个 ODBC数据源上; 参数 bUseCursorLib:若为 True,则会装载光标库,否则不装载。快照需要 光标库,动态集不需要光标库; 若连接成功,函数返回 True,否则返回 False,若函数内部出现错误,则会 产生一个异常。 一些其它的有用成员函数: virtual BOOL Open(LPCTSTR lpszDSN, BOOL bExclusive = FALSE, BOOL bReadOnly = FALSE, LPCTSTR lpszConnect = ODBC;, BOOL bUseCursorLib = TRUE);throw (CDBException, CMemoryException); CDatabase m_db;/在文档类中嵌入一个 CDatabase对象 m_db.Open(Student Registration); /连接到一个名为 Student Registration的数据源 m_db.Open(NULL,FALSE,FALSE,ODBC;DSN=Student Registration;UID = ZYF;PWD = 1234); /在连接数据源的同时指定了用户账号和口令 m_db.Open(NULL);/将弹出一个数据源对话框 virtual void Close();/断开与数据库的连接, CDatabase的析构函数中同样会自动调用该 函数 BOOL IsOpen() const;/返回 True则表明当前有一个连接 const CString/获取当前的连接字符串 7.3.1 CDatabase类 2010年 10月 重庆理工大学计算机科学与工程学院计 算机科学与技术系刘恒洋 共 10页第 6页 1. 动态集、快照、光标和光标库 共享数据的一个主要问题就是如何协调各个用户对数据源的修改,在 MFC中这取决于用户采用哪种记录集来处理; 记录集主要分为快照 (Snapshot)和动态集 (Dynaset)两种: 快照型记录集提供了对数据的静态视,当其他用户改变了记录时 (包括修改、 添加和删除 ),快照中的记录不受影响; 动态集提供了数据的动态视,当其他用户修改或删除了记录集中的记录时, 会在动态集中反映出来。 在记录集中滚动,需要有一个标志来指明滚动后的位置。 ODBC驱动程序 会维护一个光标,用来跟踪记录集的当前记录; 光标库是处于 ODBC驱动程序管理器和驱动程序之间的动态链接库。光标 库的主要功能是支持快照以及为底层驱动程序提供双向滚动能力。光标 库管理快照记录的缓冲区,该缓冲区反映本程序对记录的修改和删除, 但不反映其他用户对记录的改变,由此可见,快照实际上相当于当前的 光标库缓冲区; 与快照不同,动态集不用光标库维持的缓冲区来存放记录。 7.3.2 CRecordSet类 2010年 10月 重庆理工大学计算机科学与工程学院计 算机科学与技术系刘恒洋 共 10页第 7页 2. SQL查询 记录集的建立实际上是一个查询过程, SQL的 SELECT语句用来查询数据 源。在建立记录集时, CRecordset会根据参数构造一个 SELECT语句来查 询数据源,并用查询的结果创建记录集, SELECT语句的句法如下: 如果列名或表名中包含有空格,则必须用方括号把该名称括起来; SELECT field-list FROM table-name WHERE m_strFilter ORDER BY m_strSort 3. 记录集的建立和关闭 要建立记录集,首先要构造一个 CRecordset派生类对象,然后调用 Open 成员函数查询数据源中的记录来建立记录集 CRecordset(CDatabase* pDatabase = NULL); virtual CString GetDefaultConnect(); virtual BOOL Open(UINT nOpenType = AFX_DB_USE_DEFAULT_TYPE, LPCTSTR lpszSQL = NULL, DWORD dwOptions = none);throw(CDBException, CMemoryException); BOOL CanRestart() const;/若支持 Requery则返回 True BOOL IsOpen() const;/若记录集已建立则返回 True 2010年 10月 重庆理工大学计算机科学与工程学院计 算机科学与技术系刘恒洋 共 10页第 8页 4. 滚动记录 CRecordset提供了以下所示几个成员函数用来在记录集中滚动: void MoveNext();/前进一个记录 void MovePrev();/后退一个记录 void MoveFirst();/滚动到记录集中的第一个记录 void MoveLast();/滚动到记录集中的最后一个记录 void SetAbsolutePosition(long nRows);/滚动到绝对位置 virtual void Move(long nRows, WORD wFetchType = SQL_FETCH_RELATIVE); BOOL IsEOF() const; BOOL IsBOF() const; long GetRecordCount( ) const; 5. 修改、添加和删除记录 通过向 CDatabase对象的 ExecuteSQL成员函数传递 SQL语句的方法达到修 改、添加和删除数据库数据的目的 void ExecuteSQL(LPCSTR lpszSQL); throw(CDBException); 2010年 10月 重庆理工大学计算机科学与工程学院计 算机科学与技术系刘恒洋 共 10页第 9页 7.4 实例系统中数据库操作类的设计 参见实验。
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!