QQ登录

只需一步,快速开始

上位机MFC如何使用ADO在数据库中修改记录

[ 复制链接 ]

上位机MFC如何使用ADO在数据库中修改记录

上位机MFC如何使用ADO在数据库中修改记录

上面是例程截图。
初始化COM库        if (!SUCCEEDED(CoInitialize(NULL)))        {
                ::AfxMessageBox(_T("Failed to initialize COM!"));
                return FALSE;
        }

加载ODA库

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

自定义数据库操作变量与函数
        _ConnectionPtr m_pConnection;
        _RecordsetPtr m_pRecordset;
        BOOL OpenDatabase(LPCTSTR lpszConnect, long nOptions=adConnectUnspecified);
        BOOL CloseDatabase();
        BOOL OpenRecordset(LPCTSTR lpszSource, long nCursorType=adOpenDynamic,
                          long nLockType=adLockOptimistic, long nOptions=adCmdText);
        BOOL CloseRecordset();

  1. BOOL CDemoDlg::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 CDemoDlg::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 CDemoDlg::OpenRecordset(LPCTSTR lpszSource, long nCursorType, long nLockType, long nOptions)
  41. {
  42.         ASSERT(m_pConnection != NULL);
  43.         ASSERT(m_pRecordset != NULL);
  44.         ASSERT(lpszSource != NULL);
  45.         ASSERT(AfxIsValidString(lpszSource));

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

  61. BOOL CDemoDlg::CloseRecorset()
  62. {
  63.         ASSERT(m_pRecordset != NULL);

  64.         //关闭记录集
  65.         try
  66.         {
  67.                 if (m_pRecordset->State & adStateOpen)
  68.                 {
  69.                         return SUCCEEDED(m_pRecordset->Close());
  70.                 }
  71.                 else
  72.                 {
  73.                         return TRUE;
  74.                 }
  75.         }
  76.         catch (_com_error e)
  77.         {
  78.                 TRACE(_T("%s\n"), e.ErrorMessage());
  79.                 return FALSE;
  80.         }
  81. }
复制代码
添加按钮与列表框等控件,并初始化。
  1. //初始化ListCtrl
  2.         CListCtrl* pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST);
  3.         pListCtrl->SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
  4.         pListCtrl->InsertColumn(1, _T("序号"), LVCFMT_CENTER, 80);
  5.         pListCtrl->InsertColumn(2, _T("姓名"), LVCFMT_CENTER, 100);
  6.         pListCtrl->InsertColumn(3, _T("年龄"), LVCFMT_CENTER, 100);

  7.         //读取记录集
  8.         if (m_pRecordset->BOF && m_pRecordset->adoEOF)
  9.         {
  10.                 return FALSE;
  11.         }
  12.         m_pRecordset->MoveFirst();
  13.         int n = 0;
  14.         while (!m_pRecordset->adoEOF)
  15.         {
  16.                 _variant_t varValue;
  17.                 CString strName = _T("");
  18.                 int nAge = 0;

  19.                 varValue = m_pRecordset->GetCollect(_variant_t(_T("NAME")));
  20.                 if (varValue.vt != VT_NULL)
  21.                 {
  22.                         strName = varValue.bstrVal;
  23.                 }
  24.                 else
  25.                 {
  26.                         strName = _T("");
  27.                 }

  28.                 varValue = m_pRecordset->GetCollect(_variant_t(_T("AGE")));
  29.                 if (varValue.vt != VT_NULL)
  30.                 {
  31.                         nAge = varValue.intVal;
  32.                 }
  33.                 else
  34.                 {
  35.                         nAge = 0;
  36.                 }

  37.                 //刷新ListCtrl
  38.                 CString strText = _T("");
  39.                 strText.Format(_T("%d"), n + 1);
  40.                 pListCtrl->InsertItem(n, strText);
  41.                 strText.Format(_T("%s"), strName);
  42.                 pListCtrl->SetItemText(n, 1, strText);
  43.                 strText.Format(_T("%d"), nAge);
  44.                 pListCtrl->SetItemText(n, 2, strText);
  45.                 n++;

  46.                 m_pRecordset->MoveNext();
  47.         }
复制代码
两个按钮的函数

  1. void CGkbc8Dlg::OnButton1()
  2. {
  3.         if (!(m_pRecordset->State & adStateOpen))
  4.         {
  5.                 AfxMessageBox((_T("记录集未打开。")));
  6.                 return;
  7.         }

  8.         //获得记录集当前位置
  9.         CListCtrl* pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST);
  10.         POSITION pos = pListCtrl->GetFirstSelectedItemPosition();
  11.         if (pos == NULL)
  12.         {
  13.                 return;
  14.         }
  15.         int nItem = pListCtrl->GetNextSelectedItem(pos);

  16.        
  17.         CString strName = "工控编程吧";
  18.         long nAge = 5;

  19.         //修改记录集
  20.         if (m_pRecordset->BOF && m_pRecordset->adoEOF)
  21.         {
  22.                 return;
  23.         }
  24.         m_pRecordset->MoveFirst();
  25.         m_pRecordset->Move((long)nItem);
  26.         m_pRecordset->PutCollect(_variant_t(_T("NAME")),
  27.                 _variant_t(strName));
  28.         m_pRecordset->PutCollect(_variant_t(_T("AGE")),
  29.                 _variant_t(nAge));
  30.         m_pRecordset->Update();

  31.         //读取记录集
  32.         pListCtrl->DeleteAllItems();
  33.         if (m_pRecordset->BOF && m_pRecordset->adoEOF)
  34.         {
  35.                 return;
  36.         }
  37.         m_pRecordset->MoveFirst();
  38.         int n = 0;
  39.         while (!m_pRecordset->adoEOF)
  40.         {
  41.                 _variant_t varValue;
  42.                 CString strName = _T("");
  43.                 int nAge = 0;

  44.                 varValue = m_pRecordset->GetCollect(_variant_t(_T("NAME")));
  45.                 if (varValue.vt != VT_NULL)
  46.                 {
  47.                         strName = varValue.bstrVal;
  48.                 }
  49.                 else
  50.                 {
  51.                         strName = _T("");
  52.                 }

  53.                 varValue = m_pRecordset->GetCollect(_variant_t(_T("AGE")));
  54.                 if (varValue.vt != VT_NULL)
  55.                 {
  56.                         nAge = varValue.intVal;
  57.                 }
  58.                 else
  59.                 {
  60.                         nAge = 0;
  61.                 }

  62.                 //刷新ListCtrl
  63.                 CString strText = _T("");
  64.                 strText.Format(_T("%d"), n + 1);
  65.                 pListCtrl->InsertItem(n, strText);
  66.                 strText.Format(_T("%s"), strName);
  67.                 pListCtrl->SetItemText(n, 1, strText);
  68.                 strText.Format(_T("%d"), nAge);
  69.                 pListCtrl->SetItemText(n, 2, strText);
  70.                 n++;

  71.                 m_pRecordset->MoveNext();
  72.         }
  73. }
复制代码


  1. void CGkbc8Dlg::OnRead()
  2. {        if (!(m_pRecordset->State & adStateOpen))
  3.         {
  4.                 AfxMessageBox((_T("记录集未打开。")));
  5.                 return;
  6.         }

  7.         //读取记录集
  8.         CListCtrl* pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST);
  9.         pListCtrl->DeleteAllItems();
  10.         if (m_pRecordset->BOF && m_pRecordset->adoEOF)
  11.         {
  12.                 return;
  13.         }
  14.         m_pRecordset->MoveFirst();
  15.         int n = 0;
  16.         while (!m_pRecordset->adoEOF)
  17.         {
  18.                 _variant_t varValue;
  19.                 CString strName = _T("");
  20.                 int nAge = 0;

  21.                 varValue = m_pRecordset->GetCollect(_variant_t(_T("NAME")));
  22.                 if (varValue.vt != VT_NULL)
  23.                 {
  24.                         strName = varValue.bstrVal;
  25.                 }
  26.                 else
  27.                 {
  28.                         strName = _T("");
  29.                 }

  30.                 varValue = m_pRecordset->GetCollect(_variant_t(_T("AGE")));
  31.                 if (varValue.vt != VT_NULL)
  32.                 {
  33.                         nAge = varValue.intVal;
  34.                 }
  35.                 else
  36.                 {
  37.                         nAge = 0;
  38.                 }

  39.                 //刷新ListCtrl
  40.                 CString strText = _T("");
  41.                 strText.Format(_T("%d"), n + 1);
  42.                 pListCtrl->InsertItem(n, strText);
  43.                 strText.Format(_T("%s"), strName);
  44.                 pListCtrl->SetItemText(n, 1, strText);
  45.                 strText.Format(_T("%d"), nAge);
  46.                 pListCtrl->SetItemText(n, 2, strText);
  47.                 n++;

  48.                 m_pRecordset->MoveNext();
  49.         }
  50. }
复制代码
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:上位机MFC如何使用ADO在数据库中修改记录.rar 
文件大小:182.62 KB  售价:1金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我


  

上位机VC MFC程序开发精典实例大全源码与视频讲解配套下载408例

  

经历1年的编程与录制点击进入查看


  

如果您认可,可联系功能定制!

  

如果您着急,充值会员可直接联系发您资料!

  

QQ联系我

微信扫扫联系我

  


回复

使用道具 举报

快速回复 返回列表 客服中心 搜索