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

MFC經過sql訪問excel的辦法

編輯:關於C++

MFC經過sql訪問excel的辦法。本站提示廣大學習愛好者:(MFC經過sql訪問excel的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是MFC經過sql訪問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