根據工作表中的數據,生成資料庫新數據表的方法

2021-01-08 VBA語言專家

大家好今日我們繼續講解VBA資料庫解決方案的第22講:如何利用工作表數據,生成資料庫新的數據表。在之前的講解中我們講了很多把數據從數據表中導出到工作表的方法,今日我們講解如何把數據由工作表存儲到資料庫中的數據表。為什麼要有這樣的操作呢?我們舉個實例:如果您是一個部門的銷售人員,每月的銷售數據是一個EXCEL表格,如果可以把這些數據放到資料庫中,這樣會更方便的實現查找和統計。

為什麼要藉助資料庫呢?EXCEL不可以嗎?當然,理論上是可以的,但實際不推薦。為什麼呢?把數據保存在EXCEL中,容易誤操作,而且當數據量大的時候,EXCEL的操作遠比資料庫操作要慢。這是我多年工作經驗的體會。所以我們在學習的時候,該更新自己知識結構的要及時更新。比如有的朋友的EXCEL還是2003版本的甚至是2000版本的,還是建議你儘快的升級吧。

言歸正傳,我們還是研究如何實現上述的逆運算的過程。實例:在我的EXEL表格中有一份19年2月份的銷售記錄,我要新建立一個數據表保存它。EXCEL工作表內容如下截圖:

導入的數據表名稱為「19年銷售情況」,下面我們看看如何能實現這個過程。

由於可能的方法很多,我要一個一個的給大家講解,或許有的朋友會說,怎麼不用那種方法啊?對的,你的方法也可以,或許我在後續的文章中會講到你的方案,不要緊,先看我的思路:

代碼:

Sub mynzCreateDataTable() '將工作表生成新數據表

Dim cnADO, rsADO As Object

Dim strPath, strSQL, strTable As String

Set cnADO = CreateObject("ADODB.Connection")

Set rsADO = CreateObject("ADODB.Recordset")

strPath = ThisWorkbook.Path & "\mydata2.accdb"

strTable = "19年銷售情況"

cnADO.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strPath

Set rsADO = cnADO.OpenSchema(20, Array(Empty, Empty, strTable, Empty))

'如果存在這個數據表,那麼刪除

If Not rsADO.EOF Then

strSQL = "DROP TABLE " & strTable

cnADO.Execute strSQL

End If

'按工作表創建數據表

strSQL = "SELECT * INTO " & strTable _

& " FROM [Excel 12.0;Database=" _

& ThisWorkbook.FullName & ";].[" & ActiveSheet.Name & "$]"

cnADO.Execute strSQL

MsgBox "已經將工作表數據生成新數據表。", vbInformation, "數據表創建"

rsADO.Close

cnADO.Close

Set rsADO = Nothing

Set cnADO = Nothing

End Sub

代碼截圖:

代碼的講解:

1 Dim cnADO, rsADO As Object

Dim strPath, strSQL, strTable As String

Set cnADO = CreateObject("ADODB.Connection")

Set rsADO = CreateObject("ADODB.Recordset")

strPath = ThisWorkbook.Path & "\mydata2.accdb"

strTable = "19年銷售情況"

cnADO.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strPath

Set rsADO = cnADO.OpenSchema(20, Array(Empty, Empty, strTable, Empty))

上述代碼用於創建ADO對象和連接,不清楚的朋友要回過頭看看我之前的講解,這段代碼其實是相對固定的,朋友可以作為固定的格式來利用,很多類似的地方都是如此的。

2 '如果存在這個數據表,那麼刪除

If Not rsADO.EOF Then

strSQL = "DROP TABLE " & strTable

cnADO.Execute strSQL

End If

這段代碼我加了注釋是如果存在這個數據表,那麼刪除,具體的解釋我也不再多說,我之前都有詳細的講解

3 '按工作表創建數據表

strSQL = "SELECT * INTO " & strTable _

& " FROM [Excel 12.0;Database=" _

& ThisWorkbook.FullName & ";].[" & ActiveSheet.Name & "$]"

cnADO.Execute strSQL

如果您將來會買到我的這套《VBA資料庫解決方案》一書,在書中我會有關於資料庫和EXCEL工作表連接的講解,這裡我們理解的是SELECT INTO 語句:SELECT INTO 語句從一個表中選取數據,然後把數據插入另一個表中。

SQL SELECT INTO 語法

①把所有的列插入新表:

SELECT * INTO new_table_name [IN externaldatabase] FROM old_tablename

②只把希望的列插入新表:

SELECT column_name(s) INTO new_table_name [IN externaldatabase] FROM old_tablename

4 rsADO.Close

cnADO.Close

Set rsADO = Nothing

Set cnADO = Nothing

上述代碼用於關閉連接和釋放內存。

下面我們看運行的結果:

今日內容回向:

1 如何把EXCEL數據備份到數據表中?

2 通過以前的學習你是否還有他的設想,可以實現把數據表中的數據備份到資料庫的表中?

相關焦點

  • 把工作表中提供的特定數據在資料庫中批量刪除的方法
    大家好,我們今日繼續講解VBA資料庫解決方案的第25講內容:利用VBA,把工作表中提供的數據在數據表中批量刪除的方法。在上一講中,我們講了實現在數據表中刪除記錄的一般方法,這種方法可以對重複的數據進行處理,但實際的情況是,我們的數據記錄很多時候是沒有重複的,而且如果數據量很大,該怎麼處理呢?今日我們就講解如何在記錄集中批量刪除給定記錄的方法。
  • 利用VBA,把工作表中提供的數據在資料庫表中逐一刪除
    大家好,我們今日繼續講解VBA資料庫解決方案的第24講內容:利用VBA,把工作表中提供的數據在數據表中刪除。在上一講中,我們講了利用rsADO.addnew 和 rsADO.Update 語句實現在數據表添加記錄的方法,今日我們講解,如何在記錄集中刪除記錄。也是在有重複記錄的數據表中刪除記錄的方法,如果有重複的數據將一併刪除。
  • 如何批量修改資料庫中的數據
    大家好,今日我們繼續VBA資料庫解決方案的第29講:如何批量修改資料庫中的記錄。在資料庫解決方案中,我在從實際應用的角度,把工作中可能遇到的各種情況都儘可能的給羅列上,我們先後講了:①如何在資料庫中動態刪除和建立數據表(第14講)②在已有的數據表中刪除、添加、修改欄位的方法(第21講);③根據工作表中的數據,生成資料庫中新的數據表的方法(第22講);④向一個已有的數據表中添加數據記錄的方法(第23講);⑤把工作表中提供的數據在數據表中逐一刪除
  • 快速將Excel匯總數據拆分到各工作表,包含VBA方法喲
    ——莊子今天給大家分享個把匯總數據表拆分到各個不同的工作表中的操作方法。先看原始數據表:我們需要按每個【城市】新建一個工作表,並把該城市對應的數據內容,拆分到工作表中。怎麼做呢?今天給大家分享的是使用Excel的【數據透視表】來實現,【數據透視表】用過的人應該都知道數據透視表真的非常非常好用,建議大家都好好學習下。
  • MySQL資料庫教程-數據表的創建與複製
    數據表的複製與創建數據表Table是實現數據存儲與管理的基礎,也是使用資料庫技術進行數據存儲的核心對象之一。本節主要介紹數據表的定義、表的複製等語法與實例。(課程配套視頻教程請關注後查閱視頻資源)。創建數據表基本語法MySQL資料庫管理系統使用SQL結構化查詢語法實現對數據表進行創建。數據表創建主要包括數據表名字的確定、欄位屬性的定義與約束的設置等。
  • MySQL資料庫教程-數據表的創建與複製
    數據表的複製與創建數據表Table是實現數據存儲與管理的基礎,也是使用資料庫技術進行數據存儲的核心對象之一本節主要介紹數據表的定義、表的複製等語法與實例。01創建數據表基本語法MySQL資料庫管理系統使用SQL結構化查詢語法實現對數據表進行創建。數據表創建主要包括數據表名字的確定、欄位屬性的定義與約束的設置等。
  • 如何將12個月的工資數據快速匯總到一個工作表中?
    「記住,只有同時滿足這四點的表格,才能用我教給你的SQL語句的方法來進行多表匯總。」初識SQL語句SQL語句中包括很多語句,其中使用次數最多的就是SELECT語句。SELECT語句的作用是:用來對資料庫進行查詢並返回符合用戶查詢標準的結果數據。
  • 數據查詢中,三個工作表聯合查詢的方法
    大家好,今日繼續講解VBA資料庫解決方案,今日的內容是第70講: 數據查詢中,三個工作表聯合查詢的方法。在各種查詢中,內連接,左外連接,右外連接等等,這些方法大家在工作中要多加利用,並且靈活利用,利用多了,知識就變成自己的了。今日我們講解的是三個工作表的聯合查詢,也就是說三個工作表的數據要一次查詢。我們還是看下面的實例講解。
  • VBA拆分工作表
    本節實例: 在工作中,我們可能會遇到一張很複雜、繁冗的表格,表格中的數據時公司各個部門的詳細數據清單,我們的任務是:把這個總數據表分解成一張張易於分析的數據表。當表格內容很多時,利用VBA是一種不錯的方法。 假設有如圖所示的數據,我們的任務是按照「地區」把原始數據拆分成一個工作表。
  • excel數據透視表:利用數據透視表一次批量生成工作表
    工作中有時候需要批量生成工作表,像下圖,今天就講解利用數據透視表一次批量生成工作表。1、在excel工作表中輸入要批量生成的工作表的名稱。2、插入數據透視表。點擊工具欄插入—數據透視表。3、在表/區域選擇要生成工作表名稱的區域,數據透視表放置位置選擇現有工作表,位置可任意選擇,這裡選擇E12。點擊確定。4、在右側數據透視表欄位對話框,將欄位部門拖動到篩選器。5、依次點擊數據透視表工具—分析—選項—顯示報表篩選頁。在彈出的對話框中點擊確定。6、這時候會看到在下面已經生成了工作表。
  • C 導出 Excel 的 6 種簡單方法!你會幾種?
    將數據導出到 Excel, Essential XlsIO 提供了以下方法:數據表導出到 Excel對象集合導出到 Excel資料庫導出到 Excel微軟網格控制項導出到 Excel數組導出到 ExcelCSV 導出到 Excel在本文中,我們將研究這些方法以及如何執行它們。
  • Excel多張工作表的數據查詢
    日常工作中,並不是所有的員工信息都會被經常用到,恰恰相反,經常用到的欄位,一般是固定的幾個。當表格信息較多時,去尋找某個記錄的某些欄位信息,是比較耗時耗力的。如果可以根據提供的某條記錄的標識符,就可以依據該標識符快速展示出屬於該記錄的欄位數據,並且能夠屏蔽其他不關心的數據,那麼體驗就會大幅提升。如上所示,建立幾個工作表的數據查詢。
  • Excel工作表中的7個資料庫函數解讀,易懂易理解,方便且實用!
    在Excel工作表中,有一類函數成為資料庫函數,也被稱為D函數,共計有12個,但我們常用的有7個,今天,我們來了解和學習這7個資料庫函數。一、Excel工作表資料庫函數:Dsum。功能:求滿足給定條件的資料庫中記錄的欄位(列)數據的和。語法結構:=Dsum(資料庫區域,返回值所在的相對列數(列標題的相對引用、列標題),條件區域)。
  • 核對數據時,如何同步上下滾動兩個 Excel 工作表?
    在平常的工作中,由於數據量比較大,數據表的行數通常都很多,而我們需要的數據經常存放在不同的工作表中。當我們要在兩個具有海量數據的工作表中查看某些關聯數據時,來回切換和上下滾動查找非常不方便,此時就特別需要這樣一個功能:並排顯示兩個工作表,並且這兩個工作表可以同步滾動,即在任意一個工作表中上下翻頁時,另外一個工作表也會同時上下翻頁。今天就教大家怎麼使用這個功能。
  • 利用VBA,如何在資料庫中新建查詢表,並在工作表中顯示其內容
    大家好,今日講解VBA資料庫解決方案第19講:如何在資料庫中新建一個查詢表,並在工作表中顯示出來。關於Recorsset集合的一些操作講解,在前幾講中講了很多,這裡提醒大家一點:任何對象都不是孤立存在的,要結合實際來理解。
  • VBA代碼判斷工作簿中是否存在指定工作表及用數組保存數據的方法...
    NO.176-NO.177內容是:NO. 176:使用自定義MyExistSh函數判斷工作簿中是否存在指定名稱的工作表NO. 177:使用Array函數創建一個數組用來保存數據並將其寫入到工作表的單元格區域VBA過程代碼176:使用自定義MyExistSh函數判斷工作簿中是否存在指定名稱的工作表Sub mynz()Dim Sh As
  • MySQL資料庫(數據表的創建 二)
    數據表的創建補充資料庫承接上一篇 MySQL資料庫(數據表的創建 一)單選 enum('選項一','選項二','選項三',……) 其中 選項一 可使用 1 代替 ,選項二 可使用 2 代替,選項三 可使用 3 代替。
  • 一個模版讓報表自動生成,領導:這才是數據分析人該幹的事
    與excel操作基本保持一致注意:該方法僅僅是將需要直行的動作保存到一個list中,真正的動作還未執行,執行動作是發生在excel_update方法中最終調用excel_update方法,傳入每個單元格需要進行的操作和填充值的write_obj_list以及文件保存路徑file_path,就可以在當前工作目錄下生成想要的
  • 通過相同欄位合併兩個不同工作表的三種方法
    先看案例數據,Sheet1的數據如下:Sheet2的數據:相同的欄位是:姓名,其他就沒有了,所以要求很簡單,根據Sheet1中的姓名,找出其他相對應的欄位信息。>彈出的對話框,直接選擇數據透視表吧,數據放在新工作表中,這樣也不破壞原有的表格數據:上表中,點擊屬性按鈕後,選擇定義選項卡,其他都保持不變,在命令文本中輸入:SELECT A.
  • 使用VBA代碼完成判斷工作表是否存在及刪除工作表的方法
    NO.174-NO.175內容是:NO. 174:如何利用VBA代碼,判斷是否為空表,如果為空表則使用Delete方法刪除NO. 175:利用VBA的自定義函數,判斷工作表是否存在 VBA過程代碼174:如何利用VBA代碼,判斷是否為空表,如果為空表則使用Delete方法刪除