九章节连接数据库.ppt

上传人:本田雅阁 文档编号:3161503 上传时间:2019-07-18 格式:PPT 页数:26 大小:331.53KB
返回 下载 相关 举报
九章节连接数据库.ppt_第1页
第1页 / 共26页
九章节连接数据库.ppt_第2页
第2页 / 共26页
九章节连接数据库.ppt_第3页
第3页 / 共26页
九章节连接数据库.ppt_第4页
第4页 / 共26页
九章节连接数据库.ppt_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《九章节连接数据库.ppt》由会员分享,可在线阅读,更多相关《九章节连接数据库.ppt(26页珍藏版)》请在三一文库上搜索。

1、第九章 连接数据库,连接数据库的方式 数据库应用程序的实现,连接数据库的方式,ODBC(Open DataBase Connectivity) 应用程序使用ODBC API访问数据库时,是由ODBC管理器将应用程序的数据库访问请示传递给相应的数据库驱动程序,驱动程序再用SQL语句完成DBMS的访问任务。 DAO(Data Access Objects ) DAO使用Microsoft Jet提供的数据库访问对象集直接访问DBMS,速度比ODBC要快。,MFC ODBC的构成,ODBC管理器:位于控制面板 驱动程序管理器: ODBC32.dll ODBC驱动程序:以DLL文件形式出现,MFC O

2、DBC类,CDatabase CRecordset 快照记录集(snapshot) 动态记录集(Dynaset) CRecordView,CRecordset类的数据成员,CRecordset类的成员函数.,CRecordset类的成员函数,数据库应用程序的实现,创建并注册数据源 创建数据库应用框架 设计记录操作界面 更新记录 排序和筛选,创建并注册数据源,ODBC管理器的使用 用户DSN 用户数据源只对当前用户可见,而且只能用于当前机器上 系统DSN 系统数据源对当前机器上的所有用户可见 文件DSN 文件数据源可以由安装了相同驱动程序的用户共享 数据源创建示例,创建数据库应用框架,AppWi

3、zard的选项设置:step 2,CExam9_1Set类,class CExam9_1Set : public CRecordset public: CExam9_1Set(CDatabase* pDatabase = NULL); DECLARE_DYNAMIC(CExam9_1Set) / Field/Param Data /AFX_FIELD(CExam9_1Set, CRecordset) long m_CustomerID; CString m_LastName; CString m_FirstName; CString m_HomeCountry; CString m_HomeS

4、tate; CString m_PhoneNumber; CString m_Comments; /AFX_FIELD,/ Overrides / ClassWizard generated virtual function overrides /AFX_VIRTUAL(CExam9_1Set) public: virtual CString GetDefaultConnect(); / Default connection string virtual CString GetDefaultSQL(); / default SQL for Recordset virtual void DoFi

5、eldExchange(CFieldExchange* pFX); / RFX support /AFX_VIRTUAL / Implementation #ifdef _DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext,记录集字段数据成员,构造函数,CExam9_1Set:CExam9_1Set(CDatabase* pdb) : CRecordset(pdb) /AFX_FIELD_INIT(CExam9_1Set) m_CustomerID = 0; m_LastName = _T(“); m_F

6、irstName = _T(“); m_HomeCountry = _T(“); m_HomeState = _T(“); m_PhoneNumber = _T(“); m_Comments = _T(“); m_nFields = 7; /AFX_FIELD_INIT m_nDefaultType = snapshot; ,记录集类型,创建连接,CString CExam9_1Set:GetDefaultConnect() return _T(“ODBC;DSN=HotelInfo“); CString CExam9_1Set:GetDefaultSQL() return _T(“tblCu

7、stomer“); ,用于获得定义了数据源类型和数据源名的连接字符串,定义SQL语句的字符串,本例的SQL语句定义了查询一张表的完整记录,记录集与数据库的数据交换,void CExam9_1Set:DoFieldExchange(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);

8、 RFX_Text(pFX, _T(“FirstName“), m_FirstName); RFX_Text(pFX, _T(“HomeCountry“), m_HomeCountry); RFX_Text(pFX, _T(“HomeState“), m_HomeState); RFX_Text(pFX, _T(“PhoneNumber“), m_PhoneNumber); RFX_Text(pFX, _T(“Comments“), m_Comments); /AFX_FIELD_MAP ,设计记录操作界面,视图控件与记录集字段数据成员,更新记录,AddNew() Delete() Edit(

9、) Update() CancelUpdate() Requery(),进入添加模式,void CExam9_1View:OnRecordAdd() / TODO: Add your command handler code here m_pSet-AddNew(); /进入添加模式 m_addflg=true; /设置添加模式标志 CEdit* m_pCtrl =(CEdit*)GetDlgItem(IDC_CustomerID); /清除ID编辑框的只读属性 m_pCtrl-SetReadOnly(false); /用新记录的字段数据成员值更新控件显示 UpdateData(false);

10、 ,通过移动记录保存添加的新记录,BOOL CExam9_1View:OnMove(UINT nIDMoveCommand) / TODO: Add your specialized code here and/or call the base class if(m_addflg)/添加模式处理 m_addflg=false; UpdateData(true);/使用控件值更新记录集字段数据成员 if(m_pSet-CanUpdate() )/将记录集更新保存到表中 m_pSet-Update(); m_pSet-Requery();/重新查询记录集 UpdateData(false);/以更

11、新后的记录集数据成员更新控件显示 CEdit* m_pCtrl=(CEdit*)GetDlgItem(IDC_CustomerID); m_pCtrl-SetReadOnly(true); /设置ID编辑框为只读 return true; else return CRecordView:OnMove(nIDMoveCommand); ,删除记录,void CExam9_1View:OnRecordDelete() / TODO: Add your command handler code here m_pSet-Delete();/删除当前记录 m_pSet-MoveNext();/移到下一记

12、录 if(m_pSet-IsEOF() )/删除记录为最后一条记录处理 m_pSet-MoveLast(); if(m_pSet-IsBOF() )/删空记录集处理 m_pSet-SetFieldNull(NULL); UpdateData(false);/更新控件显示 ,排序和筛选,m_strFilter m_strSort,排序,void CExam9_1View:OnViewSortId() / 定义排序关键字按ID排序 m_pSet-m_strSort=“CustomerID“; m_pSet-Requery() ;/ 重新查询 UpdateData(false); /更新控件显示 ,

13、查询,void CExam9_1View:OnViewFilter() / TODO: Add your command handler code here CFilterDlg dlg; CString str; if(dlg.DoModal()=IDOK )/调用筛选对话框,按OK按钮返回 if(dlg.m_Filter.IsEmpty()/编辑框为空,显示整个记录集 str=“; else str=“HomeCountry=“+dlg.m_Filter+“;/定义筛选字符串 m_pSet-m_strFilter=str; m_pSet-Requery(); /重新查询记录集 Update

14、Data(false); /更新控件显示 ,MFC DAO,开发DAO数据库应用程序的过程与开发ODBC数据库程序却惊人地相似 ,只需在选择数据源的时候选择DAO单选项。,DaoDatabase类 CDaoDatabase类对应于CDatabase类,支持与数据库的连接,但它不需要在ODBC管理器中注册DSN,直接与一个数据库相连。 DaoRecordset类 CDaoRecordset类对应CRecordset类,CDaoRecordset类的数据成员和成员函数与CRecordset类的数据成员和成员函数非常相似,支持同样的记录集操作。 但由于DAO是直接与数据库相连,所以ODBC中的Get

15、DefaultConnect()函数在DAO中是GetDefaultDBName。此外,CDaoRecordset类与数据源之间的数据交换是采用DFX(Dao record Field eXchange)机制,而OBDC采用的是RFX机制。 CDaoRecordView类 CDaoRecordView类对应CRecordView类,功能几乎完全相同。 CDaoFieldExchange类 CDaoFieldExchange类对应CFieldExchange类,支持数据交换。 CDaoTableDef类,实践1,重新实现Exam9_1示例程序,要求在AppWizqrd向导的第二步不作指定数据源和选择数据库表的操作,在生成程序框架后,使用ClassWizard创建一个CRecordset的派生类CCustomerset,再按DAO访问方式设置连接数据库。,实践2,独立设计一个简单的数据库应用系统,用于管理旅行社的游客信息管理。需要知道信息一般有:身份证号,姓名,性别,住址,电话,参加的旅游项目编号,团队编号等,程序要有浏览、修改、添加、删除游客信息的功能。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1