清华版第14章数据库编程.ppt
《清华版第14章数据库编程.ppt》由会员分享,可在线阅读,更多相关《清华版第14章数据库编程.ppt(95页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第14章章 数据库编程数据库编程14.1 ODBC的基本概念的基本概念 14.2 MFC的的ODBC类类 14.3 创建一个创建一个ODBC数据源的数据库管理程序数据源的数据库管理程序实例实例 14.4 深入理解深入理解CRecordset类类 14.5 几个有用的函数几个有用的函数14.6 增加程序的功能增加程序的功能 14.7 DAO简介简介 14.8 小结小结 习题习题MFC提供了对数据库编程的强大支持。对于数据库提供了对数据库编程的强大支持。对于数据库的访问,的访问,MFC提供了两组类:提供了两组类:ODBC(open database connectivity)和和DAO(data
2、base access object)。利用这利用这两个功能强大的类,用户可以方便地开发出基于两个功能强大的类,用户可以方便地开发出基于ODBC或或DAO的数据库应用。的数据库应用。ODBC(open database connectivity,开放数据库互连开放数据库互连)是微软公司开放服务结构是微软公司开放服务结构(windows open services architecture,WOSA)中有关数据库的一个组成部分,中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标它建立了一组规范,并提供了一组对数据库访问的标准准API(应用程序编程接口)。这些应用程序编程接
3、口)。这些API利用利用SQL来来完成其大部分任务。完成其大部分任务。ODBC本身也提供了对本身也提供了对SQL语言语言的支持,用户可以直接将的支持,用户可以直接将SQL语句送给语句送给ODBC。14.1 ODBC的基本概念的基本概念一个基于一个基于ODBC的应用程序对数据库的操作不依赖任的应用程序对数据库的操作不依赖任何何DBMS(database manager system,数据库管理系数据库管理系统),不直接与统),不直接与DBMS打交道,所有的数据库操作由打交道,所有的数据库操作由对应的对应的DBMS的的ODBC驱动程序完成。也就是说,不驱动程序完成。也就是说,不论是论是FoxPro
4、、Access还是还是Oracle数据库,均可用数据库,均可用ODBC API进行访问。由此可见,进行访问。由此可见,ODBC的最大优点的最大优点是能以统一的方式处理所有的数据库。是能以统一的方式处理所有的数据库。ODBC管理器管理器(administrator)位于位于Windows控制面控制面板板(control panel)的的32位位ODBC内,其主要任务是管内,其主要任务是管理安装的理安装的ODBC驱动程序和管理数据源。驱动程序和管理数据源。驱动程序管理器驱动程序管理器(driver manager)包含在包含在ODBC32.DLL中,对用户是透明的。其任务是管理中,对用户是透明的。
5、其任务是管理ODBC驱动程序,是驱动程序,是ODBC中最重要的部件。中最重要的部件。ODBC 驱动程序是一些驱动程序是一些DLL,提供了提供了ODBC和数据和数据库之间的接口。库之间的接口。数据源包含了数据库位置和数据库类型等信息,实际数据源包含了数据库位置和数据库类型等信息,实际上是一种数据连接的抽象。上是一种数据连接的抽象。应用程序要访问一个数据库,首先必须用应用程序要访问一个数据库,首先必须用ODBC管理管理器注册一个数据源,管理器根据数据源提供的数据库器注册一个数据源,管理器根据数据源提供的数据库位置、数据库类型及位置、数据库类型及ODBC驱动程序等信息,建立起驱动程序等信息,建立起O
6、DBC与具体数据库的联系。这样,只要应用程序将与具体数据库的联系。这样,只要应用程序将数据源名提供给数据源名提供给ODBC,ODBC就能建立起与相应数就能建立起与相应数据库的连接。据库的连接。在在ODBC中,中,ODBC API不能直接访问数据库,必须不能直接访问数据库,必须通过驱动程序管理器与数据库交换信息。驱动程序管通过驱动程序管理器与数据库交换信息。驱动程序管理器负责将应用程序对理器负责将应用程序对ODBC API的调用传递给正确的调用传递给正确的驱动程序,而驱动程序在执行完相应的操作后,将的驱动程序,而驱动程序在执行完相应的操作后,将结果通过驱动程序管理器返回给应用程序。在访问结果通过
7、驱动程序管理器返回给应用程序。在访问ODBC数据源时需要数据源时需要ODBC驱动程序的支持。驱动程序的支持。MFC的的ODBC类对较复杂的类对较复杂的ODBC API进行了封装,进行了封装,提供了简化的调用接口,从而大大方便了数据库应用提供了简化的调用接口,从而大大方便了数据库应用程序的开发。程序员不必了解程序的开发。程序员不必了解ODBC API和和SQL的具的具体细节,利用体细节,利用ODBC类即可完成对数据库的大部分操类即可完成对数据库的大部分操作。作。14.2 MFC的的ODBC类类MFC的的ODBC类主要包括:类主要包括:(1)CDatabase类类,主要功能是建立与数据源的连接。主
8、要功能是建立与数据源的连接。(2)CRecordset类类,该类代表从数据源选择的一组记该类代表从数据源选择的一组记录(记录集),程序可以选择数据源中的某个表作为录(记录集),程序可以选择数据源中的某个表作为一个记录集,也可以通过对表的查询得到记录集,还一个记录集,也可以通过对表的查询得到记录集,还可以合并同一数据源中多个表的列到一个记录集中。可以合并同一数据源中多个表的列到一个记录集中。通过该类可对记录集中的记录进行滚动、修改、增加通过该类可对记录集中的记录进行滚动、修改、增加和删除等操作。和删除等操作。(3)CRecordView类类,提供了一个表单视图与某个记提供了一个表单视图与某个记录
9、集直接相连,利用对话框数据交换机制录集直接相连,利用对话框数据交换机制(DDX)在记在记录集与表单视图的控件之间传输数据。该类支持对记录集与表单视图的控件之间传输数据。该类支持对记录的浏览和更新,在撤销时会自动关闭与之相联系的录的浏览和更新,在撤销时会自动关闭与之相联系的记录集。记录集。(4)CFieldExchange类类,支持记录字段数据交换支持记录字段数据交换(DFX),),即记录集字段数据成员与相应的数据库的即记录集字段数据成员与相应的数据库的表的字段之间的数据交换。该类的功能与表的字段之间的数据交换。该类的功能与CDataExchange类的对话框数据交换功能类似。类的对话框数据交换
10、功能类似。(5)CDBException类类,代表代表ODBC类产生的异常。类产生的异常。概括地讲,概括地讲,CDatabase针对某个数据库,它负责连接针对某个数据库,它负责连接数据源;数据源;CRecordset针对数据源中的记录集,它负针对数据源中的记录集,它负责对记录的操作;责对记录的操作;CRecordView负责界面,而负责界面,而CFieldExchange负责负责CRecordset与数据源的数据交换。与数据源的数据交换。利用利用AppWizard和和ClassWizard,用户可以方便地建用户可以方便地建立数据库应用程序,但这并不意味着可以对立数据库应用程序,但这并不意味着可
11、以对MFC的的ODBC类一无所知。应注意阅读后面几小节中的内容,类一无所知。应注意阅读后面几小节中的内容,为学习后面的例子打好基础。为学习后面的例子打好基础。要建立与数据源的连接,首先应构造一个要建立与数据源的连接,首先应构造一个CDatabase对象,然后再调用对象,然后再调用CDatabase的的Open成员函数。成员函数。Open函数负责建立连接,其声明为函数负责建立连接,其声明为:virtual BOOL Open(LPCTSTR lpszDSN,BOOL bExclusive=FALSE,BOOL bReadOnly=FALSE,LPCTSTR lpszConnect=ODBC;,B
12、OOL bUseCursorLib=TRUE);throw(CDBException,CMemoryException);14.2.1 CDatabase类类参数参数lpszDSN指定了数据源名,在指定了数据源名,在lpszConnect参数中参数中也可包括数据源名,此时也可包括数据源名,此时lpszDSN必须为必须为NULL,若若在函数中未提供数据源名且使在函数中未提供数据源名且使lpszDSN为为NULL,则则会显示一个数据源对话框,用户可以在该对话框中选会显示一个数据源对话框,用户可以在该对话框中选择一个数据源。参数择一个数据源。参数bExclusive说明是否独占数据源,说明是否独占数
13、据源,由于目前版本的类库还不支持独占方式,故该参数的由于目前版本的类库还不支持独占方式,故该参数的值应该是值应该是FALSE,这说明数据源是被共享的。这说明数据源是被共享的。参数参数bReadOnly若为若为TRUE则对数据源的连接是只读则对数据源的连接是只读的。参数的。参数lpszConnect指定了一个连接字符串,连接指定了一个连接字符串,连接字符串中可以包括数据源名、用户账号字符串中可以包括数据源名、用户账号(ID)和口令等和口令等信息,字符串中的信息,字符串中的“ODBC”表示要连接到一个表示要连接到一个ODBC数据源上。参数数据源上。参数bUseCursorLib若为若为TRUE,则
14、会装则会装载光标库,否则不装载,快照需要光标库,动态集不载光标库,否则不装载,快照需要光标库,动态集不需要光标库。若连接成功,函数返回需要光标库。若连接成功,函数返回TRUE,若返回若返回FALSE,则说明用户在数据源对话框中按了则说明用户在数据源对话框中按了Cancel按钮。若函数内部出现错误,则框架会产生一个异常。按钮。若函数内部出现错误,则框架会产生一个异常。下面是一些调用下面是一些调用Open函数的例子:函数的例子:CDatabase m_db;/在文档类中嵌入一个在文档类中嵌入一个CDatabase对象对象 /连接到一个名为连接到一个名为Student Registration的数据
15、源的数据源m_db.Open(Student Registration);/在连接数据源的同时指定了用户帐号和口令在连接数据源的同时指定了用户帐号和口令m_db.Open(NULL,FALSE,FALSE,ODBC;DSN=Student Registration;UID=ZYF;PWD=1234);m_db.Open(NULL);/将弹出一个数据源对话框将弹出一个数据源对话框要从一个数据源中脱离,可调用函数要从一个数据源中脱离,可调用函数Close。在脱离在脱离后,可以再次调用后,可以再次调用Open函数来建立一个新的连接。函数来建立一个新的连接。调用调用IsOpen可判断当前是否有一个连接
16、,调用可判断当前是否有一个连接,调用GetConnect可返回当前的连接字符串。函数的声明可返回当前的连接字符串。函数的声明为为:virtual void Close();BOOL IsOpen()const;/返回返回TRUE则表明当前有一个连接则表明当前有一个连接const CString&GetConnect()const;CDatabase的析构函数会调用的析构函数会调用Close,所以只要删除了所以只要删除了CDatabase对象就可以与数据源脱离。对象就可以与数据源脱离。CRecordView(记录视图)是记录视图)是CFormView的派生类,的派生类,它提供了一个表单视图来显示
17、当前记录,用户可以通它提供了一个表单视图来显示当前记录,用户可以通过表单视图显示当前记录。通过记录视图,可以修改、过表单视图显示当前记录。通过记录视图,可以修改、添加和删除数据,用户一般需要创建一个添加和删除数据,用户一般需要创建一个CRecordView的派生类,并在其对应的对话框模板中的派生类,并在其对应的对话框模板中加入控件。加入控件。14.2.2 CRecordView类类记录视图使用记录视图使用DDX数据交换机制在表单中的控件和数据交换机制在表单中的控件和记录集之间交换数据。在前面介绍的记录集之间交换数据。在前面介绍的DDX都是在控都是在控件和控件父窗口的数据成员之间交换数据,而记录
18、视件和控件父窗口的数据成员之间交换数据,而记录视图则是在控件和一个外部对象(图则是在控件和一个外部对象(CRecordset的派生类的派生类对象)之间交换数据。清单显示了一个对象)之间交换数据。清单显示了一个CRecordView的派生类的的派生类的DoDataExchange函数,可以看出,该函函数,可以看出,该函数是与数是与m_pSet指针指向的记录集对象的域数据成员指针指向的记录集对象的域数据成员交换数据的。而且,交换数据的代码是交换数据的。而且,交换数据的代码是ClassWizard自动生成的。在后面的例子中,将介绍用自动生成的。在后面的例子中,将介绍用ClassWizard连接记录视
19、图与记录集对象的方法。连接记录视图与记录集对象的方法。在函数的开头先调用在函数的开头先调用CRecordset:Edit进入编辑模式,进入编辑模式,接着调用接着调用UpdateData将控件中的数据更新到记录集将控件中的数据更新到记录集对象的域数据成员中,然后调用对象的域数据成员中,然后调用CRecordset:Update将域数据成员的值写入数据源,这说明将域数据成员的值写入数据源,这说明OnMove在滚在滚动记录的同时会完成对原来记录的修改。动记录的同时会完成对原来记录的修改。在函数的中间有一个分支语句用来处理在函数的中间有一个分支语句用来处理4个不同的命个不同的命令,在这个分支语句中调用
20、了令,在这个分支语句中调用了CRecordset的各种用于的各种用于滚动记录的成员函数,这些函数在滚动到一个新的记滚动记录的成员函数,这些函数在滚动到一个新的记录时会把该记录的内容设置到域数据成员中。在函数录时会把该记录的内容设置到域数据成员中。在函数的末尾调用的末尾调用UpdateData(FALSE)把新的当前记录的内把新的当前记录的内容设置到表单的控件中。容设置到表单的控件中。由此可见,由此可见,OnMove一来一回完成了两次表单控件和一来一回完成了两次表单控件和数据源的数据交换过程。通过分析该函数,可以学会数据源的数据交换过程。通过分析该函数,可以学会在浏览记录时如何控制在浏览记录时如
21、何控制DDX和和DFX数据交换。数据交换。例例14.1 创建一个学生信息管理的数据库应用程序。创建一个学生信息管理的数据库应用程序。使用使用ODBC数据源,因此首先应该创建数据库,这里数据源,因此首先应该创建数据库,这里采用采用Access 来创建,创建的步骤如下:来创建,创建的步骤如下:(1)运行运行Access,建立一个新数据库,建立方法可以建立一个新数据库,建立方法可以参考有关书籍。参考有关书籍。14.3 创建一个创建一个ODBC数据源的数据库管理数据源的数据库管理程序实例程序实例(2)数据库创建完毕,就可以来创建数据库创建完毕,就可以来创建ODBC数据源了,数据源了,单击计算机的单击计
22、算机的“开始开始”按钮,选择按钮,选择“设置设置”“控制控制面板面板”命令,在弹出的控制面板对话框中,双击命令,在弹出的控制面板对话框中,双击ODBC数据源图标,如图数据源图标,如图14.1所示。所示。图图14.1 在控制面板上创建在控制面板上创建ODBC数据源数据源此时,弹出图此时,弹出图14.2所示的对话框。所示的对话框。图图14.2 创建创建ODBC数据源数据源 单击单击“用户用户DSN”选项卡中的选项卡中的“添加添加”按钮,来创建按钮,来创建一个一个Access类型的数据源,按照图类型的数据源,按照图14.3所示对话框进所示对话框进行设置,选取上面建好的数据库,正如所看到的,将行设置,
23、选取上面建好的数据库,正如所看到的,将数据源的名称取为数据源的名称取为“DSNSTUDENT”,这个名称在下面这个名称在下面进行程序设计时要用到。进行程序设计时要用到。图图14.3 设置数据源的名称设置数据源的名称(3)做完这些准备工作后,创建应用程序的框架。遵做完这些准备工作后,创建应用程序的框架。遵循以下步骤:循以下步骤:运行运行AppWizard来创建一个来创建一个MFC AppWizard的新项的新项目,将其命名为目,将其命名为“student”。第一步,选择基于第一步,选择基于Single document,语言支持中文。语言支持中文。第二步,选择第二步,选择Database vie
24、w with file support,并单并单击击Data Source按钮,为程序指定图按钮,为程序指定图14.4所示的数据源,所示的数据源,集合类型选为集合类型选为Dynaset,单击单击OK按钮,在弹出的对话按钮,在弹出的对话框中为程序选中可用的表框中为程序选中可用的表“学生学生”(在本例中,它是(在本例中,它是惟一可用的表),单击惟一可用的表),单击OK按钮,完成后单击按钮,完成后单击Next按按钮。钮。图图14.4 在创建应用程序框架时指定数据源在创建应用程序框架时指定数据源第三步到第六步,保持默认设置,完成应用程序的框第三步到第六步,保持默认设置,完成应用程序的框架设计。架设计。
25、这时,可先停下来,认真看一下应用程序向导所做的这时,可先停下来,认真看一下应用程序向导所做的一切。生成的类中有两点与以前的不一样,一是类一切。生成的类中有两点与以前的不一样,一是类CStudentView,它由它由CRecordView类派生,而类派生,而CRecordView类是类是CFormView的子类,它在的子类,它在CFormView类的基础上添加了支持数据库的功能,类的基础上添加了支持数据库的功能,前面对它已有阐述;前面对它已有阐述;二是二是CStudentSet类,它由类,它由CRecordSet类派生而来,关于类派生而来,关于CRecordSet类在前面类在前面已作过介绍。已作
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 清华 14 数据库 编程
限制150内