《连接数据库精选文档.ppt》由会员分享,可在线阅读,更多相关《连接数据库精选文档.ppt(29页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、连接数据库连接数据库本讲稿第一页,共二十九页连接数据库的方式连接数据库的方式lODBC(Open Database Connectivity,开放数据库互连开放数据库互连)是微软公司开放服务结是微软公司开放服务结构中有关数据库的一个组成部分,它建构中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库立了一组规范,并提供了一组对数据库访问的标准访问的标准API(应用程序编程接口)。(应用程序编程接口)。这些这些API利用利用SQL来完成其大部分任务。来完成其大部分任务。ODBC本身也提供了对本身也提供了对SQL语言的支持,语言的支持,用户可以直接将用户可以直接将SQL语句送给语句送
2、给ODBC。本讲稿第二页,共二十九页连接数据库的方式连接数据库的方式lODBC(Open DataBase Connectivity)l应用程序使用应用程序使用ODBCAPI访问数据库时,访问数据库时,是由是由ODBC管理器将应用程序的数据库访问管理器将应用程序的数据库访问请示传递给相应的数据库驱动程序,驱动程请示传递给相应的数据库驱动程序,驱动程序再用序再用SQL语句完成语句完成DBMS的访问任务。的访问任务。lDAO(Data Access Objects)lDAO使用使用Microsoft Jet提供的数据库访问提供的数据库访问对象集直接访问对象集直接访问DBMS,速度比,速度比ODBC
3、要快。要快。本讲稿第三页,共二十九页注册注册ODBC数据源数据源l应用程序要访问一个数据库,首先必须应用程序要访问一个数据库,首先必须用用ODBC管理器注册一个数据源,管理管理器注册一个数据源,管理器根据数据源提供的数据库位置、数据器根据数据源提供的数据库位置、数据库类型及库类型及ODBC驱动程序等信息,建立驱动程序等信息,建立起起ODBC与具体数据库的联系。这样,与具体数据库的联系。这样,只要应用程序将数据源名提供给只要应用程序将数据源名提供给ODBC,ODBC就能建立起与相应数据库的连就能建立起与相应数据库的连接。接。本讲稿第四页,共二十九页MFC ODBC的构成的构成lODBC管理器:位
4、于管理器:位于控制面板控制面板l驱动程序管理器驱动程序管理器:ODBC32.dlllODBC驱动程序驱动程序:以以DLL文件形式出现文件形式出现本讲稿第五页,共二十九页MFC的的ODBC类简介类简介 lMFC的的ODBC类对较复杂的类对较复杂的ODBC API进行了封装,提供了简化的调用接口,进行了封装,提供了简化的调用接口,从而大大方便了数据库应用程序的开发。从而大大方便了数据库应用程序的开发。程序员不必了解程序员不必了解ODBC API和和SQL的具的具体细节,利用体细节,利用ODBC类即可完成对数据类即可完成对数据库的大部分操作。库的大部分操作。本讲稿第六页,共二十九页MFC的的ODBC
5、类简介类简介MFC的的ODBC类主要包括:类主要包括:lCDatabase类:类:主要功能是建立与数据源的连接。主要功能是建立与数据源的连接。lCRecordset类:类:该类代表从数据源选择的一组记该类代表从数据源选择的一组记录(记录集),程序可以选择数据源中的某个表录(记录集),程序可以选择数据源中的某个表作为一个记录集,也可以通过对表的查询得到记作为一个记录集,也可以通过对表的查询得到记录集,还可以合并同一数据源中多个表的列到一录集,还可以合并同一数据源中多个表的列到一个记录集中通过该类可对记录集中的记录进行个记录集中通过该类可对记录集中的记录进行滚动、修改、增加和删除等操作。滚动、修改
6、、增加和删除等操作。本讲稿第七页,共二十九页MFC的的ODBC类简介类简介lCRecordView类类:提供了一个表单视图:提供了一个表单视图与某个记录集直接相连,利用对话框数与某个记录集直接相连,利用对话框数据交换机制据交换机制(DDX)在记录集与表单视图在记录集与表单视图的控件之间传输数据。该类支持对记录的控件之间传输数据。该类支持对记录的浏览和更新,在撤销时会自动关闭与的浏览和更新,在撤销时会自动关闭与之相联系的记录集。之相联系的记录集。l通常情况下,通常情况下,CDatabase针对某个数据针对某个数据库,它负责连接数据源;库,它负责连接数据源;CRecordset针针对数据源中的记录
7、集,它负责对记录的对数据源中的记录集,它负责对记录的操作操作 本讲稿第八页,共二十九页CRecordset类的数据成员类的数据成员本讲稿第九页,共二十九页CRecordset类的成员函数类的成员函数.本讲稿第十页,共二十九页CRecordset类的成员函数类的成员函数本讲稿第十一页,共二十九页数据库应用程序的实现数据库应用程序的实现创建并注册数据源创建并注册数据源 创建数据库应用框架创建数据库应用框架 设计记录操作界面设计记录操作界面 更新记录更新记录 排序和筛选排序和筛选 本讲稿第十二页,共二十九页创建并注册数据源创建并注册数据源lODBC管理器的使用管理器的使用l用户用户DSNl用户数据源
8、只对当前用户可见,而且只能用于用户数据源只对当前用户可见,而且只能用于当前机器上当前机器上 l系统系统DSNl系统数据源对当前机器上的所有用户可见系统数据源对当前机器上的所有用户可见 l文件文件DSNl文件数据源可以由安装了相同驱动程序的用户文件数据源可以由安装了相同驱动程序的用户共享共享 l数据源创建示例数据源创建示例本讲稿第十三页,共二十九页创建数据库应用框架创建数据库应用框架lAppWizard的选项设置:的选项设置:step 2本讲稿第十四页,共二十九页CExam9_1Set类类class CExam9_1Set:public CRecordsetpublic:CExam9_1Set(
9、CDatabase*pDatabase=NULL);DECLARE_DYNAMIC(CExam9_1Set)/Field/Param Data/AFX_FIELD(CExam9_1Set,CRecordset)longm_CustomerID;CStringm_LastName;CString m_FirstName;CStringm_HomeCountry;CStringm_HomeState;CStringm_PhoneNumber;CStringm_Comments;/AFX_FIELD/Overrides/ClassWizard generated virtual function o
10、verrides/AFX_VIRTUAL(CExam9_1Set)public:virtual CString GetDefaultConnect();/Default connection stringvirtual CString GetDefaultSQL();/default SQL for Recordsetvirtual void DoFieldExchange(CFieldExchange*pFX);/RFX support/AFX_VIRTUAL/Implementation#ifdef _DEBUGvirtual void AssertValid()const;virtual
11、 void Dump(CDumpContext&dc)const;#endif;记录集字段数据成员本讲稿第十五页,共二十九页构造函数构造函数CExam9_1Set:CExam9_1Set(CDatabase*pdb):CRecordset(pdb)/AFX_FIELD_INIT(CExam9_1Set)m_CustomerID=0;m_LastName=_T();m_FirstName=_T();m_HomeCountry=_T();m_HomeState=_T();m_PhoneNumber=_T();m_Comments=_T();m_nFields=7;/AFX_FIELD_INITm_
12、nDefaultType=snapshot;记录集类型本讲稿第十六页,共二十九页创建连接创建连接CString CExam9_1Set:GetDefaultConnect()return _T(ODBC;DSN=HotelInfo);CString CExam9_1Set:GetDefaultSQL()return _T(tblCustomer);用于获得定义了数据源类型和数据源名的连接字符串 定义SQL语句的字符串,本例的SQL语句定义了查询一张表的完整记录 本讲稿第十七页,共二十九页记录集与数据库的数据交换记录集与数据库的数据交换void CExam9_1Set:DoFieldExchan
13、ge(CFieldExchange*pFX)/AFX_FIELD_MAP(CExam9_1Set)pFX-SetFieldType(CFieldExchange:outputColumn);RFX_Long(pFX,_T(CustomerID),m_CustomerID);RFX_Text(pFX,_T(LastName),m_LastName);RFX_Text(pFX,_T(FirstName),m_FirstName);RFX_Text(pFX,_T(HomeCountry),m_HomeCountry);RFX_Text(pFX,_T(HomeState),m_HomeState);R
14、FX_Text(pFX,_T(PhoneNumber),m_PhoneNumber);RFX_Text(pFX,_T(Comments),m_Comments);/AFX_FIELD_MAP 本讲稿第十八页,共二十九页设计记录操作界面设计记录操作界面l视图控件与记录集字段数据成员视图控件与记录集字段数据成员本讲稿第十九页,共二十九页更新记录更新记录lAddNew()lDelete()lEdit()lUpdate()lCancelUpdate()lRequery()本讲稿第二十页,共二十九页进入添加模式进入添加模式void CExam9_1View:OnRecordAdd()/TODO:Add
15、your command handler code herem_pSet-AddNew();/进入添加模式 m_addflg=true;/设置添加模式标志CEdit*m_pCtrl=(CEdit*)GetDlgItem(IDC_CustomerID);/清除ID编辑框的只读属性m_pCtrl-SetReadOnly(false);/用新记录的字段数据成员值更新控件显示UpdateData(false);本讲稿第二十一页,共二十九页通过移动记录保存添加的新通过移动记录保存添加的新记录记录BOOL CExam9_1View:OnMove(UINT nIDMoveCommand)/TODO:Add
16、your specialized code here and/or call the base classif(m_addflg)/添加模式处理添加模式处理m_addflg=false;UpdateData(true);/使用控件值更新记录集字段数据成员使用控件值更新记录集字段数据成员 if(m_pSet-CanUpdate()/将记录集更新保存到表中将记录集更新保存到表中m_pSet-Update();m_pSet-Requery();/重新查询记录集重新查询记录集UpdateData(false);/以更新后的记录集数据成员更新控件显示以更新后的记录集数据成员更新控件显示CEdit*m_p
17、Ctrl=(CEdit*)GetDlgItem(IDC_CustomerID);m_pCtrl-SetReadOnly(true);/设置设置ID编辑框为只读编辑框为只读return true;elsereturn CRecordView:OnMove(nIDMoveCommand);本讲稿第二十二页,共二十九页删除记录删除记录lvoid CExam9_1View:OnRecordDelete()ll/TODO:Add your command handler code herel m_pSet-Delete();/删除当前记录删除当前记录l m_pSet-MoveNext();/移到下一记录
18、移到下一记录lif(m_pSet-IsEOF()/删除记录为最后一条记录处理删除记录为最后一条记录处理lm_pSet-MoveLast();lif(m_pSet-IsBOF()/删空记录集处理删空记录集处理lm_pSet-SetFieldNull(NULL);lUpdateData(false);/更新控件显示更新控件显示l 本讲稿第二十三页,共二十九页排序和筛选排序和筛选lm_strFilterlm_strSort 本讲稿第二十四页,共二十九页排序排序void CExam9_1View:OnViewSortId()/定义排序关键字按ID排序m_pSet-m_strSort=CustomerI
19、D;m_pSet-Requery();/重新查询UpdateData(false);/更新控件显示 本讲稿第二十五页,共二十九页查询查询lvoid CExam9_1View:OnViewFilter()ll/TODO:Add your command handler code herel CFilterDlg dlg;l CString str;l if(dlg.DoModal()=IDOK)/调用筛选对话框,按OK按钮返回lif(dlg.m_Filter.IsEmpty()/编辑框为空,显示整个记录集l str=;lelseltr=HomeCountry=+dlg.m_Filter+;/定义筛选字符串l m_pSet-m_strFilter=str;lm_pSet-Requery();/重新查询记录集lUpdateData(false);/更新控件显示ll 本讲稿第二十六页,共二十九页l实现书中例题:实现书中例题:l例例9-1l例例9-2l例例9-3l例例9-4本讲稿第二十九页,共二十九页
限制150内