• MFC 简单数据库设计(1)


    #pragma once
    #include "afxcmn.h"
    #include "afxwin.h"

    //下面这个要加入,因为要用ADO
    #import  "c:\program files\common files\system\ado\msado15.dll"  no_namespace   rename("EOF","adoEOF")

    // CStudentDlg 对话框
    class CStudentDlg : public CDialog
    {
    // 构造
    public:
     CStudentDlg(CWnd* pParent = NULL); // 标准构造函数
           bool m_bOpen;

    //下面两个是重点,一个是数据库的链接,一个是数据库的操作
       _ConnectionPtr m_pConnection;
       _RecordsetPtr m_pRecordset;

    // 对话框数据
     enum { IDD = IDD_STUDENT_DIALOG };

     protected:
     virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持


    // 实现
    protected:
     HICON m_hIcon;

     // 生成的消息映射函数
     virtual BOOL OnInitDialog();
     afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
     afx_msg void OnPaint();
     afx_msg HCURSOR OnQueryDragIcon();
     DECLARE_MESSAGE_MAP()
    public:
     CListCtrl m_ListInfo;
     CComboBox m_Sex;
     afx_msg void OnBnClickedButton1();


     bool OpenDBLink(void);
     void CloseDBLink(void);
     void LoadAllData(void);


    };

    实现:


    void CStudentDlg::OnBnClickedButton1()
    {
         this->OpenDBLink();
      this->LoadAllData();
    }

    bool CStudentDlg::OpenDBLink(void)
    {
     if(m_bOpen)
     {
      this->CloseDBLink();
     }
     try{
      

      CoInitialize(NULL);
      //m_pConnection.CreateInstance(__uuidof(Connection));

      HRESULT hr;
       hr = m_pConnection.CreateInstance("ADODB.Connection");

      if(SUCCEEDED(hr))
      {
       hr=m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=student.mdb","","",adModeUnknown);


       m_bOpen = true;
      }
      else
      {
       m_bOpen =false;
       return m_bOpen;
      }

     try
         { 
       m_pRecordset.CreateInstance("ADODB.Recordset");
             m_pRecordset->Open("SELECT * FROM student",      
             m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针
             adOpenDynamic,
             adLockOptimistic,
             adCmdText);
         }
         catch(_com_error *e)
         {
             AfxMessageBox(e->ErrorMessage());
             //cout<<e->ErrorMessage()<<endl;
         } 

      
         //m_pRecordset.CreateInstance("ADODB.Recordset");
      //m_pRecordset->Open("SELECT * FROM student",_variant_t((IDispatch*)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
      
      if(!m_pRecordset->BOF)
      m_pRecordset->MoveFirst();
     }
    catch(_com_error e)
    {
           
     
           MessageBox("失败!"+e.Description());
        m_bOpen = false;
     
    }


     

     return true;
    }

    void CStudentDlg::CloseDBLink(void)
    {
      if(m_bOpen==false)
      return;
     m_pRecordset->Close();
      m_pConnection->Close();
    }

    void CStudentDlg::LoadAllData(void)
    {
     if(m_bOpen==false)
      return;
     _variant_t value;
     COleDateTime time;
     CString name,sex;

     int age;

     m_ListInfo.DeleteAllItems();


     int index=0;

     _variant_t var;
         char *strID;
         try
         {
             if(!m_pRecordset->BOF)
                 m_pRecordset->MoveFirst();
             else
             {
                // cout<<"表内数据为空"<<endl;
                // return 1;
             }
     
           
             // 读入库中各字段并加入列表框中
             while(!m_pRecordset->adoEOF)
             {
      
                 var = m_pRecordset->GetCollect("NAME");
                

                 m_pRecordset->MoveNext();
             }
         }
         catch(_com_error *e)
         {
             //cout<<e->ErrorMessage()<<endl;
         } 

      m_Sex.AddString(_T("未知"));
       m_Sex.AddString(_T("男"));
        m_Sex.AddString(_T("女"));
        m_Sex.SetCurSel(0);


      m_ListInfo.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP);
      m_ListInfo.InsertColumn(0,CString("姓名"),LVCFMT_CENTER,100);
      m_ListInfo.InsertColumn(1,CString("性别"),LVCFMT_LEFT,50);
      m_ListInfo.InsertColumn(2,CString("年龄"),LVCFMT_LEFT,50);
                if(!m_pRecordset->BOF)
                 m_pRecordset->MoveFirst();
     while(!m_pRecordset->adoEOF )
     {
      value = m_pRecordset->GetCollect("NAME");
      if(value.vt != VT_NULL)
       name = value.bstrVal ;
      else
       name="";

      value=m_pRecordset->GetCollect("SEX");
      if(value.vt !=VT_NULL)
       sex=value.bstrVal ;
      else

       sex="NOO";

        value=m_pRecordset->GetCollect("AGE");
      if(value.vt !=VT_NULL)
       age=(int)value.llVal ;
      else

       age=25;

      m_ListInfo.InsertItem(index,name,0);
      m_ListInfo.SetItemText(index,1,sex);
      
           
      CString temp;
      temp.Format(_T("%d"),age);
      m_ListInfo.SetItemText(index,2,temp);

      index++;

      m_pRecordset->MoveNext();

     }

  • 相关阅读:
    CodeBlocks下载与安装教程
    Delphi 资源管理器套件
    做了一个 62 进制的简单实现
    关于 TRegEx.Split()
    Delphi 的链式代码
    在Linux上编译dotnet cli的源代码生成.NET Core SDK的安装包
    尝试解决在构造函数中同步调用Dns.GetHostAddressesAsync()引起的线程死锁
    .NET Core中遇到奇怪的线程死锁问题:内存与线程数不停地增长
    将asp.net core站点发布到IIS上遇到的问题
    .NET Core 构建配置文件从 project.json 到 .csproj
  • 原文地址:https://www.cnblogs.com/Mayvar/p/wanghonghua_201003101949.html
Copyright © 2020-2023  润新知