第18 章 ADO 程式設計
在Access 資料庫應用系統內,可以使用 ADO 物件來處理資料庫,若 以ADO 物件搭配 MyODBC 驅動程式,則可以在 Access 內直接與 MySQL 連線並處理資料。為了方便讀者自行在Access 內處理 MySQL 資料庫,本章 將介紹ADO 物件操作資料庫之常用方法與程式設計技巧,範例程式請參閱 acsMySQL 資料庫。
18-1 ADO 簡介 18-1-1 ADO 基礎
ADO 為 Activex Data Object 之縮寫字,它提供系統發展人員許多強而 有力的工具,透過微軟之OLEDB 系統介面,可直接存取、編輯和更新來至 於各式各樣的資料源。ADO 之用途簡述如下:
使用 SQL 指令操作資料庫
透過 Internet 存取遠端資料
操作郵件系統之信息
將資料庫資料轉存為 XML 格式資料
存取 XML 格式資料
檢視和更新資料表內資料
執行參數式查詢
執行預儲程序(Stored Procedures)
建立暫存表來處理過渡資料
執行交易處理
以動態模式過濾和排序資料
以離線方式處理遠端資料 18-1-2 前置處理
執行 ADO 物件方法時,必須先將 ADO 物件方法引入在程序檔內,引 用方法簡述如下:
任選一個表單,將選用表單開啟在設計模式
點取主功能表之【檢視】→【程式碼】,將設計介面切換至程式編輯畫面。
點取主功能表之【工具】→【引用程式項目】,開啟【引用項目】選用方塊,
如圖18-1 所示。
請 捲 動 垂 直 捲 軸 , 分 別 選 取 【 Microsoft DAO 3.6 Object Library 】 、
【Microsoft ActiveX Data Object 2.7 Library 】 及 【 Microsoft DataGrid Control 6.0】。
點取【優先權】移動鍵,將【Microsoft DAO 3.6 Object Library】移至無法 再行變更之位置,將【Microsoft ActiveX Data Object 2.7 Library】移至
【Microsoft DAO 3.6 Object Library】後端。
點取【確定 】,結束引用項目工作畫面。
圖18-1 引用項目工作畫面 18-2 ADO 指令簡介
18-2-1 資料庫連線
ADO 與其它資料庫連結時,可以使用下列兩種方式,可以指定在伺服 端或主控端處理資料,本章只說明第一種連線之語法。
直接以連線物件連結(ADODB.Connection)
透過 DSN 來連線
為了方便各個應用程式介面共用開啟之連線,可在模組介面新增一個 模組,系統自動取名為“Module1”。在 Module1 內建立一組專屬連線用之程 序或函數,相關程式碼詳述如后。本章引述程式碼時,程式碼內以單引號前 導之字串均屬註解,讀者在編輯指令時,可加以省略。
1. 在 Module1 模組開頭宣告共用變數
Public adCon As New ADODB.Connection ‘宣告公用連線物件變數 Public adRs As New ADODB.Recordset ‘宣告公用紀錄集物件變數
2. 檢查連線物件狀態
Public Sub checkCon(i As Integer) On Error GoTo chkcon_err:
If i = 1 Then ‘傳入 1 表示要開啟連線,0 表示要關閉連線
If Not adCon.state = adStateOpen Then Call openCon() ‘開啟連線 Else
Call closeCon ‘關閉連線 End If
Exit Sub chkcon_err:
MsgBox Err.Description ‘提示連線錯誤說明 End Sub
3. 開啟連線公用程序 Public Sub openCon()
On Error GoTo opnCon_err_end:
Dim cn_str As String
cn_str = DRIVER = {MySQL ODBC 3.51 Driver};" & _ "SERVER = localhost;" & _
" DATABASE = mysal;" & _
"User = 帳號; Password = 密碼; OPTION=3"
‘以上為設定連線字串,帳號及密碼請填入有經 MySQL 授權之對應字串 If Not adCon.state = adStateOpen Then
adCon.CursorLocation = adUseClient adCon.ConnectionString = cn_str adCon.Open ‘開啟連線
End If Exit Sub
opnCon_err_end:
MsgBox Err.Description End Sub
註:adUseClient 係將游標控制權設定在主控端,若使用adUseServer 則在伺 服端,可用於宣告公用連線。由於MyODBC 對 ADO 物件部份指令不 支援,因此MySQL 發行公司建議用戶採用 adUseClient。
4. 關閉連線公用程序 Public Sub closeCon()
If adCon.state = adStateOpen Then
adCon.Close ‘若為開啟狀態,則關閉連線 Set adCon = Nothing
End If End Sub
18-2-2 開啟紀錄集
1. 指令語法
紀錄集物件變數.Open 參數一,參數二,參數三,參數四 其中
紀錄集物件變數:預存記錄變數 Open:ADO 開啟物件方法
參數一:SQL 指令,通常是由 Select 前導之敘述,
參數二:已開啟之連線物件變數,
參數三:紀錄集開啟模式,可選項之常數如表18-1 所示,
參數四:讀寫模式,選項常數如表18-2 所示。
表18-1 紀錄集開啟模式常數表
模式選項常數 特性與用法
adOpenForwardOnly 紀錄只能往前捲動,不能倒捲 用於只瀏覽但不修改資料
adOpenStatic 紀錄可以前後捲動,可開啟為唯讀或讀寫模式
不反應同一紀錄集其他使用者所作之資料變更,
adOpenKeyset 此特性介於Static 和 Dynamic 之間,適用於大型紀 錄集但只有少數紀錄符合鍵值條件時;可偵測游標 控制權內之紀錄變更,但無法正確反映其原來之順 序;他人所作之變更也無法偵測,除非重新開啟記 錄集
adOpenDynamic 所有紀錄之變更均能立即偵測,但是連線物件設為
交易模式時,他人所作之變更,必須在執行 Commit 指令之後才能偵測得知
表18-2 讀寫模式常數表
模式選項常數 特性與用法
adLockReadOnly 不允許資料更新
adLockBatchOptimistic 批次更新,允許離線處理資料,允許他人同步存 取資料;下達BatchUpdate 指令後,資料才加以鎖 定
adLockPessimistic 資料鎖定後,他人無法更新;下達Edit 指令後,
資料即鎖定
adLockOptimistic 允許他人更新資料;下達Edit 指令時,資料不鎖 定,等到下達Update 指令資料才被鎖定
2. 開啟紀錄集公用程序
Public Function openRs(rstr As String) AS ADODB.Recordset
‘宣告開啟紀錄集函數,接收參數為 SQL 字串,回傳資料設為紀錄集物 件
On Error Goto openRs_err
If adRs.state = adStateOpen Then adRS.Close
‘將前次開啟之紀錄集物件關閉
adRs.Open rstr, adCon, adOpenDynamic, adLockBatchOptimistic
‘開啟紀錄集
adRs.MarshalOptions = adMarshalModifiedOnly Set adRs.ActiveConnection = Nothing ‘將紀錄離線 Set openRs=adRS ‘傳回開啟之紀錄集
Exit Function openRS_er:
. Msgbox Err.Description End Function
註:將紀錄集離線,資料置於主控端處理,如此可減輕伺服器之負荷。離線 之紀錄集隨時都可以重新連線,連線指令為:
Set adRs.ActiveConnection =adCon 3. 關閉紀錄集
Public Sub closeRs()
If adRs.state = adStateOpen Then
adRs.Close ‘若紀錄集仍開啟,則予以關閉 Set adRs = Nothing
End If End Sub
18-2-3 資料處理
為方便介紹資料處理指令,請讀者仿照圖18-2 建立一個表單,表單取 名為客戶資料登錄作業,在表單內分別加入八個文字方塊及五個指令按鈕,
物件名稱可以介面提示文字同名。
圖18-2 ADO 資料處理範例表單 以下介紹以ADO 處理資料之程序和指令:
1. 連線及開啟資料表
搭配表單之On Open 事件程序,指令如下:
Private Sub Form_Open(Cancel As Integer) Dim str As String
Call checkCon(1) ‘檢查是否已連線
str = ”Select * From cuinfo” ‘設定紀錄集 SQL 指令 Call openRs(str) ‘開啟紀錄集
End Sub
關閉表單時,搭配On Close 事件程序將資料寫回伺服端,指令如下:
Private Sub Form_Close() adRs.Filter = "" ‘將過濾器關閉
Set adRs.ActiveConnection = adCon ‘重新連線
adRs.Filter = adFilterPendingRecords ‘將過濾器設為被異動部份 adRs.UpdateBatch ‘寫回異動紀錄
adRs.Close ‘關閉紀錄集 Set adRs = Nothing
End Sub 2. 新增紀錄
2.1 指令:adRs.Addnew ……adRs.Update
2.2 實作:搭配按鈕【新增 】之 On Click 事件程序,指令如下:
With adRs
.AddNew ‘新增空白紀錄
!CU_No = Me!CU_No ‘將控制項資料存入紀錄 ……….’處理其它欄位
.Update ‘將紀錄寫入記憶體紀錄集 End With
3. 查詢紀錄
3.1 搜尋記錄指令語法
指令語法:紀錄集‧Filter = “比對欄位” “關係運算子” “比對條件”
其中
關係運算子:可指定為=、>=、<=,或<>(表示不等於);
比對條件:屬字串型資料時,須在資料前後加上引號;若屬日期型資料 , 須在資料前後加上#符號;數值型資料則可以直接串接。
範例:adRs.Filter = "CU_No ='" & Me!CU_No & "'"
判斷未找到紀錄:adRs.EOF。
在搜尋記錄前,最好先執行adRs.Filter=””(或是 adRs.Filter =
adFilterNone),將前一次過濾條件解除,否則會將前一次之搜尋結果當資 料來源,因而造成部分資料漏失。使用Filter 方法時,可搭配表 18-3 之常數 來過濾資料。
表18-3 Filter 方法過濾結果常數表
常數選項 說 明
adFilterAffectedRecords 選出最近異動過之紀錄,包括以刪除、批次更新、
取消更新處理過之紀錄
adFilterConflictingRecords 選出最近以批次更新處理失敗之紀錄 adFilterFetchedRecords 選出最近被置於快取之紀錄
adFilterNone 許消最近使用之過濾條件並回複所有記錄
adFilterPendingRecords 取出最近被異動但尚未寫回伺服端之記錄,必須 搭配批次更新指令
3.2 實作
搭配按鈕【查詢 】之On Click 事件程序,指令如下 Private Sub 查詢_Click()
adRS.Filter = “CU_No = ‘” & Me![CU_No] & “’” ‘設定過濾條件 If adRS.EOF Then
MsgBox "未找到該筆紀錄"
Else
Me!CU_No = adRs!CU_No ‘將欄位資料寫入控制項 ………….’(加入其他欄位)
End If End Sub 3.3 說明
查詢紀錄時,先在表單之CU_No 文字方塊輸入查詢條件,然後按下
【查詢 】按鈕,若找到紀錄則立即顯示在表單上,否則提示「未找到該筆紀錄」
4. 刪除記錄 4.1 指令語法
adRs.Delete 4.2 實作
搭配按鈕【刪除 】之On Click 事件程序,指令如下:
Private Sub 刪除 _Click() Dim rps
Dim Style
Style = vbYesNo + vbCritical + vbDefaultButton2 rps = MsgBox("刪除紀錄嗎?", Style, "刪除紀錄") If rps = vbYes Then
adRs.Delete End If End Sub 5. 修改/儲存紀錄 5.1 指令語法
adRs.Update 5.2 實作
搭配表單按鈕【儲存 】之On Click 事件程序,指令如下:
Private Sub 儲存_Click()
adRs.Filter = "" ‘清除過濾條件
adRs.Filter = "CU_No ='" & Me!CU_No & "'" ‘設定過濾條件 If Not adRs.EOF Then ‘若找到該類紀錄
With adRs
!CU_No = Me!CU_No ‘將控制項資料寫回欄位 ……….’處理其它藍欄位 .Update ‘更新紀錄
End With End If End Sub 5.3 說明
當需要編輯或修改特定紀錄時,必須先查詢紀錄,找到記錄後再加以 編輯,然後按【儲存 】鈕,將紀錄存檔。前述之儲存動作,乃將編輯結果儲存 在主控端之紀錄集內,實際上伺服端還是保持原來的資料。
6. 更新記錄 6.1 指令語法
adRs.UpdateBatch 6.2 實作
搭配【更新 】按鈕之On Click 事件程序,指令如下:
Private Sub 更新_Click()
adRs.Filter = "" ‘取消過濾條件 Set adRs.ActiveConnection = adCon ‘重新連線
adRs.Filter = adFilterPendingRecords ‘設定過濾條件為被異動之紀錄 adRs.UpdateBatch ‘更新紀錄
Set adRs.ActiveConnection =Nothing ‘離線 End Sub
6.3 說明
若資料已更新,臨時反悔而要放棄已更新結果,可搭配adRs.CancelBatch 指令,即可將最近一次以UpdateBatch 更新之紀錄放棄更新。
18-2-4 批次更新、轉檔及刪除
本節介紹之程序範例,讀者可在表單內加入一個指令按鈕,然後將相關指令 加入該指令按鈕之On Click 事件程序內。
1. 直接在連線物件執行 SQL 指令
指令語法:adCon.Execute SQL 指令
範例:以銷貨金額轉應收帳為例,更新資料指令如下:
Dim str AS String
str=” Select spbill.SP_Blno, spbill.CU_No, splist.PD_No, splist.SP_Qty,” & _
“cuquoat.UN_Price, splist!SP_Qty*cuquoat!UN_Price AS Amount, “ & _
“splist.TR_Note FROM cuquoat Inner Join (spbill Inner Join splist ON “ & _
“spbill.SP_Blno = splist.SP_Blno) ON (cuquoat.CU_No = spbill.CU_No) “ &
_ “ AND (cuquoat.PD_No = splist.PD_No);”
adCon.Execute str 2. 搭配交易處理方法
adCon.BeginTrans ‘開啟一個交易程序 adCon.Execute str ‘執行資料更新交易 adCon.CommitTrans ‘確認交易結果
若交易過程發生錯誤,需要將所有記錄捲回原來狀態,則需搭配下列指 令:
On Error Goto Tran_err:
adCon.BeginTrans adCon.Execute str adCon.CommitTrans Exit Sub
Tran_err:
adCon.RollBackTrans ‘捲回起始狀態 3. 使用紀錄集操作方法
仍以銷貨金額轉應收帳為例,使用ADO 物件紀錄集操作指令如下:
Dim rs1 As New ADODB.Recordset, rs2 As New ADODB.Recordset Dim str1 As String, str2 As String, cu AS String
str1=” Select spbill.SP_Blno, spbill.CU_No, splist.PD_No, splist.SP_Qty,” & _
“cuquoat.UN_Price, splist!SP_Qty*cuquoat!UN_Price AS Amount, “ & _
“splist.TR_Note FROM cuquoat Inner Join (spbill Inner Join splist ON “ & _
“spbill.SP_Blno = splist.SP_Blno) ON (cuquoat.CU_No = spbill.CU_No) “ & _
“And (cuquoat.PD_No = splist.PD_No) Where (((splist.TR_Note) Is Null)) ” & _
“ Order By spbill.CU_No;”
‘設定以關聯方式連結兩個紀錄集之 SQL 指令
rs1.Open str1, adCon, adOpenDynamic, adLockBatchOptimistic
’開啟異動紀錄集
rs1.MarshalOptions = adMarshalModifiedOnly Set rs1.ActiveConnection = Nothing
str2 = “Select * From rcpay Order By CU_No;”
rs2.Open str2, adCon, adOpenDynamic, adLockBatchOptimistic
‘ 開啟主控紀錄集
rs2.MarshalOptions = adMarshalModifiedOnly Set rs2.ActiveConnection = Nothing
With rs1
Do While Not .EOF
cu=!CU_No ‘取出異動紀錄集鍵值 With rs2
.Filter=””
.Filter = “CU_No = ‘” & cu & “’” ’搜尋主控紀錄集合乎鍵值之紀錄 If Not .EOF Then
!CR_Spamt = !CR_Spamt + rs1!Amount
‘將異動檔資料以累加方式轉入主控檔 !CR_Upamt =!CR_Upamt + rs1!Amount
.Update ‘更新紀錄
rs1!TR_Note = ‘T’ ‘異動檔加上轉檔註記 rs1.Update
End If End With
.MoveNext ‘異動檔紀錄指標下移一筆 Loop
End With
rs1.Filter = "" ‘取消過濾條件 Set rs1.ActiveConnection = adCon ‘重新連線
rs1.Filter = adFilterPendingRecords ‘過濾條件設為異動未寫回部份 rs1.UpdateBatch ‘更新紀錄
rs2.Filter = ""
Set rs2.ActiveConnection = adCon rs2.Filter = adFilterPendingRecords rs2.UpdateBatch
. rs1.Close ‘關閉紀錄集
. rs2.Close
18-2-5 紀錄及欄位操作指令說明
1. 搜尋紀錄指令:adRs.Filter
指令語法:紀錄集‧Filter = “比對欄位” “關係運算子” “比對條件”
說明:使用方法見前節說明。
2. 移動紀錄指令
移次筆,語法:adRs.MoveNext 移上筆,語法:adRs.MovePrevious 第一筆,語法:adRs.MoveFirst 最末筆,語法:adRs.MoveLast
前述指令通常須搭配迴圈指令來使用,指令語法為:
Do While Not adRs.EOF ………..Loop ‘若還未至檔案末端 Do While Not adRs.BOF ………..Loop ‘若還未至檔案前端 3. 計算紀錄筆數
語法:adRs.RecordCount,回傳結果為長整數。
應用範例:If adRs.RecordCount = 0 ‘表示資料表無任何紀錄 4. 計算欄位數
語法:adRs.Fields.Count,回傳結果為整數,通常可搭配 For 迴圈使用。
應用範例:
For i =0 To adRs.Fields.Count – 1 adRs(i) = 資料處理指令
Next i
5. 欄位資料處理
可選用下列任意型式:
指定欄名:adRs (“欄名”),adRs.Fields(“欄名”),adRs.Fields.Item(“
欄名”) 皆可。
指定欄序:adRs (i),adRs.Fields (i),adRs.Fields.Item(i),i 從 0 起算。
取出欄值
範例: 變數=adRs(i),或 adRs!欄名
存回欄值
範例: adRs(i)=變數,或 adRs!欄名=變數
搭配 For 迴圈取出每個欄位資料
For i = 0 To adRs.Fields.Count – 1 變數=adRs(i)
………..
Next i 6. 取得欄名
語法:adRs(i).Name
18-3 DataGrid 物件簡介 18-3-1 DataGrid 物件應用
ADO 物件可以搭配 DataGrid 物件,直接瀏覽伺服端的紀錄集資料。設 計應用程式介面時,可在表單內插入一個DataGrid 控制項,然後將開啟的紀 錄集連結至此控制項,即可瀏覽整個紀錄集的資料。以下以一個ADO 泛用查 詢表單為例,說明DataGrid 物件之引用方式和相關指令語法。
1. 首先建立一個取名為【DBGrid 應用表單】之表單,依序加入下列控制項。
2. 組合方塊一:取名為 tblDa,標籤抬頭提示為【資料表】。
3. 組合方塊二:取名為 qrySQL,標籤抬頭提示為【SQL】。
實 際 應 用 時 , 可 在 此 方 塊 內 輸 入 前 導 字 元 為 “Select” 、 “ Show” 或
“Describe”之 SQL 指令。
4. 指令按鈕一:取名為 tblCmd,標籤抬頭提示為【查閱資料表】。
5. 指令按鈕二:取名為 qryCmd,提示抬頭為【查閱 SQL】。
6. DataGrid 控制項:取名為 dtlData,加入方式如下:
點選主功能表之【插入】、【ActiveX 控制項(c)】
下拉【ActiveX 控制項】選項功能表,點選【Microsoft DataGrid Control, Version 6.0】,如圖 18-3 所示,然後按【確定】。
7. 當表單出現 DataGrid 控制項後,請以滑鼠調整控制項大小至適當尺寸,
將控制項取名為dtlData。
圖18-3 DataGrid 控制項引用示意圖
8. 點開【表單】事件屬性之 On Open 程序編輯視窗,加入下列指令,此程序 用於開啟連線物件,以及指定資料表組合方塊之資料來源。
Private Sub Form_Open(Cancel As Integer) Call checkCon(1)
Dim tst As String
tstr = "Show Tables From mysal”
‘設定顯示 mysal 資料庫之資料表 SQL 指令
adRs.Open tstr, adCon, adOpenStatic, adLockBatchOptimistic
‘以紀錄集型式擷取伺服端回傳結果 tstr = ""
With adRs
Do While Not .EOF If tstr = "" Then tstr = adRs (0)
‘回傳結果之第一個欄位內含資料表名,可將資料表名組成字串,資 料表間須以“;”間隔
Else
tstr = tstr & ";" & adRs(0) End If
.MoveNext Loop
End With
tblDa.RowSourceType = "Value List"
‘tblDa 控制項資料來源型式設為值清單,若來源為資料表,則"Value List" 須改為"Table/Query"
tblDa.RowSource = tstr ‘tblDa 控制項資料來源設為資料表字串 End Sub
9. 點開【查閱資料表 】事件屬性之 On Click 程序編輯視窗,加入下列指令:
Private Sub tblCmd_Click()
Dim str As String
If IsNull(tblDa) Then Exit Sub ‘假如未選入資料表名則跳離 str = "Select * From " & Me!tblDa & ";" ‘組合 SQL 指令
Call openRs(str) ‘開啟紀錄集
Set dtlData.DataSource = adRs ‘dtlData 物件資料來源設為紀錄集 End Sub
10. 點開【查閱 SQL 】事件屬性之 On Click 程序編輯視窗,加入下列指令:
Private Sub qryCmd_Click() Dim str As String
If IsNull(qrySQL) Then Exit Sub ‘假如未輸入 SQL 指令則跳離 str = Me!qrySQL ‘取出 SQL 指令
Call openRs(str)
Set dtlData.DataSource = adRs End Sub
11. 點開【表單】事件屬性之 On Close 程序編輯視窗,然後加入下列指令,此程序用 於關閉紀錄集。
Private Sub Form_Close(Cancel As Integer) adRs.Close
End Sub
12. 完成之表單介面如圖 18-4 所示。
圖18-4 ADO 應用表單測試結果
18-3-2 DataGrid 屬性說明
DataGrid 控制項常用屬性說明如下:
1. DataSource:設定連結資料來源
語法:Set 控制項物件名稱.DataSource = 紀錄集物件 2. Columns:控制項欄位集合
語法:控制項物件名稱.Columns(i),i 從 0 起算。
3. Columns(i).Value:控制項欄位資料
取值:變數=控制項物件名稱.Columns(i).Value 存值:控制項物件名稱.Columns(i).Value=變數 4. Columns(i).Width:控制項欄位寬度
語法:控制項物件名稱.Columns(0).Width=230(以 twis 為單位)
連結MySQL 紀錄集時,可使用下列指令來調整適當的欄寬:
控制項物件名稱.Columns(i).Width = adRs(i).DefinedSize * 38 註:38 為倍率。
5. Columns(i).Caption:控制項欄位抬頭
語法:控制項物件名稱.Columns(0).Caption=”客戶編號”
6. HeadFont.Size:控制項欄位抬頭字體大小 語法:控制項物件名稱.HeadFont.Size =10 7. Font.Size:控制項欄位資料字體大小
語法:控制項物件名稱.Font.Size = 10
8. AllowAddNew/ AllowDelete/ AllowUpdate:允許新增/刪除/更新 語法:控制項物件名稱.AllowAddNew = True
控制項物件名稱.AllowDelete = False 9. AllowArrows:方向鍵移動屬性
語法:控制項物件名稱.AllowArrows = True|False 設為True,允許以方向鍵在欄位間或紀錄間移動 設為False,方向鍵用於控制項之移動
10. WrapCellPointer:方向鍵移動捕捉屬性
語法:控制項物件名稱.WrapCellPointer = True|False 設為True,方向鍵在控制項內之紀錄間移動
設為False,方向鍵無法在上下紀錄間移動 11. TabAction:Tab 鍵屬性
語法:控制項物件名稱.TabAction = 0|1|2
設為0(dbgControlNavigation),Tab 鍵用於控制項之移動)
設為1(dbgColumnNavigatio) ,Tab 鍵用於欄位間移動,當移動會造成 紀錄改變時,則移至下一個控制項。
設為2(dbgGridNavigation) ,和 1 類似,但有設定 WrapCellPointer 時,
則不移至其它控制項。
以上屬性8 ~ 11,可在控項屬性欄之其它部分來指定屬性值。若新增/刪 除/更新屬性設為 True 時,必須在表單內加入一個更新指令按鈕,然後在 On Click 事件屬性加入更新指令,將資料寫回伺服端,此部分請讀者自行處理。
18-4 常用流程控制指令 1 選擇型-決策判斷
指令語法:
樣式一(單選型):
If 條件式
資料處理指令區塊 End If
樣式二(二選一):
If 條件式
資料處理指令區塊 A
Else
資料處理指令區塊 B End If
樣式三(多選一):
If 條件式 A
資料處理指令區塊 A Else
If 條件式 B
資料處理指令區塊 B Else
……….
End If
……….
End If
樣式四(多選一):
Select Case 條件式 Case 條件值 A
資料處理指令區塊 A Case 條件值 B
資料處理指令區塊 B
Case ……….
………
End Select 2 迴圈型
指令語法:
Do While Not adRs.EOF 資料處理指令區塊
adRs.Movenext ‘移動紀錄指標 Loop
若要強制跳離迴圈,可搭配 Exit Do 指令。
3 計數迴圈型 指令語法:
For i = 0 To 上限次數
資料處理指令區塊 Next i
若要強制跳離迴圈,可搭配 Exit For 指令。
應用範例:
For i = 0 To adRs.Fields.Count - 1 Na = adRs(i) ‘取得欄名
Next i