• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            直接通過(guò)ODBC讀寫Excel表格文件

            譯者:徐景周(原作:Alexander Mikula)

            下載本文示例代碼

            想要通過(guò)ODBC直接讀、寫Excel表格文件,首先,應(yīng)確保ODBC中已安裝有Excel表格文件的驅(qū)動(dòng)"MICROSOFT EXCEL DRIVER (*.XLS)"。然后,可根據(jù)下面步驟進(jìn)行:

            1. 在StdAfx.h文件中加入

            #include <afxdb.h>
            #include <odbcinst.h>
            
            2. 通過(guò)ODBC直接創(chuàng)建Excel文件并在表中插入數(shù)據(jù)(暫定文件名:Demo.xls)
            //創(chuàng)建并寫入Excel文件
            void CRWExcel::WriteToExcel()
            {
            CDatabase database;
            CString sDriver = "MICROSOFT EXCEL DRIVER (*.XLS)"; // Excel安裝驅(qū)動(dòng)
            CString sExcelFile = "c:\\demo.xls";                // 要建立的Excel文件
            CString sSql;
            TRY
            {
            // 創(chuàng)建進(jìn)行存取的字符串
            sSql.Format("DRIVER={%s};DSN='''';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",
            sDriver, sExcelFile, sExcelFile);
            // 創(chuàng)建數(shù)據(jù)庫(kù) (既Excel表格文件)
            if( database.OpenEx(sSql,CDatabase::noOdbcDialog) )
            {
            // 創(chuàng)建表結(jié)構(gòu)(姓名、年齡)
            sSql = "CREATE TABLE demo (Name TEXT,Age NUMBER)";
            database.ExecuteSQL(sSql);
            // 插入數(shù)值
            sSql = "INSERT INTO demo (Name,Age) VALUES (''徐景周'',26)";
            database.ExecuteSQL(sSql);
            sSql = "INSERT INTO demo (Name,Age) VALUES (''徐志慧'',22)";
            database.ExecuteSQL(sSql);
            sSql = "INSERT INTO demo (Name,Age) VALUES (''郭徽'',27)";
            database.ExecuteSQL(sSql);
            }
            // 關(guān)閉數(shù)據(jù)庫(kù)
            database.Close();
            }
            CATCH_ALL(e)
            {
            TRACE1("Excel驅(qū)動(dòng)沒(méi)有安裝: %s",sDriver);
            }
            END_CATCH_ALL;
            }
            
            3. 通過(guò)ODBC直接讀取Excel文件(暫定文件名:Demo.xls)
            // 讀取Excel文件
            void CRWExcel::ReadFromExcel()
            {
            CDatabase database;
            CString sSql;
            CString sItem1, sItem2;
            CString sDriver;
            CString sDsn;
            CString sFile = "Demo.xls"; 			// 將被讀取的Excel文件名
            // 檢索是否安裝有Excel驅(qū)動(dòng) "Microsoft Excel Driver (*.xls)"
            sDriver = GetExcelDriver();
            if (sDriver.IsEmpty())
            {
            // 沒(méi)有發(fā)現(xiàn)Excel驅(qū)動(dòng)
            AfxMessageBox("沒(méi)有安裝Excel驅(qū)動(dòng)!");
            return;
            }
            // 創(chuàng)建進(jìn)行存取的字符串
            sDsn.Format("ODBC;DRIVER={%s};DSN='''';DBQ=%s", sDriver, sFile);
            TRY
            {
            // 打開數(shù)據(jù)庫(kù)(既Excel文件)
            database.Open(NULL, false, false, sDsn);
            CRecordset recset(&database);
            // 設(shè)置讀取的查詢語(yǔ)句.
            sSql = "SELECT Name, Age "
            "FROM demo "
            "ORDER BY Name ";
            // 執(zhí)行查詢語(yǔ)句
            recset.Open(CRecordset::forwardOnly, sSql, CRecordset::readOnly);
            // 獲取查詢結(jié)果
            while (!recset.IsEOF())
            {
            //讀取Excel內(nèi)部數(shù)值
            recset.GetFieldValue("Name ", sItem1);
            recset.GetFieldValue("Age", sItem2);
            // 移到下一行
            recset.MoveNext();
            }
            // 關(guān)閉數(shù)據(jù)庫(kù)
            database.Close();
            }
            CATCH(CDBException, e)
            {
            // 數(shù)據(jù)庫(kù)操作產(chǎn)生異常時(shí)...
            AfxMessageBox("數(shù)據(jù)庫(kù)錯(cuò)誤: " + e->m_strError);
            }
            END_CATCH;
            }
            
            4. 獲取ODBC中Excel驅(qū)動(dòng)的函數(shù)
            CString CRWExcel::GetExcelDriver()
            {
            char szBuf[2001];
            WORD cbBufMax = 2000;
            WORD cbBufOut;
            char *pszBuf = szBuf;
            CString sDriver;
            // 獲取已安裝驅(qū)動(dòng)的名稱(涵數(shù)在odbcinst.h里)
            if (!SQLGetInstalledDrivers(szBuf, cbBufMax, &cbBufOut))
            return "";
            // 檢索已安裝的驅(qū)動(dòng)是否有Excel...
            do
            {
            if (strstr(pszBuf, "Excel") != 0)
            {
            //發(fā)現(xiàn) !
            sDriver = CString(pszBuf);
            break;
            }
            pszBuf = strchr(pszBuf, ''\0'') + 1;
            }
            while (pszBuf[1] != ''\0'');
            return sDriver;
            }
            
            作者信息:
            姓名:徐景周(未來(lái)工作室 Future Studio)
            EMAIL:jingzhou_xu@163.net

            posted on 2009-05-22 09:22 wrh 閱讀(1266) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            導(dǎo)航

            <2009年3月>
            22232425262728
            1234567
            891011121314
            15161718192021
            22232425262728
            2930311234

            統(tǒng)計(jì)

            常用鏈接

            留言簿(19)

            隨筆檔案

            文章檔案

            收藏夾

            搜索

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            97久久综合精品久久久综合| 国产精品久久久久久福利69堂| 亚洲色大成网站www久久九 | 亚洲成色www久久网站夜月| 色综合合久久天天给综看| 久久久久一本毛久久久| 久久久久亚洲av成人网人人软件| 亚洲av成人无码久久精品| 国产香蕉久久精品综合网| 国产午夜福利精品久久2021| 久久久久97国产精华液好用吗| 久久久这里有精品| a高清免费毛片久久| 国产精品18久久久久久vr| 久久精品国内一区二区三区| 女人高潮久久久叫人喷水| 亚洲欧美国产精品专区久久| 国产美女久久精品香蕉69| 国内精品久久人妻互换 | 蜜臀av性久久久久蜜臀aⅴ麻豆| 久久香蕉综合色一综合色88| 久久精品国产男包| 久久久久99精品成人片直播| 久久天天躁狠狠躁夜夜av浪潮| 香蕉aa三级久久毛片| 午夜精品久久久久久久| 久久亚洲精品中文字幕三区| 久久露脸国产精品| 欧美黑人激情性久久| 精品国产综合区久久久久久 | 四虎国产精品成人免费久久| 久久无码人妻一区二区三区| 99久久国产亚洲高清观看2024| 婷婷久久久亚洲欧洲日产国码AV| 国产精品9999久久久久| 开心久久婷婷综合中文字幕| 亚洲精品无码久久一线| 久久精品国产99久久久香蕉| 浪潮AV色综合久久天堂| 一本久久精品一区二区| 久久亚洲国产中v天仙www|