Upload
programtradingtw6519
View
162
Download
13
Embed Size (px)
Citation preview
以VBA 配合 SQL語法讀取關聯式資料庫
圖 3.5.74取得所欲分析的股票代碼以及分析期間的介面
表 3.5.13 使用 SQL語法讀取資料庫之說明範例(ADO_Test1.xls)
行號 程式碼1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Private Sub CommandButton1_Click()
Dim D1101(100, 6) As String
Dim Test_Dir As String
'取得查詢參數Dim Stock_I, Start_D, End_D As String
Stock_I = TextBox1.Text
Start_D = TextBox2.Text
End_D = TextBox3.Text
'設定資料庫路徑位置 Test_Dir = ThisWorkbook.Path & "\"
'連線資料庫 Dim Con_Test As ADODB.Connection
Set Con_Test = New ADODB.Connection
Con_Test.Open "Provider = Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & Test_Dir
& "StockTrans.mdb"
'資料庫讀取 Dim RS_Test As ADODB.Recordset
Dim Row_No As Integer
Set RS_Test = New ADODB.Recordset
RS_Test.Open "SELECT * FROM " & Stock_I & "D WHERE Date Between '" &
Start_D & "' AND '" & End_D & "'", Con_Test
Row_No = 0
While RS_Test.EOF = False
Row_No = Row_No + 1
D1101(Row_No, 1) = RS_Test.Fields("Date")
D1101(Row_No, 2) = RS_Test.Fields("Open")
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
D1101(Row_No, 3) = RS_Test.Fields("High")
D1101(Row_No, 4) = RS_Test.Fields("Close")
D1101(Row_No, 5) = RS_Test.Fields("Low")
D1101(Row_No, 6) = RS_Test.Fields("Volume")
Cells(Row_No, 1) = D1101(Row_No, 1)
Cells(Row_No, 2) = D1101(Row_No, 2)
Cells(Row_No, 3) = D1101(Row_No, 3)
Cells(Row_No, 4) = D1101(Row_No, 4)
Cells(Row_No, 5) = D1101(Row_No, 5)
Cells(Row_No, 6) = D1101(Row_No, 6)
RS_Test.MoveNext
Wend
'資料庫連線釋放 RS_Test.Close
Con_Test.Close
Set Con_Test = Nothing
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也有對外部資料庫作增加紀錄、刪除紀錄、修改紀錄的功能。