程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> MFC通過sql訪問excel的方法,mfcsql訪問excel

MFC通過sql訪問excel的方法,mfcsql訪問excel

編輯:C++入門知識

MFC通過sql訪問excel的方法,mfcsql訪問excel


1.首先檢查安裝的驅動中是否有excel,代碼如下:
CString CAbcd1Dlg::GetExcelDriver()
{
  TCHAR sBuf[1000], *p=sBuf;
  WORD sBufMax=1000, sBufOut;
  if (!SQLGetInstalledDrivers(sBuf, sBufMax, &sBufOut))
    return "";

  CString strDriver;
  do{
    if(_tcsstr(p,_T("Excel"))!=0)
    {
      strDriver=CString(p);
      break;
    }
    p=_tcschr(p,_T('\0') )+1;
  }while(p[1]!=_T('\0'));

  return strDriver;
  }

  此函數的返回值即為excel驅動設備名稱

2.讀取訪問excel表數據,先定義一個表,操作如下:
  運行Microsoft Excel , 打開要操作的工作簿, 左鍵拖拽,選取要定義成為表的區域,
  從菜單中選擇'插入 '->'名稱'->'定義','定義名稱'對話框出現後,鍵入表的名字,
  例如:test,保存退出。
  這樣,你就可以在VC中,使用象SELECT * FROM test這樣的SQL語句了

  CString sD;
  //m_strDriver為 1 中獲取的excel設備驅動名稱,
  //strExcelFullFileName是excel表的全名
  sD.Format(_T("ODBC;DRIVER={%s};DSN='';DBQ=%s"), m_strDriver, strExcelFullFileName);

  CDatabase database;
  //打開數據庫(即Excel文件)
  if (0 == database.Open(NULL, false, false, sD))
  {
    CString strFailInfo;
    strFailInfo.Format(_T("%s database 打開失敗"),strExcelName);
    AfxMessageBox(strFailInfo);
    return;
  }

  CRecordset recset(&database);

  //設置讀取的查詢語句
  CString ql(_T("SELECT 字段1,字段2 FROM test"));
  //執行查詢語句
  recset.Open(CRecordset::forwardOnly,ql,CRecordset::readOnly);

  遍歷每一條,獲取每一個字段
  while(!recset.IsEOF())
  {
    CString str1, str2;
    recset.GetFieldValue(_T("字段1"), str1);
    recset.GetFieldValue(_T("字段2"), str2);
    recset.MoveNext();//移到下一條記錄
  }

3.寫excel
  CString sSql;
  //m_strDriver為 1 中獲取的excel設備驅動名稱
  //strExcelFileName 為 寫入的excel名稱
  sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",m_strDriver, strExcelFileName,   strExcelFileName);
  //打開數據文件
  if (0 == m_dbWriteToExcel.OpenEx(sSql,CDatabase::noOdbcDialog)){
    return false;
  }
  寫入表頭
  sSql = "CREATE TABLE Exceldemo (字段1 TEXT, 字段2 TEXT)";
  m_dbWriteToExcel.ExecuteSQL(sSql);

  //寫入數據
  str1.Replace(_T("'"),_T("''"));
  str2.Replace(_T("'"),_T("''"));

  CString strSql;
  strSql.Format(_T("INSERT INTO Exceldemo (字段1, 字段2) VALUES ('%s', '%s ')"),str1, str2);
  m_dbWriteToExcel.ExecuteSQL(strSql);

  備注:
    1.由於sql中插入的字段值要用''包起來,如果字段值中有'則會出現沖突,在sql中倆個'代表一個'
    2.'%s ' 後面的'號前有個空格,經過測試,'緊挨著%s會出現一些奇怪的情況。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved