QQ登录

只需一步,快速开始

上位机通过ADO实现数据库操作完整例程

  [ 复制链接 ]

上位机通过ADO实现数据库操作完整例程

上位机通过ADO实现数据库操作完整例程


数据库在WINCC等一些工控产品上会涉及。
当前例程实现数据库常用功能 :
动态创建数据源。
添加数据。
修改数据
删除数据
查找数据

下面是例程中关键代码,完整例程项目工程, 可以帖子尾部下载
  1. void CMy123View::ShowAll(_bstr_t table)//按条件显示数据
  2. {
  3.         CListCtrl*pList = (CListCtrl*)GetDlgItem(IDC_LIST1);
  4.         _RecordsetPtr record = m_ado.GetRecordset(table);
  5.         if(NULL == record)
  6.                 return;
  7.         pList->DeleteAllItems();
  8.         if(record->adoBOF)
  9.                 return;
  10.         record->MoveFirst();
  11.         while(!record->adoEOF)
  12.         {
  13.                 int i= pList->GetItemCount();
  14.                 pList->InsertItem(i, (_bstr_t)record->GetCollect("索引"));
  15.                 pList->SetItemText(i,1,(_bstr_t)record->GetCollect("网站"));
  16.                 pList->SetItemText(i,2,(_bstr_t)record->GetCollect("网址"));
  17.                 pList->SetItemText(i,3,(_bstr_t)record->GetCollect("站长"));
  18.                 record->MoveNext();
  19.         }
  20. }
  21. void CMy123View::OnButton1() //向数据表添加内容
  22. {
  23.         CListCtrl*pList = (CListCtrl*)GetDlgItem(IDC_LIST1);
  24.         CString sIndex,sWebsite,sWebaddr,sWebadmin;
  25.         int nIndex = pList->GetItemCount();
  26.         sIndex.Format("%d",nIndex);
  27.         GetDlgItemText(IDC_EDIT1,sWebsite);
  28.         GetDlgItemText(IDC_EDIT2,sWebaddr);
  29.         GetDlgItemText(IDC_EDIT3,sWebadmin);
  30.         _bstr_t vSQL = "insert into website values('"+sIndex+"','"+sWebsite+"','"+sWebaddr+"','"+sWebadmin+"')";
  31.         if(!m_ado.ExecuteSQL(vSQL) )
  32.                 return;
  33.         ShowAll(_bstr_t("select * from website"));
  34. }

  35. void CMy123View::OnButton2()//向数据表删除内容
  36. {
  37.         CListCtrl*pList = (CListCtrl*)GetDlgItem(IDC_LIST1);
  38.         POSITION pos = pList->GetFirstSelectedItemPosition();
  39.         if(NULL  ==  pos)
  40.                 return;
  41.         CString sIndex = pList->GetItemText(pList->GetNextSelectedItem(pos),0);
  42.         _bstr_t vSQL = "delete from website where 索引="+sIndex+"";
  43.         if(!m_ado.ExecuteSQL(vSQL) )
  44.                 return;
  45.         ShowAll(_bstr_t("select * from website"));
  46. }

  47. void CMy123View::OnButton3() //向数据表修改内容
  48. {
  49.         CListCtrl*pList = (CListCtrl*)GetDlgItem(IDC_LIST1);
  50.         POSITION pos = pList->GetFirstSelectedItemPosition();
  51.         if(NULL  ==  pos)
  52.                 return;
  53.         int nIndex = pList->GetNextSelectedItem(pos);
  54.         CString sWebsite,sWebaddr,sWebadmin,sIndex = pList->GetItemText(nIndex,0);
  55.         GetDlgItemText(IDC_EDIT1,sWebsite);
  56.         GetDlgItemText(IDC_EDIT2,sWebaddr);
  57.         GetDlgItemText(IDC_EDIT3,sWebadmin);
  58.         _bstr_t vSQL ="Update website SET 网站='"+sWebsite+"',网址='"+sWebaddr+"', 站长='"+sWebadmin+"' where 索引="+sIndex+"";
  59.         if(!m_ado.ExecuteSQL(vSQL) )
  60.                 return;
  61.         ShowAll(_bstr_t("select * from website"));
  62. }

  63. void CMy123View::OnButton4() //按条件查找
  64. {
  65.         CString sContent;
  66.         GetDlgItemText(IDC_EDIT4,sContent);
  67.         if(sContent.IsEmpty())
  68.                 return;
  69.         CComboBox*pCom = (CComboBox*)GetDlgItem(IDC_COMBO1);
  70.         CString sText;
  71.         pCom->GetLBText(pCom->GetCurSel(),sText);
  72.         _bstr_t vSQL;
  73.         if("索引" == sText)
  74.                 vSQL = "select * from website where "+sText+" = "+sContent+"";
  75.         else
  76.                 vSQL = "select * from website where "+sText+" = '"+sContent+"'";
  77.         ShowAll(vSQL);
  78. }

  79. void CMy123View::OnSelchangeCombo1() //查找组合框更改内容时
  80. {       
  81.         ShowAll(_bstr_t("select * from website"));
  82. }
  83. void CMy123View::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
  84. {
  85.         CListCtrl*pList = (CListCtrl*)GetDlgItem(IDC_LIST1);
  86.         POSITION pos = pList->GetFirstSelectedItemPosition();
  87.         if(NULL  ==  pos)
  88.                 return;
  89.         int nInext = pList->GetNextSelectedItem(pos);
  90.         SetDlgItemText(IDC_EDIT1,pList->GetItemText(nInext,1));
  91.         SetDlgItemText(IDC_EDIT2,pList->GetItemText(nInext,2));
  92.         SetDlgItemText(IDC_EDIT3,pList->GetItemText(nInext,3));
  93.         *pResult = 0;
  94. }
复制代码
下面是集成类代码
  1. #if !defined(AFX_ADO_H__41E97289_18A5_48A9_9016_6C604EA024E0__INCLUDED_)
  2. #define AFX_ADO_H__41E97289_18A5_48A9_9016_6C604EA024E0__INCLUDED_

  3. #if _MSC_VER > 1000
  4. #pragma once
  5. #endif // _MSC_VER > 1000

  6. #import "C:\\Program Files\\Common Files\\System\\ado\\msadox.dll" \
  7. rename("EOF","adoEOF") rename("BOF","adoBOF")
  8. #import "C:\\Program Files\\Common Files\\System\\ado\\msado15.dll"no_namespace \
  9. rename("EOF","adoEOF") rename("BOF","adoBOF")
  10. #include <io.h>

  11. class CADO : public CObject  
  12. {
  13. private:
  14.         _ConnectionPtr m_pConnect;
  15.         _RecordsetPtr  m_pRecord;

  16. private:
  17.         void Connect();
  18.         void DisConnect();
  19. public:
  20.         BOOL ExecuteSQL(_bstr_t bstrSQL);
  21.         _RecordsetPtr GetRecordset(_bstr_t bstrSQL);
  22. public:
  23.         CADO();
  24.         virtual ~CADO();

  25. };

  26. #endif // !defined(AFX_ADO_H__41E97289_18A5_48A9_9016_6C604EA024E0__INCLUDED_)
复制代码
  1. // ADO.cpp: implementation of the CADO class.
  2. //
  3. //////////////////////////////////////////////////////////////////////

  4. #include "stdafx.h"
  5. #include "123.h"
  6. #include "ADO.h"

  7. #ifdef _DEBUG
  8. #undef THIS_FILE
  9. static char THIS_FILE[]=__FILE__;
  10. #define new DEBUG_NEW
  11. #endif



  12. void CADO::Connect()
  13. {
  14.         DisConnect();
  15.         char cPath[MAX_PATH];
  16.         GetModuleFileName(NULL,cPath,MAX_PATH);
  17.         CString sPath(cPath);
  18.         sPath=sPath.Left(sPath.ReverseFind('\\'));
  19.         sPath +="\\data\\Test.mdb";
  20.         if(-1 == _access(sPath,0))//数据源文件不存在
  21.         {
  22.                 //创建MDB文件
  23.                 strcpy(cPath,sPath);
  24.                 sPath.Format("Provider=Microsoft.JET.OLEDB.4.0;Data Source=%s",cPath);
  25.                 _bstr_t strcnn = sPath;
  26.                 ADOX::_CatalogPtr pCat;
  27.                 pCat.CreateInstance(__uuidof(ADOX::Catalog));
  28.                 pCat->Create(strcnn);       
  29.                 ////在MDB文件内创建表格
  30.                 ADOX::_TablePtr pTable;
  31.                 pTable.CreateInstance(__uuidof(ADOX::Table));
  32.                 pTable->PutName("website");
  33.                 pTable->Columns->Append("索引",ADOX::adInteger,0);
  34.                 pTable->Columns->Append("网站",ADOX::adVarWChar,50);
  35.                 pTable->Columns->Append("网址",ADOX::adVarWChar,50);
  36.                 pTable->Columns->Append("站长",ADOX::adVarWChar,20);
  37.                 pCat->Tables->Append( pTable.GetInterfacePtr() );               
  38.                 pTable =NULL;
  39.                 pCat   =NULL;
  40.         }
  41.         strcpy(cPath,sPath);
  42.         sPath.Format("Provider=Microsoft.JET.OLEDB.4.0;Data Source=%s",cPath);
  43.         try        {
  44.                 m_pConnect.CreateInstance(__uuidof(Connection));
  45.                 m_pConnect->Open(_bstr_t(sPath),"","",adModeUnknown);
  46.                 m_pRecord.CreateInstance(__uuidof(Recordset));
  47.         }
  48.         catch (_com_error e){
  49.                 AfxMessageBox(e.ErrorMessage());               
  50.         }
  51. }
  52. void CADO::DisConnect()
  53. {
  54.         if(NULL!=m_pRecord&&m_pRecord->State)
  55.                 m_pRecord->Close();
  56.         m_pRecord = NULL;
  57.         if(NULL!=m_pConnect&&m_pConnect->State)
  58.                 m_pConnect->Close();
  59.         m_pConnect= NULL;
  60. }
  61. CADO::CADO()
  62. {
  63.         ::CoInitialize(NULL);
  64.         m_pConnect = NULL;
  65.         m_pRecord  = NULL;
  66.         Connect();
  67. }
  68. CADO::~CADO()
  69. {
  70.         DisConnect();
  71.         ::CoUninitialize();
  72. }

  73. BOOL CADO::ExecuteSQL(_bstr_t bstrSQL)
  74. {
  75.         try
  76.         {        m_pConnect->Execute(bstrSQL,NULL,adCmdText);
  77.         return true;
  78.         }
  79.         catch(_com_error e){
  80.                 AfxMessageBox(e.ErrorMessage());
  81.                 return false;
  82.         }
  83. }
  84. _RecordsetPtr CADO::GetRecordset(_bstr_t bstrSQL)
  85. {
  86.         if(NULL!=m_pRecord&&m_pRecord->State)
  87.                 m_pRecord->Close();
  88.         try{
  89.                 m_pRecord->Open(bstrSQL,m_pConnect.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
  90.         }
  91.         catch(_com_error e){
  92.                 AfxMessageBox(e.ErrorMessage());
  93.                 return NULL;
  94.         }
  95.         return m_pRecord;
  96. }
复制代码
游客,为过滤非法行为,全站隐藏资源仅对充值会员开放进入升级

  

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

  

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

  

QQ联系我

微信扫扫联系我

  

回复

使用道具 举报

大神点评(10)

点击查看
快速回复 返回列表 客服中心 搜索