MFC数据库编程及其应用.ppt_第1页
MFC数据库编程及其应用.ppt_第2页
MFC数据库编程及其应用.ppt_第3页
MFC数据库编程及其应用.ppt_第4页
MFC数据库编程及其应用.ppt_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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 G

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论