QQ登录

只需一步,快速开始

上位机MFC如何使用ADO执行SQL命令

[ 复制链接 ]

上位机MFC如何使用ADO执行SQL命令

上位机MFC如何使用ADO执行SQL命令


当前这里准备一个例程。
首先是自定义 一些变量与函数,再如界面准备一些控件。
  1. _ConnectionPtr m_pConnection;
  2.         _RecordsetPtr m_pRecordset;
  3.                 _CommandPtr m_pCommand;
  4. BOOL OpenDatabase(LPCTSTR lpszConnect, long nOptions=adConnectUnspecified);
  5. BOOL CloseDatabase();
  6.         BOOL OpenRecordset(LPCTSTR lpszSource, long nCursorType=adOpenDynamic,
  7.                 long nLockType=adLockOptimistic, long nOptions=adCmdText);
  8.         BOOL CloseRecordset();
复制代码
然后初始化这些变量与控件,与实现函数体。
  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.         if (!SUCCEEDED(m_pCommand.CreateInstance(__uuidof(Command))))
  12.         {
  13.                 m_pCommand = NULL;
  14.                 TRACE(_T("Command CreateInstance Failed!"));
  15.         }
  16.         //打开数据库
  17.         CString strConnect = _T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source= Demo.mdb");
  18.         if (!OpenDatabase(strConnect))
  19.         {
  20.                 AfxMessageBox(_T("数据库打开失败。"));
  21.         }
  22.         m_pCommand->ActiveConnection = m_pConnection;
  23.        
  24.                 //初始化ListCtrl
  25.         CListCtrl* pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST1);
  26.         pListCtrl->SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
  27.         pListCtrl->InsertColumn(1, _T("序号"), LVCFMT_CENTER, 80);
  28.         pListCtrl->InsertColumn(2, _T("姓名"), LVCFMT_CENTER, 100);
  29.         pListCtrl->InsertColumn(3, _T("年龄"), LVCFMT_CENTER, 100);

  30.         SetDlgItemText(IDC_COMMAND, _T("SELECT * FROM DemoTable"));
复制代码

  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. }
复制代码
记得列表控件设置属性为报表

上位机MFC如何使用ADO执行SQL命令

上位机MFC如何使用ADO执行SQL命令

最后就是调用按钮执行SQL命令。
  1. void CGkbc8Dlg::OnButton3()
  2. {
  3.         CString strCommand = _T("");
  4.         GetDlgItemText(IDC_COMMAND, strCommand);

  5.         //执行SQL命令
  6.         m_pCommand->CommandText = _bstr_t(strCommand);
  7.         _variant_t vNULL;
  8.         vNULL.vt = VT_ERROR;
  9.         vNULL.scode = DISP_E_PARAMNOTFOUND;
  10.         try
  11.         {
  12.                 m_pRecordset = m_pCommand->Execute(&vNULL, &vNULL, adCmdText);
  13.         }
  14.         catch (_com_error& e)
  15.         {
  16.                 TRACE(_T("%s\n"), e.ErrorMessage());
  17.                 return;
  18.         }

  19.         //读取记录集
  20.         if (m_pRecordset->BOF && m_pRecordset->adoEOF)
  21.         {
  22.                 return;
  23.         }
  24.         m_pRecordset->MoveFirst();
  25.         int n = 0;
  26.         while (!m_pRecordset->adoEOF)
  27.         {
  28.                 _variant_t varValue;
  29.                 CString strName = _T("");
  30.                 int nAge = 0;

  31.                 varValue = m_pRecordset->GetCollect(_variant_t(_T("NAME")));
  32.                 if (varValue.vt != VT_NULL)
  33.                 {
  34.                         strName = varValue.bstrVal;
  35.                 }
  36.                 else
  37.                 {
  38.                         strName = _T("");
  39.                 }

  40.                 varValue = m_pRecordset->GetCollect(_variant_t(_T("AGE")));
  41.                 if (varValue.vt != VT_NULL)
  42.                 {
  43.                         nAge = varValue.intVal;
  44.                 }
  45.                 else
  46.                 {
  47.                         nAge = 0;
  48.                 }

  49.                 //刷新ListCtrl
  50.                 CListCtrl* pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST1);
  51.                 CString strText = _T("");
  52.                 strText.Format(_T("%d"), n + 1);
  53.                 pListCtrl->InsertItem(n, strText);
  54.                 strText.Format(_T("%s"), strName);
  55.                 pListCtrl->SetItemText(n, 1, strText);
  56.                 strText.Format(_T("%d"), nAge);
  57.                 pListCtrl->SetItemText(n, 2, strText);
  58.                 n++;

  59.                 m_pRecordset->MoveNext();
  60.         }       
  61. }
复制代码
请点击此处下载

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

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

文件名称:上位机MFC如何使用ADO执行SQL命令.rar 
文件大小:185.26 KB  售价:1金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我


  

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

  

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


  

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

  

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

  

QQ联系我

微信扫扫联系我

  



回复

使用道具 举报

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