大家好今日我們繼續講解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 通過以前的學習你是否還有他的設想,可以實現把數據表中的數據備份到資料庫的表中?