工控编程吧

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

作者: qq263946146    时间: 2019-8-9 11:33
标题: 上位机MFC如何使用ADO在数据库中移动记录集
1.初始化COM库
        if (!SUCCEEDED(CoInitialize(NULL)))
        {
                ::AfxMessageBox(_T("Failed to initialize COM!"));
                return FALSE;
        }

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


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

最后 就是使用按钮来操作数据库
如前移,后移等

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

  8.         //判断记录集是否为空
  9.         if (m_pRecordset->BOF && m_pRecordset->adoEOF)
  10.         {
  11.                 return;
  12.         }

  13.         //移动记录集
  14.         try
  15.         {
  16.                 m_pRecordset->MoveFirst();
  17.         }
  18.         catch(_com_error e)
  19.         {
  20.                 TRACE(_T("%s\n"), e.ErrorMessage());
  21.                 return;
  22.         }
  23.                
  24.         //读取记录集
  25.         _variant_t varValue;
  26.         CString strName = _T("");
  27.         int nAge = 0;
  28.         try
  29.         {
  30.                 varValue = m_pRecordset->GetCollect(_variant_t(_T("NAME")));
  31.                 if (varValue.vt != VT_NULL)
  32.                 {
  33.                         strName = varValue.bstrVal;
  34.                 }
  35.                 else
  36.                 {
  37.                         strName = _T("");
  38.                 }

  39.                 varValue = m_pRecordset->GetCollect(_variant_t(_T("AGE")));
  40.                 if (varValue.vt != VT_NULL)
  41.                 {
  42.                         nAge = varValue.intVal;
  43.                 }
  44.                 else
  45.                 {
  46.                         nAge = 0;
  47.                 }
  48.         }
  49.         catch(_com_error e)
  50.         {
  51.                 TRACE(_T("%s\n"), e.ErrorMessage());
  52.                 return;
  53.         }

  54.         //刷新
  55.         SetDlgItemText(IDC_NAME, strName);
  56.         SetDlgItemInt(IDC_AGE, nAge);
  57. }

  58. void CGkbc8Dlg::OnMovelast()
  59. {
  60. if (!(m_pRecordset->State & adStateOpen))
  61.         {
  62.                 AfxMessageBox((_T("记录集未打开。")));
  63.                 return;
  64.         }

  65.         //判断记录集是否为空
  66.         if (m_pRecordset->BOF && m_pRecordset->adoEOF)
  67.         {
  68.                 return;
  69.         }

  70.         //移动记录集
  71.         try
  72.         {
  73.                 m_pRecordset->MoveLast();
  74.         }
  75.         catch(_com_error e)
  76.         {
  77.                 TRACE(_T("%s\n"), e.ErrorMessage());
  78.                 return;
  79.         }
  80.        
  81.         //读取记录集
  82.         _variant_t varValue;
  83.         CString strName = _T("");
  84.         int nAge = 0;
  85.         try
  86.         {
  87.                 varValue = m_pRecordset->GetCollect(_variant_t(_T("NAME")));
  88.                 if (varValue.vt != VT_NULL)
  89.                 {
  90.                         strName = varValue.bstrVal;
  91.                 }
  92.                 else
  93.                 {
  94.                         strName = _T("");
  95.                 }

  96.                 varValue = m_pRecordset->GetCollect(_variant_t(_T("AGE")));
  97.                 if (varValue.vt != VT_NULL)
  98.                 {
  99.                         nAge = varValue.intVal;
  100.                 }
  101.                 else
  102.                 {
  103.                         nAge = 0;
  104.                 }
  105.         }
  106.         catch(_com_error e)
  107.         {
  108.                 TRACE(_T("%s\n"), e.ErrorMessage());
  109.                 return;
  110.         }

  111.           //刷新
  112.         SetDlgItemText(IDC_NAME, strName);
  113.         SetDlgItemInt(IDC_AGE, nAge);
  114. }

  115. void CGkbc8Dlg::OnMovenext()
  116. {
  117.         if (!(m_pRecordset->State & adStateOpen))
  118.         {
  119.                 AfxMessageBox((_T("记录集未打开。")));
  120.                 return;
  121.         }

  122.         //判断记录集是否为空
  123.         if (m_pRecordset->BOF && m_pRecordset->adoEOF)
  124.         {
  125.                 return;
  126.         }

  127.         //移动记录集
  128.         try
  129.         {
  130.                 m_pRecordset->MoveNext();

  131.                 if (m_pRecordset->adoEOF)
  132.                 {
  133.                         m_pRecordset->MoveFirst();
  134.                 }
  135.         }
  136.         catch(_com_error e)
  137.         {
  138.                 TRACE(_T("%s\n"), e.ErrorMessage());
  139.                 return;
  140.         }

  141.         //读取记录集
  142.         _variant_t varValue;
  143.         CString strName = _T("");
  144.         int nAge = 0;
  145.         try
  146.         {
  147.                 varValue = m_pRecordset->GetCollect(_variant_t(_T("NAME")));
  148.                 if (varValue.vt != VT_NULL)
  149.                 {
  150.                         strName = varValue.bstrVal;
  151.                 }
  152.                 else
  153.                 {
  154.                         strName = _T("");
  155.                 }

  156.                 varValue = m_pRecordset->GetCollect(_variant_t(_T("AGE")));
  157.                 if (varValue.vt != VT_NULL)
  158.                 {
  159.                         nAge = varValue.intVal;
  160.                 }
  161.                 else
  162.                 {
  163.                         nAge = 0;
  164.                 }
  165.         }
  166.         catch(_com_error e)
  167.         {
  168.                 TRACE(_T("%s\n"), e.ErrorMessage());
  169.                 return;
  170.         }

  171.           //刷新
  172.         SetDlgItemText(IDC_NAME, strName);
  173.         SetDlgItemInt(IDC_AGE, nAge);
  174. }
复制代码


(, 下载次数: 1)