以vba 配合sql語法讀取關聯式資料庫

3
以 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")

Upload: programtradingtw6519

Post on 14-Nov-2014

186 views

Category:

Documents


13 download

TRANSCRIPT

Page 1: 以VBA 配合SQL語法讀取關聯式資料庫

以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")

Page 2: 以VBA 配合SQL語法讀取關聯式資料庫

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所示。

Page 3: 以VBA 配合SQL語法讀取關聯式資料庫

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

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