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會呈現一些奇異的狀況。