利用VBA,如何在資料庫中新建查詢表,並在工作表中顯示其內容

2021-01-08 VBA語言專家

大家好,今日講解VBA資料庫解決方案第19講:如何在資料庫中新建一個查詢表,並在工作表中顯示出來。關於Recorsset集合的一些操作講解,在前幾講中講了很多,這裡提醒大家一點:任何對象都不是孤立存在的,要結合實際來理解。有朋友向我諮詢一些概念的問題,在寫這套資料時,我也同樣要參考很多的資料,有時要對照著英語去理解一些概念,這時往往發現很多的概念在英語中和之前人們翻譯是有是對不上的,所以理解起來很難.特別是現在的資料庫講解階段,涉及到ADO、 RDO、連接、打開、引用,單純的從概念上真的很難理解,這時我建議大家不要糾結於純概念,要從實際出發,比如:一段代碼就是一個連接,一個代碼就是一個創建,這樣有實際內容參考的去理解就可以了;再者,無論是什麼途徑,我們的目的是應用,只要我們能達到應用,就達到了我們的目的。很多寫VBA的人都是專業人士,而我僅僅是根據多年的經驗來寫東西,會緊扣以實用為目的,目的是實用,下一個目的還是實用。

今日我們講解如何從Recorsset記錄集中根據某特定的條件形成一個資料庫中新表。在前幾講的講解中是把這些記錄直接顯示在工作表中,即顯示在EXCEL文件中,今日的內容和前面的內容有所不同,是要形成一個表,然後再顯示。

實例:我們還是利用之前的資料庫,如下資料,把職務為普通員工的職工要重新建立一個查詢表,最後再在工作表中顯示出來.

隨著講解的深入,實際工作中經常會遇到的問題會逐漸的體現,大家要跟緊我,我們一起學習,這套教程和《VBA代碼解決方案》不同,有些內容是連續的,需要讀者慢慢的連續的去領會。

下面看看我們今日課題的代碼:

Sub mynzCreateView()

Dim cnADO, rsADO As Object

Dim strPath, strSQL, strViewName As String

Set cnADO = CreateObject("ADODB.Connection")

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

strViewName = "普通員工表"

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

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

If Not rsADO.EOF Then

MsgBox ("請注意:原有表將刪除!")

strSQL = "DROP TABLE " & strViewName

cnADO.Execute strSQL

End If

strSQL = "CREATE VIEW " & strViewName _

& " AS SELECT * FROM 員工信息 " _

& "Where 職務= '員工'"

cnADO.Execute strSQL

MsgBox "查詢表創建成功!", , "創建視圖"

rsADO.Close

strSQL = "SELECT * FROM 普通員工表"

rsADO.Open strSQL, cnADO, 1, 3

For i = 0 To rsADO.Fields.Count - 1

Sheets("Sheet1").Cells(1, i + 1) = rsADO.Fields(i).Name

Next i

For i = 1 To rsADO.RecordCount

For j = 0 To rsADO.Fields.Count - 1

Sheets("Sheet1").Cells(i + 1, j + 1) = rsADO.Fields(j)

Next j

rsADO.MoveNext

Next i

rsADO.Close

cnADO.Close

Set rsADO = Nothing

Set cnADO = Nothing

End Sub

代碼的講解:

1 If Not rsADO.EOF Then

MsgBox ("請注意:原有表將刪除!")

strSQL = "DROP TABLE " & strViewName

cnADO.Execute strSQL

End If

以上代碼判斷是否存在這個表,如果存在,那麼刪除。

2 strSQL = "CREATE VIEW " & strViewName _

& " AS SELECT * FROM 員工信息 " _

& "Where 職務= '員工'"

cnADO.Execute strSQL

MsgBox "查詢表創建成功!", , "創建視圖"

rsADO.Close

上述代碼創建了查詢表,並彈出對話框通知用戶。

這裡用的CREATE VIEW 就是創建視圖的意思:在 SQL 中,視圖是基於 SQL 語句的結果集的可視化的表。視圖包含行和列,就像一個真實的表。視圖中的欄位就是來自一個或多個資料庫中的真實的表中的欄位。我們可以向視圖添加 SQL 函數、WHERE 以及 JOIN 語句,我們也可以提交數據,就像這些來自於某個單一的表。

SQL CREATE VIEW 語法

CREATE VIEW view_name AS

SELECT column_name(s)

FROM table_name

WHERE condition

注釋:視圖總是顯示最近的數據。每當用戶查詢視圖時,資料庫引擎通過使用 SQL 語句來重建數據。

3 rsADO.Close

strSQL = "SELECT * FROM 普通員工表"

rsADO.Open strSQL, cnADO, 1, 3

For i = 0 To rsADO.Fields.Count - 1

Sheets("Sheet1").Cells(1, i + 1) = rsADO.Fields(i).Name

Next i

For i = 1 To rsADO.RecordCount

For j = 0 To rsADO.Fields.Count - 1

Sheets("Sheet1").Cells(i + 1, j + 1) = rsADO.Fields(j)

Next j

rsADO.MoveNext

Next i

上述代碼先關閉之前的rsADO,然後新建立一個查詢的SQL,用於向工作表輸出數據

4 rsADO.Close

cnADO.Close

Set rsADO = Nothing

Set cnADO = Nothing

最後關閉連接和釋放內存。

特別注意點:在上述代碼中要注意的是在新的記錄集建立之前一定要關閉原先的記錄集,但這個時候的資料庫連接不用關閉,因為還是用的同一個資料庫。

好了,我們看看我們的運行結果:

看看資料庫的表:

今日內容回向:

1 如何建立一些查詢表?

2 查詢表建立後輸出的時候要注意什麼?

相關焦點

  • 利用VBA,把工作表中提供的數據在資料庫表中逐一刪除
    大家好,我們今日繼續講解VBA資料庫解決方案的第24講內容:利用VBA,把工作表中提供的數據在數據表中刪除。在上一講中,我們講了利用rsADO.addnew 和 rsADO.Update 語句實現在數據表添加記錄的方法,今日我們講解,如何在記錄集中刪除記錄。也是在有重複記錄的數據表中刪除記錄的方法,如果有重複的數據將一併刪除。
  • VBA資料庫解決方案:對Recordset記錄集合動態查詢,並顯示結果
    大家好,今日繼續講解VBA與資料庫解決方案的第10講內容,打開一個指定的資料庫記錄集,把所得的數據顯示到工作表中的方法。今日的內容是和第8講,第9講內容是相連續,在第9講中講了打開記錄集的用的方法是rsADO.Open strSQL, cnADO, 1, 3,在第8講中我們講了還有一種是Execute(strSQL)方法,今日我們就講利用這種方法達到我們的目的,同時在SQL語句中的我們將查詢設置為一個動態的查詢。
  • 運用Excel-vba合併工作表數據
    如下圖,工作簿中共有以下幾個工作表,現希望將各張工作表中的數據合併在一起。1.打開vba編輯器:右鍵單擊任意工作表,選擇「查看代碼」。2.輸入代碼:雙擊"ThisWorkbook",在代碼窗口中輸入以下代碼:Sub 合併當前工作簿下的所有工作表()Dim ws As WorksheetDim sh As Worksheet, i%On Error Resume Next '如遇錯誤繼續運行Application.ScreenUpdating = False
  • 數據查詢中,三個工作表聯合查詢的方法
    大家好,今日繼續講解VBA資料庫解決方案,今日的內容是第70講: 數據查詢中,三個工作表聯合查詢的方法。在各種查詢中,內連接,左外連接,右外連接等等,這些方法大家在工作中要多加利用,並且靈活利用,利用多了,知識就變成自己的了。今日我們講解的是三個工作表的聯合查詢,也就是說三個工作表的數據要一次查詢。我們還是看下面的實例講解。
  • excel根據目錄新建工作表及工作薄,再也不用一個一個的製作了
    Hello,大家好,今天跟大家分享下我們如何根據目錄批量的新建工作表以及工作薄,這是一個粉絲提問的問題,要求根據姓名批量的新建工作表以及工作薄,開始之前先跟大家講解什麼是工作表以及工作薄,因為真的有很多人都分不清這兩個的區別工作薄:就是我們創建的excel文件,在電腦看到的
  • 利用VBA代碼,輕鬆完成向工作表中添加指定圖片到指定位置
    今日內容是和大家分享VBA編程中常用的 「積木」過程代碼,這些內容大多是我的經驗的記錄。來源於我多年的經驗。今日分享的是第NO.215-NO.215,內容是:NO. 215:Insert方法在工作表中插入圖片********************************************************************VBA過程代碼215:Insert方法在工作表中插入圖片Sub MynzinsertPic()Dim i As
  • 在工作表查詢中如何應用右外連接
    大家好,今日繼續講解VBA資料庫解決方案,今日講解第66講:什麼是右外連接?在工作表查詢中如何應用右外連接。什麼是右外連接呢?就是是以右表為基準,將條件數據進行連接,然以將右表為基礎,沒有對應項顯示的左表列為NULL,換種說法,就是根據右表的記錄,在被連接的左表中找出符合條件的記錄與之匹配,如果找不到匹配的,用null填充。
  • 根據工作表中的數據,生成資料庫新數據表的方法
    大家好今日我們繼續講解VBA資料庫解決方案的第22講:如何利用工作表數據,生成資料庫新的數據表。在之前的講解中我們講了很多把數據從數據表中導出到工作表的方法,今日我們講解如何把數據由工作表存儲到資料庫中的數據表。為什麼要有這樣的操作呢?
  • 工作表拆分,VBA用了30行,Python只有8行
    工作中,很多小夥伴都會遇到一些需求,將一份Excel文檔按照部門進行拆分,每個部門是一個單獨的工作表。讀者需要注意的是,多個工作表的拆分,始終在一個工作簿內操作。讓我們一起通過Python來實現。本例目標:根據指定的Excel文件按照部門拆分成多個工作表。最終效果:按照部門生成工作表。技術點:groupby()方法的使用,Excel的追加模式等。
  • 把工作表中提供的特定數據在資料庫中批量刪除的方法
    大家好,我們今日繼續講解VBA資料庫解決方案的第25講內容:利用VBA,把工作表中提供的數據在數據表中批量刪除的方法。在上一講中,我們講了實現在數據表中刪除記錄的一般方法,這種方法可以對重複的數據進行處理,但實際的情況是,我們的數據記錄很多時候是沒有重複的,而且如果數據量很大,該怎麼處理呢?今日我們就講解如何在記錄集中批量刪除給定記錄的方法。
  • 利用數組分別提取數據填入不同的工作表中
    大家好,今日我們繼續講解VBA數組與字典解決方案,今日講解第77講內容:根據數據分類不同,利用數組分別提取填入不同的工作表中。數據處理中有一塊內容是數據的分類,數據的分類一般來講也可以用兩種辦法來實現,一是數組方法,一是字典方案,在77和78講中我將就這兩種方案詳細講解,今日講解的是數組方案。
  • EXCEL2016中如何快速合併多個工作簿中內容到一個工作表
    在工作中,時常要遇到將許多個工作簿中的數據合併到一個工作表中,一個一個的複製粘貼吧,幾個表或者十幾個表還行,再多了恐怕就太費時了,如果再多點比如有幾十上百個表要合併,而且又催得急可能就不是加不加班的問題了,而是會不會耽誤工作的重大問題了,一旦耽誤了工作其後果是可以想見的。
  • VBA代碼解決方案第49講:VBA代碼中工作表函數SUM的利用方法 - VBA...
    大家好,我們今日繼續講解VBA代碼解決方案的第49講內容(註:在整理之前的VBA系列文章中合併了一些文章,重新成集排序為第49講,所以從這篇文章開始以新的排序計算):VBA中SUM函數的利用方法。對多個單元格求和,是統計工作中非常普遍的工作,在之前的函數講解過程中,我下了很大的氣力來講解SUM函數及其衍生的函數,在數組的講解中也講了此函數在數組中的利用,可以說SUM函數在統計工作中起著舉足輕重的作用,如果把這個函數利用好了,對自己的工作是非常方便的,今日我在VBA中就此函數的利用及規律再次加以講解。
  • excel中如何批量創建工作表?
    在工作中,有時候我們需要一次性新建很多工作表或者工作簿,如果一個一個創建然後再重命名那就太費時間了,下面就看看如何方便快捷地創建多個工作表或者工作簿吧。一、批量新建工作表。最終要實現下圖創建多個工作表的效果,該如何操作呢?
  • 利用ADO,實現多數據在工作表間查詢的方法
    大家好,今日繼續講解VBA資料庫解決方案,今日內容是利用ADO實現兩個工作表間的查詢。在VBA的應用中,我一直在推崇的是VBA實現數據處理的自動化,也在不同的章節中講如何利用VBA進行數據的自動處理。在數據處理中,查詢一直是一大塊的內容,在工作表中,我們可以應用的方法有:查找CTRL+F,篩選,定位,進而有工作表函數LOOKUP;如果您已經上手了VBA,查找就變的非常簡單了,有多個方案可以利用,有單元格的直接判斷,有FIND,FINDNEXT等系列的方案。今日我們講的內容和以往有所不同,是利用ADO及SQL語句來實現的查找。
  • 使用VBA代碼完成判斷工作表是否存在及刪除工作表的方法
    大家好,今日內容仍是和大家分享VBA編程中常用的簡單「積木」過程代碼,這些內容大多是取至我編寫的「VBA代碼解決方案」教程中內容。NO.174-NO.175內容是:NO. 174:如何利用VBA代碼,判斷是否為空表,如果為空表則使用Delete方法刪除NO. 175:利用VBA的自定義函數,判斷工作表是否存在 VBA過程代碼174:如何利用VBA代碼,判斷是否為空表,如果為空表則使用Delete方法刪除
  • 如何利用VBA代碼進行高亮顯示某區域
    大家好,今日內容仍是和大家分享VBA編程中常用的簡單「積木」過程代碼,第NO.124-NO.126則,內容是:高亮顯示活動單元格區域、高亮顯示指定區域內的行列、如何引用工作表等內容。代碼的解析說明:上述代碼實現了設置工作表當前選定區域單元格的內部填充顏色,以高亮顯示選定區域。
  • EXCEL之VBA窗體應用實例-連接ACCESS資料庫查詢小工具
    連接並提取數據後的界面今天突然想學習弄個在EXCEL中查詢ACCESS資料庫的小工具,給大家分享一下。首先介紹一下這小工具的功能。一、自行選擇要查詢的ACCESS資料庫文件,並把詳細路徑及文件名顯示出來。二、查詢資料庫後把當前的查詢語句整體顯示出來。三、連接資料庫後,把資料庫所有的欄位名提取出來,然後可以自行選擇需要的欄位查詢及提取數據,可以重複使用不同條件查詢。四、手動設置要打開的資料庫的表名,如果不設置默認和表名和資料庫名一樣。
  • 在ASP.NET Core中利用EFCore創建資料庫表以及查詢表數據
    )、安裝前面步驟的方法,繼續安裝另外3個需要安裝的包,分別為:Microsoft.EntityFrameworkCore.Design、Microsoft.EntityFrameworkCore.Tools、Microsoft.EntityFrameworkCore.SqlServer,如下圖所示:4)、在AppSettings.json文件中添加資料庫連接字符串
  • Excel中按照條件拆分工作表,數據透視表就能實現
    有時候我們在excel中將所有數據放在同一張工作表,但由於工作需要又不得不將他們拆分到不同的工作表中,如果數量較少的時候可以使用函數公式或者篩選的辦法,但是數據量較大又不會vba怎麼辦?今天小編分享一個極其簡單的辦法:案例1:按照班級拆分,數據量較少可以使用vlookup函數第一步:添加輔助列在A2中輸入公式=B2&COUNTIF($B$2:B2,B2),就是統計班級出現的次數第二步:提取不重複值即班級需要準備將所有班級名稱提取出來,放在不同的工作表中,做好表頭第三步:按住shift鍵選定所有工作表,在中輸入公式=IFERROR