大家好,今日講解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 查詢表建立後輸出的時候要注意什麼?
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!