“特别需要指出的是:在生成的应用程序框架View类(如:CSuper_ESView)中,包含一个指向CSuper_ESSet对象的指针m_pSet,该指针由AppWizard建立,目的是在视表单和记录集之间建立联系,使得记录集中的查询结果能够很容易地在视表单上显示出来。”
 
  以上是网上搜索到的教程的原文。
  这个m_pSet到底是哪来的?我怎么从来没看到mfc自动生成这个指针。是不是应该是自定义的CRecrodset对像的指针?另外,我怎么得到用sql查询出来的结果?请大家指点一下。  

解决方案 »

  1.   

    CSuper_ESSet *m_pSet;//应该是这么定义的,CSuper_ESSet是一个CRecordset的派生类吧!这是采用ODBC的数据库访问方式。网上的例子很多
    http://www.vckbase.com/document/listdoc.asp?mclsid=11&sclsid=1101
      

  2.   

    网上的例子我也看了不少,就是没搞清楚这个m_pSet是怎么来的。看看这个:一个完善的ODBC数据库程序
    作者:刘永超大家知道用VC开发数据库程序,一般有两种选择:ODBC或ADO。ODBC出现的较早,用的人也多。ADO是微软正大力支持和发展的技术,致力于学习VC的程序员应该现在就学习这种技术。
    在这个例字中我还是采用了自己更为熟悉的ODBC。程序的实现有两个关键地方:一、ODBC两个类的运用。二、LISTCONTROL控件的使用。程序的视图用CRecordView类,具体配置可以参考源程序。程序的实现主要在视图文件中完成,实现的功能有:增加记录、删除记录、修改记录、排序记录、查寻记录,并且在控件表格中直观的显示。本程序采用的是AECESS数据库,当然也可采用ORACLE等其它数据库。整个程序的界面简洁、直观(见下图)。
    下面介绍具体步骤: 
    首先根据数据库的内容确定表格的样式,这里如下设计:
    1.在视图头文件中给List Control控件加入Contrl 变量 m_ListCtrl。在实现文件的OnInitialUpdate()函数中加入如下语句:
    //设表格表题和列的宽度
    m_ListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
    m_ListCtrl.InsertColumn(0,_T("学号"),LVCFMT_IMAGE|LVCFMT_LEFT);
    m_ListCtrl.InsertColumn(1,_T("姓名"));
    m_ListCtrl.InsertColumn(2,_T("数学"));
    m_ListCtrl.InsertColumn(3,_T("英语"));
    int j;
     for(j=0;j<4;j++)
    {
      m_ListCtrl.SetColumnWidth(j ,90);
    }
    这样列表题就设置好,同时设置列的宽度。还要特别注意的一点,要在List Control控件的属性页Styles中设report属性。因为程序一运行时,要求所有记录都显示出来所以接着增加了一个Show()函数,为了它的重用性,我对它进行了封装。在后面的程序中大家可以看到它的好处。Show()函数如下:int  CLhwyView::Show()
    {
    int i=0;
    m_pSet->MoveFirst();    ////////////////////////////////////////////////////////
       do                            //////////就是这里,直接就使用了这个指针也没有//////////
                                     /////////定义.不知道是从哪来的。////////////////////////
     {                      ////////////////////////////////////////////////////////
    CString s;
            s.Format("%d",m_pSet->m_column1);
            m_ListCtrl.InsertItem(i,s,0);
      m_ListCtrl.SetItemText(i,1,m_pSet->m_column2);
            s.Format("%d",m_pSet->m_column3);
          m_ListCtrl.SetItemText(i,2,s);
            s.Format("%d",m_pSet->m_column4);
            m_ListCtrl.SetItemText(i,3,s);
    i++;
            m_pSet->MoveNext();

    }  while(!m_pSet->IsEOF());
            m_pSet->MoveFirst();
    return i;
    }
      

  3.   

    m_pSet 是你工程里面试图类CLhwyView的一个数据成员。 你可以在CLhwyView找到它。
    CLhwySet : public CRecordset
    CLhwySet *m_pSet;
    不是CRecordView的数据成员。