zoukankan      html  css  js  c++  java
  • MFC利用ADO连接ACCESS数据库及其操作数据库的方法

    MFC利用ADO连接ACCESS数据库及其操作数据库的方法

    1,  在FileView中的StdAfx.h文件中添加:

    #import "C:Program FilesCommon Filessystemadomsadox.dll"

    #import "c:program filescommon filessystemadomsado15.dll" no_namespace rename("EOF","adoEOF")

    2,  在ClassView中的应用程序类CXXXXApp中的InitInstance()中添加:

    if(!AfxOleInit())

           {

                  AfxMessageBox("OLE初始化出错!");

                  return FALSE;

           }

    3,  在需要连接数据库的类中添加:

    _ConnectionPtr m_pConnection;

    _variant_t RecordsAffected;

    _RecordsetPtr m_pRecordset;

    4,  连接ACCESS数据库:

    try

           {

                  m_pConnection.CreateInstance(__uuidof(Connection));

    m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=C:\datasource.mdb","","",adModeUnknown);      

           }

           catch(_com_error e)

           {

                  CString errormessage;

                  errormessage.Format("连接数据库失败! 错误信息:%s",e.ErrorMessage());

                  AfxMessageBox(errormessage);

                  return;

           }

    5,操作数据库中的表:

    (1)查询操作:

           try

           {

                  if (m_tradingname != _T(""))

                  {

                         m_pRecordset.CreateInstance("ADODB.Recordset"); //为Recordset对象创建实例

                         CString strselect;

                         strselect.Format ("SELECT * FROM %s ", m_tradingname);

                         m_pRecordset=m_pConnection->Execute(_bstr_t(strselect),&RecordsAffected,adCmdText);

                        

                        

                         ////浏览按钮是被按下过,初始化为否

                         static BOOL bIsCreated = FALSE;

                         _variant_t tradingday, openprice, highestprice, lowestprice, closeprice, volume;

                        

                         ///当第一次按下浏览按钮时

                         if ( bIsCreated == FALSE )

                         {

                                try

                                {

                                       while(!m_pRecordset->adoEOF)

                                       {

                                              //vEmployeeID=m_pRecordset->GetCollect(_variant_t((long)0));

                                                                                       

                                              tradingday=m_pRecordset->GetCollect("TradingDay");

                                              openprice = m_pRecordset->GetCollect("OpenPrice");

                                              highestprice = m_pRecordset->GetCollect("HighestPrice");

                                              lowestprice = m_pRecordset->GetCollect("LowestPrice");

                                              closeprice = m_pRecordset->GetCollect("ClosePrice");

                                              volume = m_pRecordset->GetCollect("Volume");

                                             

                                              CString str;

                                             

                                              if(tradingday.vt!=VT_NULL)

                                              {

                                                    

                                                     str+=(LPCTSTR)(_bstr_t)tradingday;

                                                     m_list.InsertItem(0, str);

                                              }

                                             

                                              if(openprice.vt!=VT_NULL)

                                              {

                                                    

                                                     str =(LPCTSTR)(_bstr_t)openprice;

                                                     m_list.SetItemText(0, 1, str);

                                              }

                                             

                                              if(highestprice.vt!=VT_NULL)

                                              {

                                                    

                                                     str =(LPCTSTR)(_bstr_t)highestprice;

                                                     m_list.SetItemText(0, 2, str);

                                              }

                                             

                                              if(lowestprice.vt!=VT_NULL)

                                              {

                                                    

                                                     str =(LPCTSTR)(_bstr_t)lowestprice;

                                                     m_list.SetItemText(0, 3, str);

                                              }

                                             

                                              if(closeprice.vt!=VT_NULL)

                                              {

                                                    

                                                     str =(LPCTSTR)(_bstr_t)closeprice;

                                                     m_list.SetItemText(0, 4, str);

                                              }

                                             

                                              if(volume.vt!=VT_NULL)

                                              {

                                                    

                                                     str =(LPCTSTR)(_bstr_t)volume;

                                                     m_list.SetItemText(0, 5, str);

                                              }    

                                              m_pRecordset->MoveNext();

                                       }

                                      

                                }

                                catch(_com_error &e)

                                {

                                       AfxMessageBox(e.Description());

                                }

                               

                                //显示要查询的合约名称

                                m_showtradingname = m_tradingname;

                               

                                //显示查询结果的数量

                                m_number = m_list.GetItemCount ();

                                UpdateData(FALSE);

                                bIsCreated = TRUE;

                         }

                        

                         else

                         {

                                m_list.DeleteAllItems();

                                bIsCreated = FALSE;

                         }

                        

                         m_pRecordset->Close();

                         m_pRecordset=NULL;

                         m_pConnection->Close();    

                         m_pConnection=NULL;

                        

                        

                  }

                  else

                  {

                         MessageBox("请输入合约名称!");

                         return ;

                  }

                 

                 

           }

           catch(_com_error &e)

           {

                  AfxMessageBox(e.Description());

           }

    (2)修改

    try

                                {                  

                                       CString dataToModify;

                                       dataToModify.Format("update %s set OpenPrice = '%f' where TradingDay = '%s'", m_tradingname, m_openprice, m_tradingday);  //需要进一步修改

                                       m_pConnection->Execute(_bstr_t(dataToModify),&RecordsAffected,adCmdText);

                                      

                                }

                                catch(_com_error e)

                                {

                                       CString errormessage;

                                       errormessage.Format("你修改的数据不符合要求,请确定后重新修改!",e.ErrorMessage());

                                       AfxMessageBox(errormessage);

                                       return;

                                }

    (3)插入

                         CString strinsert;

                         strinsert.Format ("insert into %s values(%s, %f,  %f, %f, %f, %d)",m_tradingname,  m_tradingday, m_openprice,  m_highestprice, m_lowestprice, m_closeprice, m_volume);

                         m_pRecordset=m_pConnection->Execute(_bstr_t(strinsert),&RecordsAffected,adCmdText);

                        

                         MessageBox("输入成功输入!");

           if(m_pConnection->State)

           {

                  m_pConnection->Close();    

           }

    (4)删除

                         try

                         {

                                CString dataToDel;

                                dataToDel.Format("delete from %s where TradingDay = '%s'", m_tradingname, m_strday);

                               

                                m_pConnection->Execute(_bstr_t(dataToDel),&RecordsAffected,adCmdText);

                         }

                         catch(_com_error &e)

                         {

                                AfxMessageBox(e.Description());

                         }

    (5)查找数据库表中的表名并且建表

           CFileDialog fileDlg(TRUE);

           fileDlg.m_ofn .lpstrFilter = "Text FIles(*.txt)*.txtAll FIles(*.*)*.*";

          

          

           if(IDOK == fileDlg.DoModal ())

           {    

                 

                  CString filename = fileDlg.GetFileTitle ();     //获取文件的名字,不带后缀名

                 

                  ADOX::_CatalogPtr m_pCatalog=NULL;

                  ADOX::_TablePtr m_pTable=NULL;           

                  CString DBName="Provider=Microsoft.JET.OLEDB.4.0;Data source=C:\datasource.mdb";

                 

                  try

                  {

                         m_pCatalog.CreateInstance(__uuidof(ADOX::Catalog));

                        

                         m_pCatalog->PutActiveConnection(_bstr_t(DBName));

                        

                         int tableCount=m_pCatalog->Tables->Count;

                         int i=0;

                         BOOL nflag = true;

                         while(i<tableCount)

                         {

                                m_pTable=(ADOX::_TablePtr)m_pCatalog->Tables->GetItem((long)i);

                                CString tableName=(BSTR)m_pTable->Name;

                                if( tableName==filename )

                                {

                                       nflag = false;

                                }

                                i++;

                         }

                        

                         if (nflag)

                         {

                                MessageBox("合约表不存在,建表!");                        

                                try

                                {

                                       CString strCommand;

                                       strCommand.Format("CREATE TABLE %s(TradingDay Text(16), OpenPrice Integer, HighestPrice Integer, LowestPrice Integer, ClosePrice Integer, Volume Integer)",filename);

                                       m_pConnection->Execute(_bstr_t(strCommand),&RecordsAffected,adCmdText);

                                       MessageBox("创建成功!!");

                                }

                                catch(_com_error &e)

                                {

                                       AfxMessageBox(e.Description());

                                }           

                         }

                  }

                  catch(_com_error &e)

                  {

                         AfxMessageBox(e.Description());

                         return;

                  }

    }

    (6)建立数据库

    (一)添加:#include "Shlwapi.h"

    #pragma comment(lib,"shlwapi.lib")

    (二) 

      CString str;

           str= "C:\"+m_dbName+".mdb";

           if(PathFileExists(str))

           {

                  CString strTemp;

                  strTemp.Format("%s已存在!",str);

                  AfxMessageBox(strTemp);

                  return ;

           }

           ADOX::_CatalogPtr m_pCatalog = NULL;

           CString DBName="Provider=Microsoft.JET.OLEDB.4.0;Data source=";

        DBName=DBName+str;

           try

           {

                  m_pCatalog.CreateInstance(__uuidof(ADOX::Catalog));

                  m_pCatalog->Create(_bstr_t((LPCTSTR)DBName));

                  MessageBox("建库成功!!");

           }

           catch(_com_error &e)

           {

                  AfxMessageBox(e.ErrorMessage());

                  return ;

           }    

    (7)

  • 相关阅读:
    Python使用SMTP模块、email模块发送邮件
    harbor搭建及使用
    ELK搭建-windows
    ELK技术栈之-Logstash详解
    【leetcode】1078. Occurrences After Bigram
    【leetcode】1073. Adding Two Negabinary Numbers
    【leetcode】1071. Greatest Common Divisor of Strings
    【leetcode】449. Serialize and Deserialize BST
    【leetcode】1039. Minimum Score Triangulation of Polygon
    【leetcode】486. Predict the Winner
  • 原文地址:https://www.cnblogs.com/aimenfeifei/p/3281838.html
Copyright © 2011-2022 走看看