《2022年用MFC_ODBC操作Access数据库 .pdf》由会员分享,可在线阅读,更多相关《2022年用MFC_ODBC操作Access数据库 .pdf(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、用 MFC ODBC 操作 Access数据库2004-06-09 11:05作者:金花胡荣强程永谊出处:论坛责任编辑:方舟摘要:本文简要介绍了MFC ODBC的工作原理,并且通过一个应用实例,讨论了利用MFC ODBC技术实现对 Access 数据源的显示, 在此基础上, 分析了如何 设计 以达到利用MFC ODBC来实现修改、 增加、删除 Access 数据源中的记录的功能。关键词: VC; MFC ODBC ;Access ;数据库MFC ODBC数据库简述开放数据互连 (Open Database Connectivity,简称 ODBC) 是一种数据库的互操作平台,通过经严格定义的各
2、个级别的ODBC 接口和客户系统的初始装置,能够为应用 程序 提供数据库类型透明性和位置透明性,让应用程序的编写者避免了与数据源相联的复杂性。MFC 的数据库扩展部分封装了使用ODBC 数据资源的细节,应用程序可以直接使用MFC 中的数据库扩展类,来操纵ODBC 驱动 程序管理器,访问数据库。进行 MFC ODBC数据库开发时, 所需的基础工具就是MFC ODBC 数据库类的使用。利用 MFC ODBC开发就是利用 MFC ODBC数据库类来操纵ODBC 数据源。 Visual C+ 的大多数 ODBC 访问是通过MFC 来完成的。Visual C+ 的 MFC 类库定义了几个数据库类, 在利
3、用 MFC 编程时常常用到, 它们是 CDatabase( 数据库类 )、CRecordSet( 记录集类 )、和 CRecordView( 可视记录集类 )。对于 MFC ODBC数据库类来说,CDatabase类对象表示一个同数据源的连接,通过它可以对数据源进行操作。而CRecordSet对象代表从数据源中选择的一组记录的集合,也就是通常所说的记录集对象。CRecordSet对象通常用于两种形式:动态集(dynasets )和快照集( snapshots )。动态集能与其他用户所做的更改保持同步,快照集则是数据的一个静态视图。每一种形式在记录被打开时都提供一组记录,区别在于,当用户在一个动
4、态集里滚动到一条记录时,有其他用户或是应用程序中的其他记录集所做的更改就会相应地显示出来。CRecordView类对象能以控制的形式显示数据库记录。这个视图是直接连接到一个 CRecordSet对象的表视图。一个应用实例本实例是某项目中的一部分,目的是实现MFC ODBC 数据库与Access 数据表格之间的相互操作。包括用 Visual C+ 中的 MFC ODBC技术实现对Access 数据表格的内容的显示、添加、修改和删除的功能。1、 ODBC 数据源的创建笔者使用的 操作系统 为 Windows XP , 工具是 Visual C+6.0 。 此例中建立的Access 表格取名为 “p
5、lc ”。在“ 控制面板 ” 中双击 “ 管理工具 ” 图标,然后在新出现的窗口中双击“ 数据源( ODBC )”,在弹出的对话框中选中 “ 用户 DSN ”中的 “dBASE Files ”,单击 “ 添加 ” 按钮,从弹出的对话框中选中“Microsoft Access Driver(*.mdb)”。单击 “ 完成” 后,将弹出一个新的对话框,在数据源名及说明后的编辑框中填入表格名“plc ”。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 6 页 - - - - -
6、 - - - - 在命名数据源之后,需要把它连接到一个数据库。单击“ 选择 ” ,如图 1 所示,得到存储在数据目录中plc.mdb 的拷贝文件,选中之,单击“ 确定 ” 关闭此对话框。然后单击“ 确定” ,完成数据源的创建。用 MFC ODBC操作 Access数据库2004-06-09 11:05作者:金花胡荣强程永谊出处:论坛责任编辑:方舟2、使用 AppWizard创建一个数据库应用程序笔者开始从 AppWizard 开始创建一个新的MFC AppWizard(exe)项目。 命名为 Jh, 然后遵从以下步骤:1)在 MFC AppWizard第一步对话框中,选择“ 单个文档 ” 。2
7、)在 MFC AppWizard第二步对话框中,选择“ 查看数据库不使用文件支持” ,再单击 “Data Source ” 。3)在 RecordSet Type组框中,选择Dynaset 。在 Data Source组框中,单击ODBC 单选按钮,然后从下拉列表中选择plc ,如图 2 所示,单击 ok,在弹出的新的对话框中选中message, 即为本项目所要操作的表。以后几步接收缺省值,单击“ 完成 ” 即可。至此,已创建一个应用程序,并且在程序中自行生成一个数据源和数据源中的一个表的相关程序,其程序清单如下:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - -
8、 - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 6 页 - - - - - - - - - class CJhSet : public Crecordset/基于 CRecordset的 CjhSet 新类 public: CJhSet(CDatabase* pDatabase = NULL); DECLARE_DYNAMIC(CJhSet) / Field/Param Data /AFX_FIELD(CJhSet, CRecordset) /对应表中一些被绑定字段的变量CStringm_baudrate; CStringm_type; CStrin
9、gm_unit; CStringm_number; CStringm_address; CStringm_istart; CStringm_iend; CStringm_ostart; CStringm_oend; /AFX_FIELD / Overrides / ClassWizard generated virtual function overrides /AFX_VIRTUAL(CJhSet) public: virtual CStringGetDefaultConnect(); / 返回被连接的数据源名称virtual CStringGetDefaultSQL(); / 返回数据源中
10、所选表名称virtual void DoFieldExchange(CFieldExchange* pFX); / RFX support /AFX_VIRTUAL / Implementation #ifdef _DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif; 3、实现程序的显示记录的功能一旦 AppWizard完成编写这些文件,它将启动对话框编辑器,这样就可以设计自己的表单了。CRecordView应用程序围绕着充当应用程序主窗口的对话框而创建。笔者也将使用
11、像表单一样的对话框来显示存储在 plc 数据库记录域中的值。如图3 所示来放置静态文本框与编辑文本框。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 6 页 - - - - - - - - - CJHSet 类的成员变量如图4 所示。所有的变量均为CString 对象。由 AppWizard创建的每个变量的类型一般与相应数据库域的类型相似。除了创建成员变量,AppWizard还编写了一组数据交换函数 类似于对话框的DDX 函数 来在用来显示信息的控件与定义于CRecord
12、Set类中的数据库域之间交换信息。为了实现数据传输, 就要把每个控件与代表数据库域的CJHSet 变量联系起来。笔者通过使用CJHView来成员变量 m_pSet 来指向应用程序的CJHSet 对象。 选择每个资源ID (笔者这里未修改编辑框的默认ID) ,并单击 Add Variable ,从下拉表中直接选择相应的成员变量名。全部设置好之后单击OK,至此,运行程序,就可以实现简单的与数据库之间的数据显示功能。用 MFC ODBC 操作 Access数据库2004-06-09 11:05作者:金花胡荣强程永谊出处:论坛责任编辑:方舟4、实现程序的添加、修改和删除记录的功能在实现上述功能之前,
13、需要按 “ 插入 -资源 -DIALOG- 新建 ” 建立一个新的对话框(与图 1 所示对话框类似),以建立添加、修改的对象。并为此对话框建立一个基于CDialog 基础类的新的类CAddDlg 。其 ID 为名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 6 页 - - - - - - - - - IDD_DIALOG1 。然后在 JhView.cpp中加 “#include AddDlg.h”,并为 “ 添加记录( IDC_ADD )” 键编写程序代码如下。其中已经作
14、了详细的注解。void CJhView:OnAdd() /建立一个新的添加对话框CAddDlgdlg; if(dlg.DoModal()=IDOK) /增加一条新的记录m_pSet-AddNew(); /把对话框中的记录传递到记录集中m_pSet-m_baudrate=dlg.m_br; m_pSet-m_type=dlg.m_ty; m_pSet-m_unit=dlg.m_un; m_pSet-m_number=dlg.m_nu; m_pSet-m_address=dlg.m_add; m_pSet-m_istart=dlg.m_is; m_pSet-m_iend=dlg.m_ie; m_p
15、Set-m_ostart=dlg.m_os; m_pSet-m_oend=dlg.m_oe; m_pSet-Update(); /把新的记录存在数据源里m_pSet-MoveLast(); /指定当前记录为最后一条记录UpdateData(false); /清空已输入内容 添加记录部分,应该先读出当前的记录,使其显示在添加/修改对话框中,即:dlg.m_br=m_pSet-m_baudrate; dlg.m_ty=m_pSet-m_type; dlg.m_un=m_pSet-m_unit; dlg.m_nu=m_pSet-m_number; dlg.m_add=m_pSet-m_address
16、; dlg.m_is=m_pSet-m_istart; dlg.m_ie=m_pSet-m_iend; dlg.m_os=m_pSet-m_ostart; dlg.m_oe=m_pSet-m_oend; 余下的与添加记录代码相同,除了不要定位“m_pSet -MoveLast(); ” 而已。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 6 页 - - - - - - - - - 删除记录只是需要使用Delete() 成员函数删除当前记录之后移到下一个记录即可。程序清单
17、如下:void CJhView:OnDel() try/ 试着删除一条记录 m_pSet-Delete(); catch(CDBException*error) AfxMessageBox(error-m_strError); error-Delete(); m_pSet-MoveFirst(); UpdateData(FALSE); return; /移到下一个记录m_pSet-MoveNext(); /测试是否为文件末尾,是,则使用MoveLast() ,而不是使用MoveNext() if(m_pSet-IsEOF() m_pSet-MoveLast(); UpdateData(FALS
18、E); 对多个记录集的操作与对单个记录集的操作类似,只是增加了CRecordSet类的派生类。结束语MFC ODBC让开发人员仅仅使用很少的代码就可以完成复杂的数据库访问,并可以对数据库中的内容方便的实现添加、修改、删除等操作,从而极大地减少了软件 开发的工作量,缩短了开发周期,提高了效率。而且 MFC ODBC简单易学,能实现大部分ODBC API函数的功能,所以了解和掌握MFC ODBC技术,将会给大型数据库应用软件带来清晰、快捷、方便等功能。本文中的实例已经在Visual C+6.0环境下调试通过。共 3 页。123名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 6 页 - - - - - - - - -