工控编程吧

标题: 上位机MFC如何使用ADO在数据库中访问记录 [打印本页]

作者: qq263946146    时间: 2019-8-9 11:55
标题: 上位机MFC如何使用ADO在数据库中访问记录
和前面例程一样,也是初始化COM库,加载ODA库。        if (!SUCCEEDED(CoInitialize(NULL)))
        {
                ::AfxMessageBox(_T("Failed to initialize COM!"));
                return FALSE;
        }


#import "c:\program files\common files\system\ado\msado15.dll"\
                no_namespace\
                rename("EOF", "adoEOF")

添加自定义数据库变量与函数
  1. _ConnectionPtr m_pConnection;
  2.         _RecordsetPtr m_pRecordset;
  3.         BOOL OpenDatabase(LPCTSTR lpszConnect, long nOptions=adConnectUnspecified);
  4.         BOOL CloseDatabase();
  5.         BOOL OpenRecordset(LPCTSTR lpszSource, long nCursorType=adOpenDynamic,
  6.                           long nLockType=adLockOptimistic, long nOptions=adCmdText);
  7.         BOOL CloseRecordset();
复制代码


  1. BOOL CGkbc8Dlg::OpenDatabase(LPCTSTR lpszConnect, long nOptions)
  2. {
  3.         ASSERT(m_pConnection != NULL);
  4.         ASSERT(lpszConnect != NULL);
  5.         ASSERT(AfxIsValidString(lpszConnect));
  6.        
  7.         //打开数据库连接
  8.         try
  9.         {
  10.                 return SUCCEEDED(m_pConnection->Open(_bstr_t(lpszConnect),
  11.                         _T(""), _T(""), nOptions));
  12.         }
  13.         catch (_com_error& e)
  14.         {
  15.                 TRACE(_T("%s\n"), e.ErrorMessage());
  16.                 return FALSE;
  17.         }
  18. }

  19. BOOL CGkbc8Dlg::CloseDatabase()
  20. {
  21.         ASSERT(m_pConnection != NULL);

  22.         //关闭数据库连接
  23.         try
  24.         {
  25.                 if (m_pConnection->State & adStateOpen)
  26.                 {
  27.                         return SUCCEEDED(m_pConnection->Close());
  28.                 }
  29.                 else
  30.                 {
  31.                         return TRUE;
  32.                 }
  33.         }
  34.         catch (_com_error& e)
  35.         {
  36.                 TRACE(_T("%s\n"), e.ErrorMessage());
  37.                 return FALSE;
  38.         }
  39. }

  40. BOOL CGkbc8Dlg::OpenRecordset(LPCTSTR lpszSource, long nCursorType,
  41.                                                          long nLockType, long nOptions)
  42. {
  43.         ASSERT(m_pConnection != NULL);
  44.         ASSERT(m_pRecordset != NULL);
  45.         ASSERT(lpszSource != NULL);
  46.         ASSERT(AfxIsValidString(lpszSource));

  47.         //打开记录集
  48.         try
  49.         {
  50.                 return (SUCCEEDED(m_pRecordset->Open(_variant_t(lpszSource),
  51.                                                                                 m_pConnection.GetInterfacePtr(),
  52.                                                                                 (CursorTypeEnum)nCursorType,
  53.                                                                                 (LockTypeEnum)nLockType,
  54.                                                                                 nOptions)));
  55.         }
  56.         catch(_com_error e)
  57.         {
  58.                 TRACE(_T("%s\n"), e.ErrorMessage());
  59.                 return FALSE;
  60.         }
  61. }

  62. BOOL CGkbc8Dlg::CloseRecordset()
  63. {
  64.         ASSERT(m_pRecordset != NULL);

  65.         //关闭记录集
  66.         try
  67.         {
  68.                 if (m_pRecordset->State & adStateOpen)
  69.                 {
  70.                         return SUCCEEDED(m_pRecordset->Close());
  71.                 }
  72.                 else
  73.                 {
  74.                         return TRUE;
  75.                 }
  76.         }
  77.         catch (_com_error e)
  78.         {
  79.                 TRACE(_T("%s\n"), e.ErrorMessage());
  80.                 return FALSE;
  81.         }
  82. }
复制代码
再添加控件,一并初始化数据库与控件
  1. if (!SUCCEEDED(m_pConnection.CreateInstance(__uuidof(Connection))))
  2.         {
  3.                 m_pConnection = NULL;
  4.                 TRACE(_T("Database CreateInstance failed"));
  5.         }

  6.         if (!SUCCEEDED(m_pRecordset.CreateInstance(__uuidof(Recordset))))
  7.         {
  8.                 m_pRecordset = NULL;
  9.                 TRACE(_T("Recordset CreateInstance Failed!"));
  10.         }

  11.         //打开数据库
  12.         CString strConnect = _T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source= Demo.mdb");
  13.         if (!OpenDatabase(strConnect))
  14.         {
  15.                 AfxMessageBox(_T("数据库打开失败。"));
  16.                 return false;
  17.         }

  18.         //打开记录集
  19.         CString strSource = _T("SELECT * FROM DemoTable");
  20.         if (!OpenRecordset(strSource))
  21.         {
  22.                 AfxMessageBox(_T("记录集打开失败。"));
  23.                 return false;
  24.         }

  25.         //初始化ListCtrl
  26.         CListCtrl* pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST);
  27.         pListCtrl->SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
  28.         pListCtrl->InsertColumn(1, _T("序号"), LVCFMT_CENTER, 80);
  29.         pListCtrl->InsertColumn(2, _T("姓名"), LVCFMT_CENTER, 100);
  30.         pListCtrl->InsertColumn(3, _T("年龄"), LVCFMT_CENTER, 100);
复制代码


(, 下载次数: 2)