• <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>

            直接通過ODBC讀寫Excel表格文件

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

            下載本文示例代碼

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

            1. 在StdAfx.h文件中加入

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

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

            導航

            <2008年4月>
            303112345
            6789101112
            13141516171819
            20212223242526
            27282930123
            45678910

            統計

            常用鏈接

            留言簿(19)

            隨筆檔案

            文章檔案

            收藏夾

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            久久香综合精品久久伊人| 国产精品热久久无码av| 日产精品久久久久久久| 久久se精品一区精品二区| 久久精品国产亚洲Aⅴ香蕉 | 亚洲综合久久夜AV | 国内精品久久久久伊人av| 久久久久国产一区二区三区| 久久99精品国产麻豆宅宅| 精品多毛少妇人妻AV免费久久| 91麻豆国产精品91久久久| 久久亚洲欧美日本精品| 伊人久久大香线蕉av一区| 色综合久久中文字幕综合网| 久久A级毛片免费观看| 久久受www免费人成_看片中文| 国产无套内射久久久国产| 久久精品99久久香蕉国产色戒| 久久久久久亚洲精品不卡 | 久久亚洲中文字幕精品有坂深雪| 久久99精品久久久久久不卡| 91精品国产乱码久久久久久| 久久亚洲AV成人无码软件| 久久免费香蕉视频| 狠狠精品干练久久久无码中文字幕| 精品久久8x国产免费观看| 97精品依人久久久大香线蕉97 | av色综合久久天堂av色综合在| 午夜视频久久久久一区 | 国产精品福利一区二区久久| 久久精品亚洲中文字幕无码麻豆| 亚洲va久久久噜噜噜久久男同 | 久久亚洲AV无码精品色午夜| 国内精品伊人久久久影院| 亚洲精品97久久中文字幕无码| 深夜久久AAAAA级毛片免费看| 久久综合给合综合久久| 久久久久亚洲AV综合波多野结衣 | 亚洲综合久久久| 国产高潮国产高潮久久久| 亚洲精品无码久久久久AV麻豆|