zoukankan      html  css  js  c++  java
  • Visual C++ 2008入门经典 第二十章 链接到数据源 简单

    /*
    第二十章 链接到数据源
    主要内容:
    SQL及其使用方法
    如何使用SQL select操作检索数据
    MFC支持哪里些数据库服务
    什么是记录集对像,它如何链接到关系数据库表
    记录集对像如何检索数据库的信息
    记录视图如何显示记录集的信息
    如何创建数据库程序的项目
    如何把记录集添加到程序中
    如何处理多记录视图

    20.1 数据库基础知识

    20.2 SQL
    20.2.1 使用SQL检索数据
    选择记录
    20.2.3 对记录进行排序

    20.3 MFC中的数据库支持
    将MFC用于数据库应用程序开发时需要进行选择,因为MFC支持两种主要方法,如下所示
    OLE DB:它提供了一种使用COM(又被称为ActiveX)访问本地和远程数据库的方法
    OLE DB由ADO(ActiveX数据对像)使用,ADO提供了一种有效地访问本地和远程数据库的方法,它没有FMC蜀固有的系统开销

    ODBC: 即开放式数据库连接,它为数据访问定义了一种面向标准函数的接口,很多数据库产品供应商都支持这种接口,

    支持ODBC的五个MFC类如表下
    CDatabase 这个类的对像表示到数据库的一个连接,在对数据库进行操作前,这个连接必须存在
    CRecordset 派生于这个类的类的对像表示SQL SELECT操作的结果--一个记录集合,这个对像一次使用该集合中的一个记录可用,利用它提供的函数,可以在该集合中向前或向后移动
    CRecordView 派生于这个类的类的对像用于显示关联记录集对像的当前信息,视图实际上是一个对话框,CRecordset对像使用对话框数据交换(DDX)访问这个记录集的数据
    CFieldExchange 这个类提供数据库和记录集对像之间的数据交换,只要是正在针对自定义数据库类型实现数据交换,就可以直接使用这个类

    20.4 创建数据库应用程序
    20.4.1 注册ODBC数据库
    //烦,控制面板没有ODBC图标,没有啊,咱办啊,找到了,哈哈

    20.4.2 生成MFC ODBC程序
    Snapshot与Dynaset记录集

    20.4.3 了解程序结构
    文档类是一个标准类,只不过MFC Application Wizard添加了一个数据成员m_DBSampleSet,它是一个CProductSet类类型的对像,因此,在应用程序对像的InitInstance()函数成员中创建这个文档对像时,将自动创建记录集对像,这个程序与非数据库程序的重大区别表现在CRecordset类和CRectordView类的细节方面

    1 了解记录集
    查询数据库
    数据库和记录集之间的数据传输
    数据在数据库和记录集之间的传输是由CProductSet类的成员DoFieldExchange()完成'

    2 了解记录视频图

    3 创建视图对话框

    4 将控件链接到记录集
    DDX_FieldText()专门用于在视图和记录集之间交换数据Dialog Data Exchange(DDX,代表对话框数据交换)
    在调用DDX_FieldText()函数时,必须提供四个参数
    (1) CDataExchange对像确定数据传输的方向--传输到记录集中或者从记录集传输,只需提供作为DoDataExchange()函数的参数传递的指针
    (2) 控件的ID,表示数据的来源或目的地
    (3) 对CRecordset对象中字段数据成员的引用,表示数据的来源或目的地
    (4) 指向与其交换数据的CRecordset对像的指针
    DDX_FiledText(pDX, IDC_PRODUCTID, m_pSet->m_ProductID, m_pSet);
    记录集类和记录视图类相互合作,支持数据在数据库和对话框中的控件之间的传输,
    CProductSet类处理数据与数据库与其数据成员之间的传输,CProductView类处理数据在CProductSet类的数据成员和对话框中的控件之间的传输


    20.5 对记录集进行排序
    在从CRecordSet类继承的CProductSet类中,通过设置其m_strSort成员中的值将生成一个语句,在这个语句中可以添加ORDER BY子句,这将基于存储在m_strSort中的字符串对查询获得的输出表进行排序,只需要将m_strSort成员设置成一个字符串

    修改窗口标题


    20.6 使用另一个记录集对像
    需要添加另一个记录集类,处理数据库的订单信息,并且要添加一个互补的视图类,显示记录集的一些字段,另外还需要在Products对话框中添加一个按钮,以便在需要查看当前产品的订单时,能够切换到Orders对话框,

    20.6.2 添加记录集的视图类

    1 创建对话框资源

    2 创建记录视图类

    3 定制记录集
    (1) 添加过滤器到记录集中
    将一个字符串赋给记录集对象的m_strFilter成员,就可以把过滤添加到查询中
    需要在过滤器中设置两个条件,一个条件是限制记录集中生成的记录,它们在Orders表中的OrderID字段要等于Order Details 表中具有相同名称的字段
    [Orders].[OrderID] = [Order Details].[OrderID]
    m_pSet->m_strFilter = "[ProductID] = ? AND [Orders].[OrderID] = [Order Details].[OrderID]"

    (2) 定义过滤器参数
    添加一个数据成员到COrderSet类中,存储CProductSet对像的ProductID字段的当前值

    (3) 初始化记录视图
    对COrderView类中的OnInitialUpdate()函数实现重写,这个函数是在最初显示视图之前由MFC架构调用的

    20.6.4 访问多个表视图
    可以通过赋给应用程序中的每个记录视图窗口唯一的ID跟踪当前的窗口,目前在两个视图:产品视图和订单视图,要定义它们的ID,需要创建一个名称为OurConstants.h的新文件

    1 切换视图
    要支持视图切换机制,需要添加一个public函数成员到CMainFrame类中,其名称为SelectView(), 它的参数指定视图ID,这个函数将从当前视图切换到由这个作为参数传递的ID指定的视图
    2 启用切换操作

    3 处理视图的激活
    在切换到已经存在的视图时,为了显示正确的信息,一定要刷新记录集和重新初始化对话框,在激活功者停用现有视图时,架构将调用COrderView类的OnActiveateView()成员,所以这是刷新记录集和对话框的一个合适的位置,


    20.6.5 查看产品的订单

    20.7 查看客户的详细情况
    将要添加的基本机制将完成订单对话框上的另一个按钮控件,它将切换到一个有关客户数据的新对话框,除了显示客户数据的控件以外,还要在客户对话框中添加两个按钮,一个用于返回到Order View,另一个用于返回到Product View,此外的需要另一个对应于客户视图的视图ID

    20.7.1 添加客户记录集

    20.7.2 创建客户对话框资源
    这个过程和创建订单对话框的过程完全相同

    20.7.3 创建客户视图类

    20.7.4 添加过滤器
    在CCustomerView类的OnInitialUpdate()成员中定义过滤器,由于只希望返回一个对应于每个客户ID的记录,因此不必担心排序的问题,
    OnActivateView()函数处理客户视图的激活,在CustomerView.cpp文件

    20.7.5 实现过滤器参数

    20.7.6 链接订单对话框和客户对话框

    20.8 小结
    1 MFC为访问数据库提供了OLE DB 和ODBC支持
    2 要使用具有ODBC的数据库,必须注册数据库
    3 数据库的连接由CDatabase或CDaoDatabase对象表示
    4 记录集对象表示应用于一组已定义表的QL SELECT语句,如果必要的话,在创建记录集对象时,架构将自动创建表示数据库连接的数据库对像
    5 通过记录集对象的m_strFilter数据成员,可以为记录集对象添加WHERE子句,
    6 通过记录集的m_strSort数据成员,可以为记录集定义ORDER BY子句
    7 记录视图对象用于显示记录集对象的内容

    */

  • 相关阅读:
    skynet debug console 使用
    在linux上定时修改root密码,以邮件形式发送给使用者
    在linux nginx服务器上,给内网ip配置https
    在linux apache服务器上,给内网ip配置https
    redis集群配置
    记一次删除k8s namespace无法删除的问题
    向docker镜像中传递变量的两种方式
    用kubeadm简单部署k8s
    第十六天python3 文件IO(二)
    第十五天python3 文件IO(一)
  • 原文地址:https://www.cnblogs.com/xiangxiaodong/p/2830110.html
Copyright © 2011-2022 走看看