Professional Documents
Culture Documents
圖 3.5.64「設定引用項目」視窗
Connection
Error
Command
Parameter
Recordset
Field
使用 ADO 控制外部資料庫的基本程序如下:
以下以一實際例子來看如何以程式碼進行上述的處理。
表 3.5.11 資料庫連線、處理與離線(連線釋放)之說明範例
行號 程式碼
1 Sub ADO_Ex1()
圖 3.5.66 資料表格設計
資料表設計完成後,即可輸入資料,逐筆輸入資料曠日費時,最好的方式是使用匯入資料的轉
方式。
首先,我們由將屬於編號 1101 股票的交易日期、開、高、收、低、量等資料匯整在一文字 中,該
文字檔以 Excel 打開如圖 3.5.67 所示。此彙整 案亦可藉由寫一 VBA 轉 程式產生。
圖 3.5.67 範例文字檔內容
圖 3.5.68 開 舊 視窗
圖 3.5.69「匯入文字精靈」程序 I
圖 3.5.70「匯入文字精靈」程序 II
圖 3.5.71「匯入文字精靈」程序 III
在圖 3.5.71 中,由於我們已經事先定義好名為 1101D 的資料表,因此選擇「在現存的資料表
中」選項,並選取「1101D」選項。按下一步,進入圖 3.5.72 的視窗中,即可完成資料匯入之程序。
圖 3.5.72「匯入文字精靈」程序 IV
圖 3.5.73 匯入文字檔後之結果
1. 行(1)為程序名稱,行(36)為執行程序的終點。
2. 行(2)宣告一名為 D1101 的陣列,用以儲存由資料庫讀入的資料,陣列第二維的大小為 6,依序
可以儲存日期與開高收低量等資料,由於承接的資料為文字資料,因此宣告陣列為字元陣列。
3. 行(3)宣告 Test_Dir 變數之變數型態,此變數用以儲存存 路徑。
4. 行(5)取得活頁簿 案所在路徑,以作為資料庫 案的預設路徑。也就是說,只要把資料庫 案與
此執行程序所在的活頁簿 案放在同一個目錄中,就不怕存取不到 案。
5. 行(6)到行(9)用以連線資料庫。行(7)將 Con_Test 宣告為 Connection 物件;在行(8)中使用
New 關鍵字產生新的 Connection 物件;在行(9)中對產生之 Connection 物件使用 Open 方法,
確立與外部資料庫的連線。行(9)的連線字串之基本格式如下:
Provider=<使用的 OLEDB Provider 名稱>; Data Source=<外部資料庫的 案位置>
代表性的 Provider 指定字串如表 3.5.12 所示。有些資料庫的連線字串參數更長,例如 SQL
Server 必須指定使用者名稱與密碼等。
6. 行(10)到行(31)為外部資料庫讀取程式碼。行(11)將變數 RS_Text 宣告為 Recordset 物件,並
於行(13)使用 New 關鍵字產生新的 Recordset 物件。行(12)宣告 Row_No 變數用以紀錄讀入資
料筆數。行(14)對所產生的 Recordset 物件,把想要匯入的資料表名稱與使用者連線指定為
Open 方法的引數,以便由連線資料庫(Con_Test)之指定資料表(名為 1101D)的資料讀入
Recordset 中。行(15)設定紀錄筆數的起始值。
7. 行(16)到行(31)的「While … Wend」迴圈用以將資料表的紀錄逐筆讀入陣列中,並顯示於工作
表上。行(17)用以增加資料紀錄筆數計數,行(18)至行(23)分別將日期、開、高、收、低、量等資料
讀入 D1101 陣列中的指定位置;指定讀入的欄位可以使用如下語法:
Recordset 物件.Fields(欄位名)
行(24)到行(29)將 D1101 陣列值存入試算表格位中,如此,即可以確知有無將資料成功讀入。
行(30)之 MoveNext 方法用以將資料表讀取紀錄指標移到下一筆紀錄,如此即可於下一次迴圈
中讀入下一筆資料。除了 MoveNext 外,MovePrevious、MoveFirst、MoveLast 分別用以將紀
錄移到前一筆、第一筆,以及最後一筆。
8. 行(32)至行(35)之指令用於釋放資料庫連線。行(33)中的 Close 方法用以關閉資料庫,行(34)中
的 Close 方法用以關閉連線,行(35)用以丟棄已經不用的物件。
本範例的程式碼看似複雜,但其實讀者可以引用大部分的程式碼,而僅修改部分參數,
包括:(1)連接資料庫種類;(2)資料庫 案名稱及其所在路徑;(3)資料表名稱;(4)資料欄
位名稱等,即可。
■
除了以上方法可用以將指定資料庫的資料表中資料讀入程式中外,另一種方法是使用 SQL 敘述
取得資料。
透過 SQL 敘述取得資料可有更大的彈性,以程式交易為例,往往僅需要分析特定股票、特定期
間的資料,因此不需要把整個資料表讀入,如此不但可以節省儲存空間,也可以加快處理效率。關於
SAL 語法,在本節後文中有分類整理說明。
為此,在以下範例中,我們先設計一簡單介面(如圖 3.5.74 所示),取得所欲分析的股票代碼以
及分析期間的起始與終止日期。繼而在 CommandButton1 的 Click 事件程序中撰寫如表 3.5.13 的
程式碼,即可達成目標。