You are on page 1of 3

 以 VBA 配合 SQL 語法讀取關聯式資料庫

圖 3.5.74 取得所欲分析的股票代碼以及分析期間的介面

表 3.5.13 使用 SQL 語法讀取資料庫之說明範例(ADO_Test1.xls)


行號 程式碼
1 Private Sub CommandButton1_Click()

2 Dim D1101(100, 6) As String


3 Dim Test_Dir As String
4 '取得查詢參數
5 Dim Stock_I, Start_D, End_D As String
6 Stock_I = TextBox1.Text
7 Start_D = TextBox2.Text
8 End_D = TextBox3.Text
9 '設定資料庫路徑位置
10 Test_Dir = ThisWorkbook.Path & "\"
11 '連線資料庫
12 Dim Con_Test As ADODB.Connection
13 Set Con_Test = New ADODB.Connection
14 Con_Test.Open "Provider = Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & Test_Dir &
"StockTrans.mdb"
15 '資料庫讀取
16 Dim RS_Test As ADODB.Recordset
17 Dim Row_No As Integer
18 Set RS_Test = New ADODB.Recordset
19 RS_Test.Open "SELECT * FROM " & Stock_I & "D WHERE Date Between '" &
Start_D & "' AND '" & End_D & "'", Con_Test
20 Row_No = 0
21 While RS_Test.EOF = False
22 Row_No = Row_No + 1
23 D1101(Row_No, 1) = RS_Test.Fields("Date")
24 D1101(Row_No, 2) = RS_Test.Fields("Open")
25 D1101(Row_No, 3) = RS_Test.Fields("High")
26 D1101(Row_No, 4) = RS_Test.Fields("Close")
27 D1101(Row_No, 5) = RS_Test.Fields("Low")
28 D1101(Row_No, 6) = RS_Test.Fields("Volume")
29 Cells(Row_No, 1) = D1101(Row_No, 1)
30 Cells(Row_No, 2) = D1101(Row_No, 2)
31 Cells(Row_No, 3) = D1101(Row_No, 3)
32 Cells(Row_No, 4) = D1101(Row_No, 4)
33 Cells(Row_No, 5) = D1101(Row_No, 5)
34 Cells(Row_No, 6) = D1101(Row_No, 6)
35 RS_Test.MoveNext
36 Wend
37 '資料庫連線釋放
38 RS_Test.Close
39 Con_Test.Close
40 Set Con_Test = Nothing
41 End Sub

表 3.5.13 的程式碼與表 3.5.11 的程式碼大致相同,不同之處已經於表 3.5.13 中以底線標示,以


下僅就不同之處做說明:

1. 行(5)到行(8)用以讀入使用者透過圖 3.5.74 介面讀入的參數。


2. 行(19)使用 SQL 語法讀取指定名稱(存於 Stock_I 變數中)資料表(即 1101D 資料表)之 Date 欄位中,
資料介於(Between)起始日期(Start_D)與(AND)終止日期(End_D)間的紀錄;藉由此程式行,可產
生「SELECT * FROM 1101D WHERE Date Between ‘20040102’ AND '20040439’」的 SQL 語法,
請 讀 者 特 別 留意 SQL 語法中的日期以單引號含括,此單引號也必須在程式碼中以 字 元 方
式加入。Con_Test 為指定的連線。

執行程式,即可查詢出指定資料表的指定期間資料,如圖 3.5.75 所示。


圖 3.5.75 執行程式可查詢出指定資料表的指定期間資料

在以上範例中,僅以 ADO 查詢外部資料表,但其實 ADO 也有對外部資料庫作增加紀錄、刪除


紀錄、修改紀錄的功能。

You might also like