当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>Visual C++教程

VC++数据库通用模块开发:数据显示

    (1) 使用MFC App Wizard(exe)新建一个基于对话框(Dialog based)类型的应用程序,命名为Data_Disp2.

    (2) 选择Project?|?Add to Project?|?Components and Controls命令,在弹出的Components and Controls Gallery对话框中选择Registered ActiveX Controls文件夹,如图4-12所示。

VC++数据库通用模块开发:数据显示

 

    单击Insert按钮,在弹出的Components and Controls Gallery对话框中选择Microsoft DataGrid Control,Vision6.0(OLEDB)控件,如图4-13所示。

VC++数据库通用模块开发:数据显示

    单击Insert按钮,在弹出的Confirm Classes对话框中选择要添加的子类。如图4-14所示。单击OK按钮后,DataGrid控件就添加到控件工具条上,如图4-15所示。

VC++数据库通用模块开发:数据显示

    至此,DataGrid控件就添加到工程中。

    (3) 将DataGrid控件拖入对话框界面,修改其ID为ID_DATAGRID_TEST,如图4-16所示。

VC++数据库通用模块开发:数据显示

    为ID_DATAGRID_TEST添加一个变量,如下所示。

    CDataGrid  m_dbTest;

    (4) 使用Access创建数据库来存储数据,数据库名为DataDisp2.mdb,它包含表BALANCE.在BALANCE表中存储的是“个人收支情况”的基本信息,其结构及字段说明如表4-4所示。

VC++数据库通用模块开发:数据显示

    (5) 在对话框类的头文件Data_Disp2Dlg.h中添加下面语句。

    #import "c:program filescommon filessystemadomsado15.dll" no_namespace

    rename("EOF","adoEOF")

    在对话框类中添加数据库连接对象和数据集对象,如下所示。

    _ConnectionPtr m_pConnection;

    _RecordsetPtr  m_pRecordset;

    在对话框类中引用DataGrid控件的子类头文件,如下所示。

    #include "Columns.h"

    #include "Column.h"

    在对话框类的初始化函数中连接数据库与数据集,将指定数据集绑定到m_dbTest,并设置列宽和列头,将数据显示出来。

 BOOL CData_Disp2Dlg::OnInitDialog()
  {
    CDialog::OnInitDialog();
    // Add "About..." menu item to system menu.
    // IDM_ABOUTBOX must be in the system command range.
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX < 0xF000);
    CMenu* pSysMenu = GetSystemMenu(FALSE);
    if (pSysMenu != NULL)
    {
      CString strAboutMenu;
      strAboutMenu.LoadString(IDS_ABOUTBOX);
      if (!strAboutMenu.IsEmpty())
      {
        pSysMenu->AppendMenu(MF_SEPARATOR);
        pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
      }
    }
    // Set the icon for this dialog. The framework does this automatically
    // when the application's main window is not a dialog
    SetIcon(m_hIcon, TRUE);   // Set big icon
    SetIcon(m_hIcon, FALSE);    // Set small icon
    //初始化数据库连接
    m_pConnection.CreateInstance("ADODB.Connection");
    //连接数据库
    try
    {
      //超时检查
      m_pConnection->ConnectionTimeout = 8;
      m_pConnection->PutCursorLocation(adUseClient);
      m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0; Data
  Source=DataDisp2.mdb", "", "", adModeUnknown);
    }
    catch(_com_error e)
    {
      AfxMessageBox("数据库连接失败!");
      return FALSE;
    }
    try
    {
  //初始化记录集对象
  m_pRecordset.CreateInstance("ADODB.Recordset");
  //打开记录集
      m_pRecordset->Open("SELECT * FROM BALANCE",_variant_t((IDispatch
  *)m_pConnection,true), adOpenDynamic, adLockPessimistic, adCmdText);
    } 
    catch(_com_error e)//捕捉异常
{
      CString temp;
      temp.Format("aaa连接数据库错误信息:%s",e.ErrorMessage());
      AfxMessageBox(temp);
      return 0;
    }
  //绑定数据源
    m_dbTest.SetRefDataSource(NULL);
    m_dbTest.SetRefDataSource((LPUNKNOWN)m_pRecordset);
    m_dbTest.SetColumnHeaders(2) ;
  //设置列宽与列头
    _variant_t vIndex;
    vIndex = long(0);
    m_dbTest.GetColumns().GetItem(vIndex).SetWidth(50);
    m_dbTest.GetColumns().GetItem(vIndex).SetCaption("姓名");
    vIndex = long(1);
    m_dbTest.GetColumns().GetItem(vIndex).SetWidth(50);
    m_dbTest.GetColumns().GetItem(vIndex).SetCaption("收入");
    vIndex = long(2);
    m_dbTest.GetColumns().GetItem(vIndex).SetWidth(50);
    m_dbTest.GetColumns().GetItem(vIndex).SetCaption("支出");
    vIndex = long(3);
    m_dbTest.GetColumns().GetItem(vIndex).SetWidth(30);
    m_dbTest.GetColumns().GetItem(vIndex).SetCaption("余额");
    vIndex = long(4);
    m_dbTest.GetColumns().GetItem(vIndex).SetWidth(30);
    m_dbTest.GetColumns().GetItem(vIndex).SetCaption("时间");
  //显示更新
    m_dbTest.Refresh();
    return TRUE;
  }

    至此就实现用表格显示数据库中的数据,但是这个程序的功能很有限,只能显示数据,不能对表格中的数据进行编辑。接下来介绍几种常用的表格编辑方法。
相关内容
赞助商链接