經典代碼解析4.1:使用ADO整合Excel與Access

Excel擅長數據分析,而Access擅長整理和存儲大量繁雜的數據。將Excel與Access整合起來協同運用,發揮各自的優勢,從而滿足更複雜的需求。

搭建環境

在你的電腦中,除安裝了Excel外,還需要安裝有Access 2007及以上版本的軟體。更重要的是,要在VBE中添加對ADO的引用:

  • 在VBE中,單擊菜單欄中「工具」下的「引用」,在「引用」框中,選取「Microsoft ActiveX Data Objects ×.× Library」和「Microsoft ADO Ext. ×.× for DLL And Security」前的複選框,單擊「確定」。

  • Excel工作表如下圖所示:

    代碼功能

    下面的幾段代碼實現下列功能:

  • 使用VBA創建Access資料庫

  • 使用Excel中的數據填充資料庫

  • 通過Excel添加/刪除欄位,並填充/刪除相應的數據

  • 在Excel中獲取Access中的數據

  • Excel中的數據修改後,Access資料庫實現更新

  • 程序代碼及解析

    創建並填充Access資料庫

    下面的代碼首先創建一個Access資料庫及表,然後使用Excel工作表中的數據填充該資料庫表。

    解析:

  • 上述代碼創建一個新的Catalog對象,用於使用ADOX來引用資料庫。創建一個名為變數strTableName代表的值的表,並且為新創建的表添加欄位,本例中添加了5個欄位,你可以根據實際修改來增加或減少欄位以及改變欄位的名稱;將新表添加到資料庫的Tables集合中。

  • 接下來,代碼為新表創建主鍵。連接到已有的資料庫,刪除資料庫表中已有的主鍵,並創建新的主鍵。

  • 隨後,基於數據表定義記錄集,每次遍歷工作表中的一行並將數據存放到Access資料庫表。其中,在循環中,rst.AddNew創建一條新記錄,然後遍歷每一列,將列中的值賦給記錄集中的每個欄位,rst.Update保存記錄。

  • 最後,代碼關閉Recordset對象和Connection對象並將對象變數設置為Nothing以清除內存。

  • 運行代碼後,Access資料庫表如下圖所示:

    添加新欄位

    如果在Excel工作表中增加了新標題,例如「班級」(如下圖所示),那麼在資料庫表中也要添加「班級」欄位。

    在Access資料庫表中添加欄位的代碼如下:

    解析:

  • 代碼首先創建新的ADO連接,然後創建ADOX Catalog對象(資料庫)並讓其使用ADO連接,接下來設置對想要修改的表的引用,並添加列。最後,清除引用對象。

  • 運行代碼後的資料庫表如下:

    也可以使用SQL語句來添加欄位,代碼如下:

    解析:

  • 代碼首先創建新的ADO連接,然後創建Command對象並讓其使用ADO連接,接著執行SQL語句來添加新欄位,最後清除對象引用。

  • 為新欄位添加數據

    下面的代碼為剛才添加的欄位填充數據:

    解析:

  • 需要遍歷工作表中的行,每次修改一條記錄中的欄位內容。

  • 代碼創建ADO連接,根據主鍵值逐條選取記錄並打開,然後修改記錄,保存並關閉記錄集,最後關閉連接並清除對象引用。

  • 結果如下圖所示:

    刪除欄位

    下面的代碼刪除上文中添加的「班級」欄位:

    解析:

  • 與前面的代碼一樣,首先創建新的ADO連接並創建ADOX對象使之使用剛創建的ADO連接,然後設置對想要修改的資料庫表的引用,接著通過從表的Columns集合中刪除指定的列,最後清除對象引用並關閉連接。

  • 也可以使用SQL查詢語句來實現,代碼如下:

    解析:

  • 代碼創建新的ADO連接,隨後創建一個Command對象並使之使用新的ADO連接,然後執行帶有DROP子句的SQL語句來刪除指定欄位,最後清除對象並關閉連接。

  • 關於資料庫的簡單說明

  • 術語「記錄」和「欄位」通常用於描述資料庫中的數據。一條記錄即表中的一行,一個欄位即表中的一列。

  • SQL即結構化查詢語言,語法簡單但功能強大,可以對資料庫實現各種操作。

  • Connection對象用於在應用程序和所要訪問的數據源之間提供傳遞途徑。上文中的示例在使用資料庫前,先要建立應用程序和資料庫之間的連接。

  • Recordset對象的ActiveConnection屬性將現有的Connection對象賦給Recordset對象或者代表記錄集的一個連接字元串,以在資料庫中使用。若將一個連接字元串賦值給該屬性,則此記錄集將為自已創建一個Connection對象,用於引用該記錄集所使用的Connection對象。

  • 其CursorLocation屬性指定是用伺服器端游標引擎還是用客戶端游標引擎 來操作記錄集中的記錄。

    在使用Open方法打開資料庫時,如果其Source設置為從表中讀取記錄集(表名必須放置在雙引號中),則其Options參數設置為adCmdTable;如果設置為從SQL查詢語句讀取記錄集,則其Options參數設置為adCmdText。其CursorType參數在獲取記錄數據時使用adDynamic或adForwardOnly,且adForwardOnly在獲取大型數據集時性能更好;在寫入記錄時,使用adOpenKeyset。

  • Command對象用於執行操作查詢,對數據源執行插入、更新、刪除等操作。

  • 太長了!明天繼續......


    轉載本文請聯繫我或者註明出處。


    推薦閱讀:

    css防止圖片撐破頁面的代碼(圖片自動縮放)
    【動畫代碼】漂亮的動畫圖片
    【動畫代碼】動畫人景篇
    左圖右文混排代碼:
    ☆ 【邊框最基本的代碼】

    TAG:代碼 | 經典 | Excel | 整合 | 解析 |