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();

 }

原文地址:https://www.cnblogs.com/Mayvar/p/wanghonghua_201003101949.html